连接查询可以分为:

1)内连接查询
2)左连接查询
3)右连接查询
4)自连接查询

1. 内连接查询

mysql 自关联 查出所有的子 mysql自关联查询语句_mysql


查询两个表中符合条件的共有记录

内连接查询语法格式:
select 字段 from 表1 inner join 表2 on 表1.字段1 = 表2.字段2

说明:

  • inner join 就是内连接查询关键字
  • on 就是连接查询条件

mysql 自关联 查出所有的子 mysql自关联查询语句_连接查询_02


例1:使用内连接查询学生表与班级表:

select * from students as s inner join classes as c on s.cls_id = c.id;

mysql 自关联 查出所有的子 mysql自关联查询语句_mysql 自关联 查出所有的子_03

连接查询-左连接

以左表为主根据条件查询右表数据,如果根据条件查询右表数据不存在使用null值填充

mysql 自关联 查出所有的子 mysql自关联查询语句_连接查询_04

mysql 自关联 查出所有的子 mysql自关联查询语句_mysql_05

连接查询-右连接

以右表为主根据条件查询左表数据,如果根据条件查询左表数据不存在使用null值填充

mysql 自关联 查出所有的子 mysql自关联查询语句_mysql 自关联 查出所有的子_06

mysql 自关联 查出所有的子 mysql自关联查询语句_条件查询_07

连接查询-自连接

左表和右表是同一个表,根据连接查询条件查询两个表中的数据。要给两张表分别取别名这样才能区分开

mysql 自关联 查出所有的子 mysql自关联查询语句_mysql 自关联 查出所有的子_08

mysql 自关联 查出所有的子 mysql自关联查询语句_mysql_09

例1:查询省的名称为“广东省”的所有城市

mysql 自关联 查出所有的子 mysql自关联查询语句_数据库_10

mysql 自关联 查出所有的子 mysql自关联查询语句_mysql 自关联 查出所有的子_11

  • 自连接查询就是把一张表模拟成左右两张表,然后进行连表查询。
  • 自连接就是一种特殊的连接方式,连接的表还是本身这张表

子查询

在一个 select 语句中,嵌入了另外一个 select 语句, 那么被嵌入的 select 语句称之为子查询语句,外部那个select语句则称为主查询.

主查询和子查询的关系:
1)子查询是嵌入到主查询中
2)子查询是辅助主查询的,要么充当条件,要么充当数据源
3)子查询是可以独立存在的语句,是一条完整的 select 语句

例1. 查询平均年龄的学生:

select avg(age) from students

mysql 自关联 查出所有的子 mysql自关联查询语句_数据库_12

查询大于平均年龄的学生:

select * from students where age > (select avg(age) from students);

mysql 自关联 查出所有的子 mysql自关联查询语句_连接查询_13

例2;查询所有学生的班级ID

select cls_id from students;

查询学生在班的所有班级名字

select name from classes where id in (select cls_id from students)

mysql 自关联 查出所有的子 mysql自关联查询语句_数据库_14

例2;查询年龄最大和身高最高

select max(age),max(height) from students;

mysql 自关联 查出所有的子 mysql自关联查询语句_数据库_15

查询年龄最大同时也要身高最高的学生信息

select * from students where (age, height) =  (select max(age), max(height) from students);