内容正文:
7.2 MySQL数据查询与更新
---多表查询
数据库原理与应用技术--MySQL
同步精品课堂
河北科学技术出版社
教学目标
一
掌握连接查询的命令
教学目标
掌握连接查询的嵌套查询的应用
掌握嵌套查询中子查询的分类
掌握嵌套查询的命令
掌握国家标准《机械制图》中有关图幅、比例、字体图线等基本规定。
教学重难点
二
教学难点
1、连接查询
2、嵌套查询
教学重点
连接查询和嵌套查询的应用
教学难点
导入新课
三
讨论:
单表查询是从一张表中查询所需要的数据,若我们查询的数据需要从两张表中获取,我们应该如何操作?
任务一
1
连接查询
新知讲授
四
⊙连接查询
连接查询由SELECT语句中FROM子句的JOIN关键字来实现
➽ 连接查询概述
➽ 连接查询语法格式
基本语法形式如下:
SELECT 子句
FROM <表名1> [别名1] [INNER|LEFT|RIGHT|CROSS] JOIN<表名2>[ 别名2 ] ON <连接条件表达式>
[WHERE <条件表达式>];
新知讲授
四
⊙连接查询
说明:
1、FROM子句后面可以跟多个数据的表名,表名与别名之间用空格分隔开,若不定义,则表的表名默认为别名;
2、若在SELECT子句中的输出列或条件表达式中出现两个表的公共字段,需要在公共字段前加上表名或表的别名加以区分;
3、连接条件是指连接查询中连接两个表的条件,连接条件格式一般如下:
[<表名1>]<别名1.列名><比较运算符>[<表名2>]<别名2.列名>
4、JOIN是指各类连接操作的关键字,具体如下表
新知讲授
四
⊙连接查询
连接类型 连接关键字 说明
内连接 INNER JOIN 内连接,INNER省略
左外连接 LEFT JOIN 外连接
右外连接 RIGHT JOIN
交叉连接 CROSS JOIN 交叉连接
新知讲授
四
⊙连接查询
说明:
(1)INNER JOIN:只返回符合连接条件的记录,不满足条件的记录不会被显示;
(2)LEFT JOIN:除了满足连接条件的记录外,还包括左表中不满足条件的记录。当左表中不满足条件的记录与右表记录进行组合时,右表相应列的值为NULL。
(3)RIGHT JOIN:除了满足连接条件的记录外,还包括右表中不满足条件的记录。当右表中不满足条件的记录与左表记录进行组合时,左表相应列的值为NULL。
(4)CROSS JOIN:又称笛卡尔连接,是指两个表之间做笛卡尔积操作,得到的结果集的行数是两个表的行数的乘积。交叉连接一般没有意义。
新知讲授
四
⊙连接查询
➽ 内连接也可以采用以下命令格式
基本语法形式如下:
SELECT 子句
FROM <表名1> [别名1] ,<表名2>[ 别名2 ] [,.....]
[WHERE <连接条件表达式>[ AND <条件表达式>];
新知讲授
四
⊙连接查询
➽ 实例1:查询借阅了图书的读者姓名。
MySQL语句如下:
SELECT DISTINCT name FROM reader JOIN borrow ON reader.Rid=borrow.Readerid;
新知讲授
四
⊙连接查询
➽ 实例2:查询书号为”T023“的借阅信息,显示读者号、书号、书名、借书日期字段的内容。
MySQL语句如下:
SELECT readerid,borrow.bookid,bookname,bordate FROM borrow
INNER JOIN book ON borrow.bookid=book.bookid AND borrow.bookid='T023';
任务二
1
嵌套查询
新知讲授
四
⊙嵌套查询
➽ 嵌套查询概述
嵌套查询又称为子查询或内部查询,它也是一个SELECT语句,它可以嵌套在一个SELECT语句的WHERE子句中。包含子查询的语句可称为父查询、主查询或外部查询。一般情况下嵌套查询亦可以用多表查询的方式查询。嵌套查询可以把一个复杂的查询分解成一系列的逻辑步骤,通过使用单个查询命令来解决复杂的查询问题。
➽ 子查询的执行过程
子查询的执行过程可以描述为:首先执行子查询中的语句,并将返回的结果作为外层查询的过滤条件,然后再执行外层查询。在子查询中通常要使用比较运算符及IN、ANY和EXISTS等运算符。
新知讲授
四
⊙嵌套查询
➽ 子查询的分类
基本语法形式如下:
<列名><比较运算符><子查询>
(1)比较运算符子查询
说明:
当能确切知道子查询返回的是单值时,可用>、<、=、>=、<=、!=或<>等比较运算符。
新知讲授
四
⊙嵌套查询
(2)IN子查询
基本语法形式如下:
<列名> [NOT] IN (子查询)
说明:
通过IN(或NOT IN)引入的子查询结果是一个列值,而不是一个单一的值。
新知讲授
四
⊙嵌套查询
➽ 子查询的分类
基本语法形式如下:
[NOT] EXISTS (子查询)
(3)EXISTS子查询
EXISTS用于测试子查询的结果是否为空,若结果不为空则返回TRUE,否则返回FALSE。由于EXISTS子查询只返回逻辑值,因此由它引出的子查询中给出的列名列表没有实际意义,一般用星号(*)表示。
新知讲授
四
⊙嵌套查询
基本语法形式如下:
<列名><比较运算符>[ANY|ALL]<子查询>
(4)ANY或ALL子查询
说明:
子查询返回单一值时,可以用比较运算符的子查询,但返回多个值时,可以用ANY或ALL子查询。ANY表示父查询与子查询结果中的某个值进行比较运算;ALL表示父查询与子查询结果中的所有值进行比较运算。
新知讲授
四
⊙嵌套查询
➽ 实例1:查询reader表中李昊天的借阅情况。
MySQL语句如下:
SELECT * FROM borrow WHERE Readerid IN(SELECT Rid FROM reader WHERE name="李昊天");
新知讲授
四
⊙嵌套查询
➽ 实例2:查询borrow表中已借阅图书的读者信息。
MySQL语句如下:
SELECT * FROM reader WHERE Rid in (SELECT Readerid FROM borrow );
师生互动
五
1、总结连接查询的命令。
2、总结嵌套查询的命令。
3、总结在实际应用中如何区分连接查询和嵌套查询。
讨论
随堂练习
六
1、 在MySQL中,连接可以用JOIN关键字,下列不属于连接的类型是( )
A.内连接
B. 外连接
C.左外连接
D.右外连接
【答案】B
【解析】连接的类型包括:内连接,左外连接,右外连接,交叉连接四种类型。
随堂练习
六
2、下列查询类型中,不属于SQL查询类型的是( )
A.单表查询
B.嵌套查询
C.连接查询
D.视图查询
【答案】D
【解析】视图查询不属于查询类型。
随堂练习
六
3、 关于嵌套语句,下列说法错误的是( )
A.嵌套查询又称为子查询或内部查询
B.嵌套查询是指一个SELECT子句嵌套在一个WHERE语句中
C.嵌套查询可以将一个复杂的查询分解成一系列的逻辑步骤
D.嵌套查询和连接查询完全等价
【答案】D
【解析】嵌套查询和连接查询在某些特定的情况下可以相互转换
随堂练习
六
4、 在嵌套查询中,子查询是指( )
A.子集的查询语言
B.嵌入到另一个查询语句之中的查询语句
C.选取单表中字段子集的查询语句
D.选取多表中字段子集的查询语句
【答案】B
【解析】子查询是指嵌入到另一个查询语句之中的查询语句。
随堂练习
六
5、 在SQL语句中,关键字___________用于实现表与表之间的连接操作。
【答案】JOIN
6、 在SQL语句的嵌套查询中,________用于表示父查询与子查询结果中的所有值进行比较。
【答案】ALL
课堂小结
七
谢谢
$$