数据库分为两种,关系型数据库和非关系型数据库。操作关系型数据库就是编写SQL(Structured Query Language)语句。SQL语句有很多,但是我这个项目是针对菜鸟用的(我相信大佬应该都不用图形管理工具,都是直接命令走起的),所以我就只讲解一下简单的SQL语句。SQL语句主要分为两类,读取数据库和写入数据库。今天就来讲解一下读取数据库要用到的SQL语句。
当我们需要查看已经有哪些数据库,可以执行SQL语句——SHOW DATABASES;来实现,如图所示。
这个SQL语句没有可变参数,到时候直接封装成方法即可。有些人就会问了,难道还有可变参数?还真有,当你要显示一个数据库的所有表时,我们就需要先告诉系统要使用哪个数据库。
我们要切换当前使用的数据库,没有必要在应用程序中关闭连接再重新连接。我们可以直接通过执行SQL语句——USE (数据库名)来切换数据库。为了验证是否真的切换成功,我们不在这里验证,而是选择在操作下面一个SQL语句时验证。
一个数据库里面要么没有表,要么只有一个表,要么有很多个表,我们要查看当前数据库有哪些表可以通过执行SQL语句——SHOW TABLES来查看,在执行该语句之前一定要选择要使用的数据库,如图所示。
我首先是选择一个名字叫food的数据库,然后显示了这个叫food的数据库有哪些表,可以发现,这里面就一个表——名叫food。然后我切换数据库,切换成一个名字叫uml的数据库,然后显示了这个数据库的所有表,和上面的结果不一样可以说明数据库切换成功,同时也意味着SHOW TABLES这个SQL语句执行正确。
我们可以发现切换数据库需要提供一个参数——这个参数就是数据库名,到时候封装成方法也需要提供这个参数,方便在调用时传入参数。显示数据库的所有表就不需要任何参数了,直接封装即可。
一个数据表无非就只有两个玩意——字段名和字段值,有些时候我们需要数据表的字段名,我们可以通过执行SQL语句——SHOW COLUMNS FROM (表名)来查看,如图所示。
这个SQL语句有一个可变参数——表名。到时候依旧是封装成方法,方法提供一个参数即可。
前面讲完了查看数据库和数据表相关信息之后,现在已经到了重点部分了——查询数据。
查看一个表的所有数据其实很简单,我们可以通过执行SQL语句——SELECT * FROM (表名)来实现,如图所示。
很多时候我们并不需要像上面那样显示所有数据,而是只需要某几列的数据,我们依旧还是执行SELECT语句,只不过这次和上面的不一样了。SQL语句以及执行结果如图所示。
看到了吗?这一点也不难直接通过给SQL语句列名就可以只查找这几列的数据。有些人就会奇怪了,为什么列名需要用反引号引起来?这是因为key是一个SQL关键字,为了进行区分就需要这么做,实际上表名也需要引起来,在这里config虽然不是关键字,但到以后封装的时候还是要用反引号引起的,反正任何变量都需要用反引号引起来以避免和SQL关键字冲突。
有些时候我们并不需要像这样把所有行都显示出来,我们要查看一些符合条件的数据,比如在一个食品数据表中我们要查看卡路里小于等于100并且纤维素大于等于10的所有食品的所有信息,如图所示。
WHERE后面接的就是条件,这样就只会查出来符合这个条件的数据,并不会返回所有数据。
有些时候,我们并不仅仅是直接通过条件限制查询,我们可能还需要对结果按某个关键字排序,也有可能只需要前10条记录。
排序分为两种,升序和降序。升序就是从小到大排序,降序就是从大到小排序,MySQL默认为升序排序,如果要降序排序我们需要加上关键字DESC,如图所示。
有些时候,我们不仅仅只有一个排序字段,而是有多个字段需要排序,比如在学生成绩管理系统数据库中,要排个名次,我们一定是先按照分数排,分数一样按照学号排,这个时候学号就是一个次关键字。当然还可以定更多个次关键字,下面我直接给出多个字段排序的关键语句,不会一个个截图了。
ORDER BY score, number /*先按照score升序排序,如果score相同,就按照number升序排序*/
ORDER BY score, number DESC /*先按照score升序排序,如果score相同,就按照number降序排序*/
ORDER BY score DESC, number /*先按照score降序排序,如果score相同,就按照number升序排序*/
ORDER BY score DESC, number DESC /*先按照score降序排序,如果score相同,就按照number降序排序*/
有些时候,当满足条件的结果太多,我们需要进行结果数量限制,比如游戏排行榜数据库中,我们需要获取前10名的玩家信息,如图所示。
LIMIT后面接的就是数量,写LIMIT 10就是只返回前10个结果,有些人就会问了,如果LIMIT后面的数大于符合条件的结果数会不会越界?实际上完全不会,结果会全部显示出来。
对SELECT语句的封装比较复杂,但是我们可以发现,它有一个必选参数——表名。然后就是需要哪几列的数据,这个时候我们给一个默认参数,参数类型是一个元组,元组中的元素全是列名,参数默认值为空元组,我们可以通过修改它来对查询的列进行约束。我们可能还需要一个条件,这个条件默认值为空字符串,当需要给系统一个条件时,我们直接修改默认值。有可能还需要对结果进行排序,我们可以把这个参数定义成一个元组列表,一个元组中有两个元素,第一个元素是列名,第二个元素是bool值(True:升序,False:降序),这个参数默认为None(这里的默认参数绝对不可以是空列表,因为空列表是列表,是可变对象,一旦变化就再也修不回来了,除非重新运行程序)。最后,我们可能需要限制结果数量,这个时候我们还是定义一个默认参数,默认值为None,也就是没有限制,如果需要限制结果数我们直接修改这个默认参数即可。
关于读取数据库的SQL语句还有很多,在这里我就只给出最简单的读取数据库的SQL语句,因为我这个玩意就是给菜鸟用的。下次我讲一下写入数据库相关的SQL语句。
本文分享自 Python机器学习算法说书人 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!