![Python操作Mysql数据库进阶篇——查询操作详解(一) Python操作Mysql数据库进阶篇——查询操作详解(一)](https://image.shishitao.com:8440/aHR0cHM6Ly9ia3FzaW1nLmlrYWZhbi5jb20vdXBsb2FkL2NoYXRncHQtcy5wbmc%2FIQ%3D%3D.png?!?w=700&webp=1)
前面我们已经介绍了在Python3.x中如何连接一个Mysql数据库,以及怎么样对这个数据库创建一个表,增删改查表里的数据。想必大家对Mysql数据库和简单的sql语句有了一定的了解,其实sql语句博大精深,里面的知识点非常的多,估计介绍一个星期也难以介绍全面。今天我们就来通过Mysql这种普遍使用的关系型数据库来深入了解一下sql语句中比较高级的查询部分。
![Python操作Mysql数据库进阶篇——查询操作详解(一) Python操作Mysql数据库进阶篇——查询操作详解(一)](https://image.shishitao.com:8440/aHR0cHM6Ly9zczIuYmFpZHUuY29tLzZPTllzamlwMFFJWjh0eWhucS9pdC91PTE2NDc0MTcwODMsNTU2MTQ2MzY2JmZtPTE3MyZhcHA9MjUmZj1KUEVHP3c9NTAwJmg9Mjc3JnM9NDFCMTBDNzI4NTcwNTk4MDAwRTk3NUMxMDIwMDkwQjA%3D.jpg?w=700&webp=1)
准备工作
首先我们在Mysql里建立三张表,分别是:“学生表”,“学科表”和“学生成绩表”,建表语句如下图所示:
![Python操作Mysql数据库进阶篇——查询操作详解(一) Python操作Mysql数据库进阶篇——查询操作详解(一)](https://image.shishitao.com:8440/aHR0cHM6Ly9zczEuYmFpZHUuY29tLzZPTlhzamlwMFFJWjh0eWhucS9pdC91PTQwNzI1MjQ2NDMsNzA4NDEwNDU1JmZtPTE3MyZhcHA9MjUmZj1KUEVHP3c9NjE0Jmg9MTg1JnM9NEE1MkNEMUE4QkY0NEMwMzA2N0QzNURFMDIwMEQwQjI%3D.jpg?w=700&webp=1)
![Python操作Mysql数据库进阶篇——查询操作详解(一) Python操作Mysql数据库进阶篇——查询操作详解(一)](https://image.shishitao.com:8440/aHR0cHM6Ly9zczEuYmFpZHUuY29tLzZPTlhzamlwMFFJWjh0eWhucS9pdC91PTIzODcyNzk2ODAsMzkyNTkxMzI1OSZmbT0xNzMmYXBwPTI1JmY9SlBFRz93PTQ5OCZoPTEzOSZzPUM2NTBDRDM4OEZGNDRDMDM0QTYxMjBEOTAzMDBDMEIy.jpg?w=700&webp=1)
![Python操作Mysql数据库进阶篇——查询操作详解(一) Python操作Mysql数据库进阶篇——查询操作详解(一)](https://image.shishitao.com:8440/aHR0cHM6Ly9zczEuYmFpZHUuY29tLzZPTlhzamlwMFFJWjh0eWhucS9pdC91PTE4MjcwMTg4NTYsMzM4NTU4OTY2MCZmbT0xNzMmYXBwPTI1JmY9SlBFRz93PTQ4MyZoPTE3MCZzPUVGNTJDRDFBODdDODQ5NDE0Q0QxQjFERTAzMDA5MEIx.jpg?w=700&webp=1)
学生的成绩表通过id与学生表和学科表所关联,现在我们往里插入数据,插入数据的方法很简单,这里就不多说了,插入好数据的表如下图所示:
![Python操作Mysql数据库进阶篇——查询操作详解(一) Python操作Mysql数据库进阶篇——查询操作详解(一)](https://image.shishitao.com:8440/aHR0cHM6Ly9zczEuYmFpZHUuY29tLzZPTlhzamlwMFFJWjh0eWhucS9pdC91PTUzODk1MjI2OSw0MDU1ODkyMDAyJmZtPTE3MyZhcHA9MjUmZj1KUEVHP3c9NjQwJmg9MjQ3JnM9ODAxM0M1MzI5N0MwNUQ1QjVDNDVBMURBMDAwMEQwQjE%3D.jpg?w=700&webp=1)
好了,一切准备就绪了,现在开始数据的查询了。
查询筛选条件
首先,基本的sql查询语句是:“select * from 表 where 条件;”通过这条sql语句可以查询到某张表里的所有字段信息,那么,筛选的运算符有以下几种:
比较运算符:等于(=)不等于(<> 或者 !=)大于(>)大于等于(>=)小于(<)小于等于(<=)IS NULLIS NOT NULL逻辑运算符与(AND)或(OR)非(NOT)
举个例子,假如我们想查学生表中年龄不大于17岁的所有女同学,那么sql语句应该是这样写的:
![Python操作Mysql数据库进阶篇——查询操作详解(一) Python操作Mysql数据库进阶篇——查询操作详解(一)](https://image.shishitao.com:8440/aHR0cHM6Ly9zczEuYmFpZHUuY29tLzZPTlhzamlwMFFJWjh0eWhucS9pdC91PTIxNjIxMDUxOTEsMjg0NjA3NzM1NyZmbT0xNzMmYXBwPTI1JmY9SlBFRz93PTY0MCZoPTM1NCZzPTgwNzFDRDM0MURDQTQ1NDk1QzU4QTREQTAwMDA4MEIx.jpg?w=700&webp=1)
通过“where”后面“and”将“<=”和“=”两个比较运算符连接在一起,进行组合查询,从而得到所需要的值;
模糊查询
sql语句中提供了一种模糊查询的语句,使用通配符“%”或者“_”可以实现模糊查询,“%”是匹配多个字符,“_”是匹配一个字符,它的写法是这样的:
假如,我们想要查询所有四班的学生信息:
![Python操作Mysql数据库进阶篇——查询操作详解(一) Python操作Mysql数据库进阶篇——查询操作详解(一)](https://image.shishitao.com:8440/aHR0cHM6Ly9zczEuYmFpZHUuY29tLzZPTlhzamlwMFFJWjh0eWhucS9pdC91PTY0MDQyNDM1MywxNTYwODgwOTg4JmZtPTE3MyZhcHA9MjUmZj1KUEVHP3c9NjM4Jmg9MTEzJnM9OEE3M0M1MTRDRDY2NkYyMDFDNTAwOERDMDIwMDgwQjM%3D.jpg?w=700&webp=1)
通过“like”和“%”组合,查询到了正确的结果。其中“%”可以只在关键词前面出现,也可以在关键词后面出现,也可以在前面和后面同时出现。分别表示前匹配、后匹配、前后匹配。
排序
排序分为升序排列和降序排列两种,其中,升序用关键词“asc”,降序用“desc”;
例如,我们想将二班的所有同学按照年龄从小到大排列,写法是这样的:
![Python操作Mysql数据库进阶篇——查询操作详解(一) Python操作Mysql数据库进阶篇——查询操作详解(一)](https://image.shishitao.com:8440/aHR0cHM6Ly9zczEuYmFpZHUuY29tLzZPTlhzamlwMFFJWjh0eWhucS9pdC91PTI5MjcyMjY3NjYsMTcyMzQwODI2NSZmbT0xNzMmYXBwPTI1JmY9SlBFRz93PTYzOCZoPTE0OCZzPThBNDFDNTE0QzU3NDVDMjE0NkZDMzFERTAzMDA5MEIw.jpg?w=700&webp=1)
在sql语句里,“order by”表示将某个字段进行排序处理,再加上关键词“asc”或者“desc”就能实现升序和降序的普通排序方法了。
“order by”还可以实现多个字段一起排序,按照字段的先后顺序进行优先级排序,语法是:“select * from 表 order by 字段1 desc(asc) 字段2 desc(asc).......”,这样就实现多个字段一起排序了;
统计与计算
在sql语句里,可以将结果进行统计,关键词有以下几种:
COUNT:统计查询的总数;MAX:统计出最大值;MIN:统计出最小值;SUM:求和;
AVG:求平均值;
![Python操作Mysql数据库进阶篇——查询操作详解(一) Python操作Mysql数据库进阶篇——查询操作详解(一)](https://image.shishitao.com:8440/aHR0cHM6Ly9zczEuYmFpZHUuY29tLzZPTlhzamlwMFFJWjh0eWhucS9pdC91PTY0ODYzNzA5MywxMjA5MDQwMTU3JmZtPTE3MyZhcHA9MjUmZj1KUEVHP3c9NDg1Jmg9MzM1JnM9ODA3MUNEMzQ1OUVFQzRDQTU0Rjg1OUREMDMwMDkwQjA%3D.jpg?w=700&webp=1)
它们的写法如上图所示;
分组
在sql语句里,通常使用“group by”来进行分组,“group by”的意思就是将某个字段进行分组,然后再对分组里的内容进行操作,举例如下:
![Python操作Mysql数据库进阶篇——查询操作详解(一) Python操作Mysql数据库进阶篇——查询操作详解(一)](https://image.shishitao.com:8440/aHR0cHM6Ly9zczAuYmFpZHUuY29tLzZPTldzamlwMFFJWjh0eWhucS9pdC91PTQyNzYxNzU0MTgsOTA1ODg1Mzg0JmZtPTE3MyZhcHA9MjUmZj1KUEVHP3c9NjM5Jmg9MTg1JnM9OEE2M0M1MTQ5NDM4REMyMTRBNzExOEQ5MDIwMDUwQjI%3D.jpg?w=700&webp=1)
上面的例子中,可以很明显的看出,加了“group by”和不加“group by”,它们的打印结果是完全不一样的。如果我们需要知道每一个学生的成绩总和,那么很明显,下面的结果才是我们所需要的。它将每一个学生的ID进行分组,从而统计出每一个学生的成绩之和。
查询数据分页
在sql中,分页功能使用“limit”来实现,它的格式是:“limit m,n”其中“m”代表查询数据的初始行数,“n”代表偏移量。举例子:
![Python操作Mysql数据库进阶篇——查询操作详解(一) Python操作Mysql数据库进阶篇——查询操作详解(一)](https://image.shishitao.com:8440/aHR0cHM6Ly9zczAuYmFpZHUuY29tLzZPTldzamlwMFFJWjh0eWhucS9pdC91PTQ2OTIxNTQ1MywzNjAzNTAwNDEmZm09MTczJmFwcD0yNSZmPUpQRUc%2Fdz02MzkmaD0yNzkmcz04ODczQzUxNDlGQzg0OTQzMDY1OEE0REUwMjAwRDBCMw%3D%3D.jpg?w=700&webp=1)
小结
sql语句操作相对比较灵活,组合性也很强,今天我们介绍了sql语句中的查询操作,针对单张表进行操作的一些基本操作功能,接下来我们还会进行多表组合查询等更加复杂的操作,希望大家持续关注我