MySQL-笔记-06.数据高级查询

本文详细介绍了MySQL的高级查询技巧,包括连接查询(交叉连接、内连接、外连接及自连接)、嵌套查询(单值和多值嵌套查询)以及集合查询(并集、差集)。内容涵盖各种连接查询的语法示例和实际应用,帮助读者深入理解如何在不同场景下高效查询数据。
摘要由CSDN通过智能技术生成

目录

6.1 连接查询

6.1.1 交叉连接(cross join)

6.1.2 内连接(inner join)

6.1.3 外连接(outer join)

6.1.3.1 左外连接(left [outer] join)

6.1.3.2 右外连接(right [outer] join)

6.1.4 自连接(cross join)

6.2 嵌套查询

6.2.1 单值嵌套查询

6.2.2 多值嵌套查询

6.2.2.1 使用in运算符

6.2.2.2 使用比较运算符的子查询

6.2.2.3 使用any、all运算符

6.2.2.4 使用EXISTS连接的子查询

6.3 集合查询

6.3.1 union形成并集

6.3.2 except形成差集

小结:

6.1 连接查询

        数据库本着精简的设计原则,通常将数据存放于不同的表中,最大限度地减少数据冗余。在实际应用中,经常需要从多个数据表中查询满足一定条件的记录,这时就要用到连接查询。

连接查询分为交叉连接内连接外连接自连接

6.1.1 交叉连接(cross join)

        交叉连接返回被连接表中所有数据行的笛卡尔积

        查询结果集的总行数=被连接表行数的乘积总列数=被连接表列数的总和

        其基本语法格式如下:

SELECT * FROM 表名1 CROSS JOIN 表名2

        在from子句中也可以省略cross join,使用逗号分隔被连接的表,

        其基本语法格式如下:

SELECT * FROM 表名1 , 表名2

         交叉连接产生的结果集一般没有实际应用的意义,所以这种连接很少使用。

6.1.2 内连接(inner join)

        内连接是最常使用的连接查询方式,通过inner join或者join连接两个表,结果集中只包含满足连接条件的记录。连接条件通常采用“主键 = 外键”的形式。

        内连接创建连接关系有以下两种方式:

①在WHERE子句中创建连接关系,两个表名出现在FROM子句中,其基本语法格式如下:

SELECT 列名列表
FROM 表名1 , 表名2 WHERE 表名1.列名 = 表名2.列名

② 在FROM子句中创建连接关系,其基本语法格式如下:

SELECT 列名列表
FROM 表名1 [ INNER ] JOIN 表名2 ON 表名1.列名 = 表名2.列名

 【例3.102】查询所有选课学生的学号、所选课程的名称和成绩。

SELECT score.cno, cname, grade
FROM course, score
WHERE course.cno = score.cno;		/*在WHERE子句中给出等值连接查询条件*/

 【例3.103】查询男学生的选课情况。要求列出学号、姓名、性别、课程名、课程号和成绩。

-- 方法1
SELECT A.sno, A.sname, A. ssex, C.cname, C.cno, B.grade
FROM student A INNER JOIN score B ON A.sno = B. sno 	/*可省略INNER*/
     INNER JOIN course C ON B.cno = C.cno 
WHERE (A.ssex = '男') ; 


-- 方法2
SELECT A.sno, A.sname, A. ssex, C.cname, C.cno, B.grade
FROM student A, score B, course C
WHERE A.sno = B. sno AND B.cno = C.cno AND A.ssex = '男';

6.1.3 外连接(outer join)

        在内连接查询中,结果集只包括满足连接条件的数据行,但有时用户也希望在结果集中能显示那些不满足连接条件的数据,这就需要使用外连接查询

        外连接操作的类型可分为左外连接和右外连接。

        在创建外连接时,表在SQL语句中出现的顺序非常重要。

        出现在JOIN左边的表是“左表”,出现在JOIN右边的表是“右表”。

6.1.3.1 左外连接(left [outer] join)

        左外连接指定在结果集中除了包括由内连接返回的所有行之外,还包括左表中所有不满足连接条件的行,并将结果集中右表的输出列设置为NULL。

        因此,左外连接可以使得左表中的所有记录都显示在结果集中

        左外连接是对连接条件中左边表不加限制,其基本语法格式如下:

SELECT 列名列表 
FROM 表名1 LEFT [OUTER] JOIN 表名2 ON 表名1.列名 = 表名2.列名

 【例3.102】student表左外连接score表。

SELECT A.sno, A.sname, B.cno, B.grade 
FROM student A LEFT OUTER JOIN score B ON A.sno = B.sno;
6.1.3.2 右外连接(right [outer] join)

        右外连接指定结果集中除了包括由内连接返回的所有行之外,还包括右表中所有不满足连接条件的行,并将结果集中左表的输出列设置为NULL。

        因此,右外连接可以使得右表中的所有记录都显示在结果集中

        右外连接是

  • 20
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

利威尔·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值