MySQL Workbench MySQL数据库应用 河南中医药大学信息技术学院王昂 2019.02
河南中医药大学信息技术学院 王昂 2019.02
MySQL ●000 第三章 MySQL查询和视图 主讲内容:SQL查询、视图 MySQL数据库应用》http:/mysq!xg.hactcm.edu.cn 第2页
《MySQL数据库应用》 http://mysql.xg.hactcm.edu.cn/ 第 2 页 第三章 MySQL查询和视图 主讲内容:SQL查询、视图
●000 教学内容 MySQL 1. MySQL数据库的单表查询 2. MySQL数据库的连接查询 3. MySQL数据库的嵌套查询 4. MySQL数据库的集合查询 5.管理MySQ视图 MySQL数据库应用》http:/mysq!xg.hactcm.edu.cn 第3页
《MySQL数据库应用》 http://mysql.xg.hactcm.edu.cn/ 第 3 页 教学内容 1. MySQL数据库的单表查询 2. MySQL数据库的连接查询 3. MySQL数据库的嵌套查询 4. MySQL数据库的集合查询 5. 管理MySQL视图
0。3. MySQL数据库的嵌套查询 MySQL SQL允许 SELECT多层嵌套使用,即一个子查询中还可 以嵌套子查询,用来表示复杂的查询,从而增强SQL 的查询能力。 ·以这种层层嵌套的方式来构造查询语句正是SQL中 结构化”的含义所在。 MySQL数据库应用》http:/mysq!xg.hactcm.edu.cn 第4页
《MySQL数据库应用》 http://mysql.xg.hactcm.edu.cn/ 第 4 页 3. MySQL数据库的嵌套查询 • SQL允许SELECT多层嵌套使用,即一个子查询中还可 以嵌套子查询,用来表示复杂的查询,从而增强SQL 的查询能力。 • 以这种层层嵌套的方式来构造查询语句正是SQL中“ 结构化”的含义所在
MySQL ●000 在 where-子句或 having子句所表示的条件中,可以使用另一个查询的 结果(即一个查询块:一个 SELECT-FROM- WHERE语句称为一个查 询块)作为条件的一部分,这种将一个查询块嵌套在另一个查询块的 Where子句或 having子句的条件中的查询称为嵌套查询。 例如: SELECT sname FROM Student 上层模块:父查询,外层查询 WHERE Sno in (SELECT sno FROM SC 下层模块:子查询,内层查询 WHERE Cno= 2) MySQL数据库应用》http:/mysq!xg.hactcm.edu.cn 第5页
《MySQL数据库应用》 http://mysql.xg.hactcm.edu.cn/ 第 5 页 • 在where子句或having子句所表示的条件中,可以使用另一个查询的 结果(即一个查询块:一个SELECT- FROM- WHERE 语句称为一个查 询块)作为条件的一部分,这种将一个查询块嵌套在另一个查询块的 where子句或having子句的条件中的查询称为嵌套查询。 • 例如: SELECT sname FROM Student 上层模块:父查询,外层查询 WHERE Sno in ( SELECT sno FROM sc 下层模块:子查询,内层查询 WHERE cno= ‘2’ ); ﹜ ﹜
0。3. MySQL数据库的嵌套查询 MySQL Sq语言允许有多层嵌套查询。即一个子查询中还允许嵌 套其他子查询。需要特别指出的是子查询的 select语句 中不能使用 order by子句, order by子句只能对最终 查询结果排序 子查询通常与IN、比较运算符及 EXISTS谓词结合使用 MySQL数据库应用》http:/mysq!xg.hactcm.edu.cn 第6页
《MySQL数据库应用》 http://mysql.xg.hactcm.edu.cn/ 第 6 页 3. MySQL数据库的嵌套查询 • Sql语言允许有多层嵌套查询。即一个子查询中还允许嵌 套其他子查询。需要特别指出的是子查询的select 语句 中不能使用order by 子句,order by子句只能对最终 查询结果排序。 • 子查询通常与IN 、比较运算符及EXISTS谓词结合使用
0。3. MySQL数据库的嵌套查询 MySQL 子查询时,需要注意以下几点 子查询需要使用括号()括起来; 子查询要放在比较操作符的右边; 当子查询的返回值是一个集合而不是一个值时,不能 使用单行操作符,而必须根据需要使用ANY、IN、AL 或 EXISTS等操作符 MySQL数据库应用》http:/mysq!xg.hactcm.edu.cn 第7页
《MySQL数据库应用》 http://mysql.xg.hactcm.edu.cn/ 第 7 页 • 子查询时,需要注意以下几点: – 子查询需要使用括号 ( ) 括起来; – 子查询要放在比较操作符的右边; – 当子查询的返回值是一个集合而不是一个值时,不能 使用单行操作符,而必须根据需要使用ANY、IN、ALL 或EXISTS等操作符。 3. MySQL数据库的嵌套查询
·031带有ln谓词的子查询 MySQL 在嵌套查询中,子查询的结果往往是一个集合,所以谓 词N是嵌套查询中最常用的谓词。 IN子查询用于进行一个给定值是否在子查询结果集中的 判断。 语法格式为:表达式[not]in(子查询) MySQL数据库应用》http:/mysq!xg.hactcm.edu.cn 第8页
《MySQL数据库应用》 http://mysql.xg.hactcm.edu.cn/ 第 8 页 3.1带有In谓词的子查询 • 在嵌套查询中,子查询的结果往往是一个集合,所以谓 词IN是嵌套查询中最常用的谓词。 • IN子查询用于进行一个给定值是否在子查询结果集中的 判断。 • 语法格式为:表达式 [not] in (子查询)
·031带有ln谓词的子查询 MySQL 案例:查找在ⅹscj擞据库中选修了课程号为206的课程的 学生的姓名、学号。 SELECT姓名学号 FROM XS Where学号in ( select学号 from xs kc where课程号=206″ MySQL数据库应用》http:/mysq!xg.hactcm.edu.cn 第9页
《MySQL数据库应用》 http://mysql.xg.hactcm.edu.cn/ 第 9 页 3.1带有In谓词的子查询 • 案例:查找在xscj数据库中选修了课程号为206的课程的 学生的姓名、学号。 SELECT 姓名,学号 FROM xs where 学号 in ( select 学号 from xs_kc where 课程号= ‘206’ );
MySQL ●000 案例:查询与“刘晨”在一个系学习的学生 select b FROM Student a student b WHERE a sname=刘晨 and a Sdept= b Sdept and b Sname<>刘晨 SELECT FROM Student WHERE Sdept IN (SELECT Sde pt FROM Student WHERE Sname=刘晨) and Sname<>刘晨 步骤:先找出刘晨对应的院系,再通过院系找其余学生 MySQL数据库应用》http:/mysq!xg.hactcm.edu.cn 第10页
《MySQL数据库应用》 http://mysql.xg.hactcm.edu.cn/ 第 10 页 案例:查询与“刘晨”在一个系学习的学生。 SELECT b.* FROM Student a,student b WHERE a.Sname=‘刘晨’ and a.Sdept= b.Sdept and b.Sname<>‘刘晨' SELECT * FROM Student WHERE Sdept IN (SELECT Sdept FROM Student WHERE sname= ‘刘晨') and Sname<>‘刘晨' 步骤:先找出刘晨对应的院系,再通过院系找其余学生