【MySQL数据库】SQL 查询封神之路:步步拆解核心操作,手把手帮你解锁高阶4

四. 复合查询

在上面我们介绍了查询中一些基本的使用方法,下面将介绍一些更为复杂的筛选场景。
此处依旧是使用上面的三张表来进行演示。

3.1 子查询

  • 子查询:一条查询内部可以包含其他查询语句。

两种方法:

  1. 方法一:对员工工资进行降序,输出第一行的数据:

【MySQL数据库】SQL 查询封神之路:步步拆解核心操作,手把手帮你解锁高阶4

这种方法有一个问题就是:如果有多个相同的最高工资我们无法进行全部输出,此时更应该使用方法二;

方法二:使用子查询,先找出最高工资,在拿到表中进行比对,看谁的工资是最高工资:

【MySQL数据库】SQL 查询封神之路:步步拆解核心操作,手把手帮你解锁高阶4

3.2 多表查询

emp表中只有不能号,而部门名称在dept表中,因此要进行多表查询。

  • 关于多表查询就需要使用笛卡尔积来实现。

笛卡尔积组合:就是将两个表中的数据进行穷举组合。
比如下面将员工表与部门表进行笛卡尔积:

【MySQL数据库】SQL 查询封神之路:步步拆解核心操作,手把手帮你解锁高阶4

此时就会现成一张很大的表,该表通过枚举的方式进行组合,即枚举emp表中的每一行,与dept表中的每一行进行组合。

  • 在进行多表查询的时候要进行数据的筛选,每一个成员并不需要与所有部门进行组合,只需要与相关部门进行组合即可,依次要进行where子查询进行筛选。

【MySQL数据库】SQL 查询封神之路:步步拆解核心操作,手把手帮你解锁高阶4

注意:在进行使用成员的时候,要指明使用哪一个表的成员,对于重复的列一定要进行指明,对于不重复的列可以不进行指明。

3.3 自连接

可以,但是不能直接进行,因为如果直接进行两个表是一样的,在指定列名称的时候就不知道指定那一张表中的了,所以在进行笛卡尔积的时候要对两张表取别名

比如下面这个问题:

此时就可以通过自连接的方式来进行实现:

【MySQL数据库】SQL 查询封神之路:步步拆解核心操作,手把手帮你解锁高阶4

阅读剩余
THE END