第7章数据查询电子课件 MySQL数据库管理与应用.pptx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《第7章数据查询电子课件 MySQL数据库管理与应用.pptx》由会员分享,可在线阅读,更多相关《第7章数据查询电子课件 MySQL数据库管理与应用.pptx(73页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第7章数据查询电子课件 MySQL数据库管理与应用第7章 数据查询主要内容7.1 SELECT语句7.2 单表查询7.3 连接查询7.4 子查询7.5 查询的集合操作7.6 本章小结7.1 SELECT语句数据查询是指从数据库中获取所需的数据,是数据库中最常用也是最重要的操作。关系数据库管理系统使用SELECT语句从一个或多个表中查询数据。语法格式:SELECT ALL|DISTINCT select_expr,select_expr.FROM tbl_name,tbl_name,WHERE where_condition GROUP BY col_name|expr|position,.WI
2、TH ROLLUP HAVING having_condition ORDER BY col_name|expr|position ASC|DESC,.LIMIT offset,row_count|row_count OFFSET offset7.1 SELECT语句说明:SELECT子句:指定查询语句返回的列或表达式;FROM子句:指定查询数据的来源,可以是表、视图、查询结果;WHERE子句:限定选择行必须满足的一个或多个条件。where_condition是一个表达式,对于要选择的每一行,该表达式的计算结果为true。如果没有WHERE子句,将选择所有行;GROUP BY子句:指定用于分组
3、的列或表达式;HAVING子句:指定返回的分组结果必须满足的条件;ORDER BY子句:指定查询结果的排序方式;LIMIT子句:限定查询结果包含的行数。7.2 单表查询7.2.1 挑选列SELECT子句指示从表中检索哪些列,关键字SELECT后可以是*、字段列表、计算表达式。1查询表中指定列l在SELECT子句中指定要查看的一个或多个列的名称,如果查看多个列,列名之间用逗号分隔。l查询结果中列的显示顺序由SELECT子句指定,与表中的存储顺序无关。7.2 单表查询7.2.1 挑选列1查询表中指定列【例7.1】查询所有学生的学号、姓名和性别。在MySQL命令行客户端输入命令:USE jwglSE
4、LECT sno,sname,ssex FROM student;7.2 单表查询7.2.1 挑选列2查询表中所有的列lSELECT子句中使用*可以获取表中所有列的值,而不需要指明各列的名称,通常在用户不清楚表中各列名称时使用。l查询结果中各列按照创建表时列的顺序显示。【例7.2】查询所有学生的基本信息。在MySQL命令行客户端输入命令:SELECT*FROM student;7.2 单表查询7.2.1 挑选列3使用计算表达式l实际应用中用户所需要的结果需要对表中的列进行计算才能获得,这时可以在SELECT子句中使用各种运算符、函数对表中的列进行计算获取所需结果。【例7.4】查询所有学生的学号
5、、姓名和年龄。在MySQL命令行客户端输入命令:SELECT sno,sname,YEAR(SYSDATE()-YEAR(sbirthday)FROM student;7.2 单表查询7.2.1 挑选列4改变列标题l查询结果中显示的各列的标题就是创建时定义的列名或者SELECT子句中使用的计算表达式。l在SELECT子句中,可以给列或计算表达式指定别名作为查询结果中的显示标题。【例7.4】查询所有学生的学号、姓名和年龄,改变列标题。在MySQL命令行客户端输入命令:SELECT sno AS 学号,sname AS 姓名,YEAR(SYSDATE()-YEAR(sbirthday)AS 年龄F
6、ROM student;7.2 单表查询7.2.1 挑选列4改变列标题l注意:AS可以省略,但是建议在指定列别名时养成显式使用AS的习惯;不允许在WHERE子句中使用列别名,因为在执行WHERE子句时可能尚未确定列的值;别名可以在GROUP BY、ORDER BY或HAVING子句中使用。7.2 单表查询7.2.1 挑选列5消除重复行l查询数据有时会获得重复的数据,尤其是在挑选表中的部分列的时候。l可以在SELECT子句中使用DISTINCT从查询结果中删除重复的行,使查询结果更加简洁。【例7.5】查询所有学生所属的专业。在MySQL命令行客户端输入命令:SELECT DISTINCT mno
7、 FROM student;7.2 单表查询7.2.2 选择行WHERE子句用于过滤表中的数据,对FROM子句中指定的表中的行进行判断,只有满足WHERE子句中的筛选条件的行才会返回,不满足条件的行不会出现在查询结果中。l语法格式为:WHERE where_condition l其中,where_condition指定从表中选择行的筛选条件,是由比较运算符、范围比较运算符、IN运算符、字符串模式匹配运算符、空值判断运算符以及逻辑运算符构成的表达式,表达式的运算结果为逻辑值真或假。7.2 单表查询7.2.2 选择行1.比较运算符l比较运算符用于比较两个表达式的值,WHERE子句中常用的比较运算符
8、有=(等于)、(不等于)、!=(不等于)、(小于)、!(不小于)、(大于)、!(不大于)和=(大于等于)。【例7.6】查询所有男生的基本信息。在MySQL命令行客户端输入命令:SELECT*FROM student WHERE ssex=男;【例7.7】查询2001-1-1之后出生的学生。在MySQL命令行客户端输入命令:SELECT*FROM student WHERE sbirthday2003-1-1;7.2 单表查询7.2.2 选择行2.范围比较运算符l范围比较运算符BETWEENAND用于判断字段或表达式的值是否在BETWEEN和AND设定的范围内,该范围是一个连续的闭区间。如果表达
9、式的值在指定的范围内则返回该行,否则不返回。语法格式为:col_name|expr NOT BETWEEN value1 AND value2【例7.8】查询年龄在18到20之间的学生的学号、姓名、性别和年龄。在MySQL命令行客户端输入命令:SELECT sno,sname,ssex,YEAR(SYSDATE()-YEAR(sbirthday)FROM student WHERE YEAR(SYSDATE()-YEAR(sbirthday)BETWEEN 18 AND 20;7.2 单表查询7.2.2 选择行3.IN运算符lIN运算符用于判断字段或表达式的值是否在指定的集合中,该集合是由逗号
10、分隔的一些离散值构成,不是连续的范围。如果表达式的值在指定的集合中则返回该行,否则不返回。语法格式为:col_name|expr NOT IN(value1,value2,)【例7.9】查询年龄为18或20的学生的学号、姓名、性别、年龄在MySQL命令行客户端输入命令:SELECT sno,sname,ssex,YEAR(SYSDATE()-YEAR(sbirthday)FROM student WHERE YEAR(SYSDATE()-YEAR(sbirthday)IN(18,20);7.2 单表查询7.2.2 选择行4.空值判断运算符lNULL表示“缺少的未知值”,它的处理方式与其他值有所
11、不同,不能使用诸如=、!=之类的比较运算符来测试空值,因为使用NULL进行任何比较的结果也是NULL。判断字段或表达式的值是否为空值使用IS NULL或IS NOT NULL,语法格式:col_name|expr IS NOT NULL【例7.10】查询未确定专业的学生。在MySQL命令行客户端输入命令:SELECT*FROM student WHERE mno IS NULL;7.2 单表查询7.2.2 选择行5.模式匹配运算符lLIKEu语法格式为:col_name|expr NOT LIKE pat_string ESCAPE escape_charu其中,pat_string是一个字符
12、串,可以包含普通字符和通配符。escape_char表示自己定义的转义字符。lMySQL中常用的通配符有:u%:匹配零个或多个任意字符构成的字符串;u_(下划线):匹配任意的单个字符。7.2 单表查询7.2.2 选择行5.模式匹配运算符【例7.11】查询学号以2021开头的学生。在MySQL命令行客户端输入命令:SELECT*FROM student WHERE sno LIKE 2021%;【例7.12】查询姓名的第二个字为明的学生。在MySQL命令行客户端输入命令:SELECT*FROM student WHERE sname LIKE _明%;7.2 单表查询7.2.2 选择行5.模式匹
13、配运算符【例7.13】查询姓名以_结尾的学生。在MySQL命令行客户端输入命令:SELECT*FROM student WHERE sname LIKE%_;或者:SELECT*FROM student WHERE sname LIKE%$_ ESCAPE$;说明:这里的$也可以是其它字符7.2 单表查询7.2.2 选择行5.模式匹配运算符lREGEXP或RLIKEuMySQL中可以使用 REGEXP 或RLIKE关键字指定正则表达式的字符匹配模式,实现复杂搜索的模式匹配。u语法格式为:col_name|expr NOT REGEXP|RLIKE pat_stringupat_string是一
14、个正则表达式,可以包含普通字符和特殊字符。7.2 单表查询7.2.2 选择行5.模式匹配运算符字符说明示例匹配值示例匹配文本的开始字符a 匹配以字母 a 开头 的字符串apple、ant、answer$匹配文本的结束字符gh$匹配以 gh 结尾的字 符串laugh、cough、heigh.匹配任何单个字符s.t 匹配任何 s 和 t 之间有一个字符sit、sat、set*匹配零个或多个在它前面的字符a*t 匹配字符 t 前面有任意个字符aat、aat、t+匹配前面的字符 1 次或多次fe+匹配以f开头,后面至少跟一个 efe、fee、feee匹配包含指定字符的文本ousoul、thought、
15、about字符集合匹配字符集合中的任何一个字符ab匹配 a 或者bfat、bit、bet、abs匹配不在括号中的任何字符abc 匹配任何不包含 a、b 或 c 的字符串duck、egg、fly字符串n,匹配前面的字符串至少 n 次a2 匹配 2 个或更多的aaa、aaaa、aaaaaaa字符串n,m匹配前面的字符串至少 n 次,至多m次a2,4 匹配最少2个,最多4个aaa、aaa、aaaa正则表达式的常用特殊字符7.2 单表查询7.2.2 选择行5.模式匹配运算符【例7.14】查询姓张或姓李的学生。在MySQL命令行客户端输入命令:SELECT*FROM student WHERE snam
16、e REGEXP 张李;【例7.15】查询姓名的第二个字为明的学生。在MySQL命令行客户端输入命令:SELECT*FROM student WHERE sname REGEXP.明;7.2 单表查询7.2.2 选择行6.逻辑运算符lWHERE子句中可以使用逻辑运算符将多个查询条件组合起来实现复杂的筛选条件。l常用的逻辑运算符有AND(与)、OR(或)和NOT(非),其中NOT的优先级最高,AND次之,OR的优先级最低。7.2 单表查询7.2.2 选择行6.逻辑运算符【例7.16】查询0101专业的男生的信息。在MySQL命令行客户端输入命令:SELECT*FROM student WHERE
17、 ssex=男 AND mno=0101;【例7.17】查询0101专业或0102专业的学生信息。在MySQL命令行客户端输入命令:SELECT*FROM student WHERE mno=0101 OR mno=0102;7.2 单表查询7.2.3 分组与统计1.聚合函数l聚合函数用于对一组数据进行计数或统计,获得一个计算结果。函数名语法格式功能描述COUNTCOUNT(*)返回SELECT语句检索到的行的个数COUNT(DISTINCT col_name|expression)返回SELECT语句检索到的行中指定列或表 达 式 的 非 空 值 的 个 数,如 果 使 用DISTINCT则
18、只对不重复的值计数SUMSUM(DISTINCT col_name|expression)返回SELECT语句检索到的行中指定列或表达式的值的和,忽略空值,如果使用DISTINCT则只对不重复的值求和AVGAVG(DISTINCT col_name|expression)返回SELECT语句检索到的行中指定列或表达式的值的平均值,忽略空值,如果使用DISTINCT则去除重复值后再求平均值MAXMAX(col_name|expression)返回SELECT语句检索到的行中指定列或表达式的最大值,忽略空值MINMIN(col_name|expression)返回SELECT语句检索到的行中指定列
19、或表达式的最小值,忽略空值常用聚合函数7.2 单表查询7.2.3 分组与统计1.聚合函数【例7.18】查询0101专业的学生个数。在MySQL命令行客户端输入命令:SELECT COUNT(*)FROM student WHERE mno=0101;7.2 单表查询7.2.3 分组与统计1.聚合函数【例7.19】查询student表中的学生的民族个数。在MySQL命令行客户端输入命令:SELECT COUNT(DISTINCT snation)FROM student;【例7.20】查询score表中学号为20190101001的学生所选课程的总分、平均分、最高分和最低分。在MySQL命令行客
20、户端输入命令:SELECT SUM(grade)AS 总分,AVG(grade)AS 平均分,MAX(grade)AS 最高分,MIN(grade)AS 最低分FROM scoreWHERE sno=20190101001;7.2 单表查询7.2.3 分组与统计2.GROUP BY子句l实际应用中有时需要将表中的数据或满足条件的数据按照某些字段的值进行分组,然后对每组中的数据分别进行统计,得到多个组的汇总结果。l可以利用GROUP BY子句创建分组数据,语法格式为:GROUP BY col_name|expr|position,.WITH ROLLUPlGROUP BY后的列或表达式称为分组列
21、或分组表达式,可以是一个也可以是多个。使用GROUP BY子句时,将分组列或分组表达式取值相同的行作为一组,对每组数据执行聚合函数,每组产生一行统计结果。7.2 单表查询7.2.3 分组与统计2.GROUP BY子句【例7.21】查询各专业的学生人数。在MySQL命令行客户端输入命令:SELECT mno,COUNT(*)AS 人数FROM studentGROUP BY mno;7.2 单表查询7.2.3 分组与统计2.GROUP BY子句【例7.22】查询各专业的男生和女生人数。在MySQL命令行客户端输入命令:SELECT mno,ssex,COUNT(*)AS 人数FROM stude
22、ntGROUP BY mno,ssex;7.2 单表查询7.2.3 分组与统计2.GROUP BY子句lGROUP BY子句中可以出现多个分组列或表达式,用逗号分隔,在所有分组列或表达式上取值相同的数据被认为是一组;l如果查询语句中使用了WHERE子句,先在表中筛选出满足WHERE子句中条件的记录,然后再将这些记录按照GROUP BY子句进行分组;lSQL-92及更早版本不允许SELECT列表、HAVING条件或ORDER BY列表出现不属于GROUP BY分组列或分组表达式的内容。7.2 单表查询7.2.3 分组与统计2.GROUP BY子句lSQL:1999及更高版本允许根据字段之间的函数
23、依赖关系决定此类查询是否合法,如果SELECT子句中的非分组列或表达式在功能上依赖于GROUP BY子句中的分组列,则查询是合法的。l例如下面的查询语句是合法的,因为mno列为主键,mname列依赖于mno列:SELECT major.mno,mname,COUNT(*)AS 人数FROM student,majorWHERE student.mno=major.mnoGROUP BY mno;7.2 单表查询7.2.3 分组与统计2.GROUP BY子句lMySQL中如果关闭了ONLY_FULL_GROUP_BY模式(MySQL 8.0的默认设置),则MySQL不执行SQL标准;MySQL中
24、如果开启ONLY_FULL_GROUP_BY模式,则MySQL执行SQL:1999标准。7.2 单表查询7.2.3 分组与统计2.GROUP BY子句lGROUPBY子句允许WITH ROLLUP关键字,该对分组统计结果进行更高级别的汇总从而产生额外的汇总结果。【例7.23】查询各专业的男生和女生人数,使用WITH ROLLUP关键字。在MySQL命令行客户端输入命令:SELECT mno,ssex,COUNT(*)AS 人数FROM studentGROUP BY mno,ssex WITH ROLLUP;7.2 单表查询7.2.3 分组与统计3.HAVING子句l利用GROUP BY子句和
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第7章数据查询电子课件 MySQL数据库管理与应用 数据 查询 电子 课件 MySQL 数据库 管理 应用
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内