使用多表查询的前提 : 多个表中有内容相同的字段(字段名可以不同)
使用多表查询的前提 : 多个表中有内容相同的字段(字段名可以不同)
关联查询(连接查询) :
内连接查询 : select * from students inner join classes on students.cls_id = classes.id;
可以内连接 + 子查询
查询两个表的交集(相同内容)
左连接查询 : select * from students left join classes on students.cls_id = classes.id;
可以左连接 + 子查询
查询结果包括 :
① : 两个表的交集。
② : 在 ① 基础上,把 join 左边(students)表中特有内容全部显示出来。
③ : 在 ② 基础上, 对于左表中有,右表中没有的内容用 Null 显示。(既然是多表查询,查询结果肯定要比单表查询多出来若干个字段,如果多出来的字段的内容和 on 比较的内容不同,就显示为 Null)
示例语句 :
use python_test_1;
select * from students left join classes on students.cls_id = classes.id;
右连接查询 : select * from students right join classes on students.cls_id = classes.id;
可以右连接 + 子查询
查询结果与左查询规则一致
① 不管 join 左右两边的表有没有相同内容,都把 join 右边(classes)表中特有内容全部显示出。
② 对于右表中有,左表中没有的内容用 Null 显示。
子查询(单表) :
定义 : 在之前查询结果的基础上再查询
示例 : 要求查询出高于平均身高的信息(height)
select * from students where height > (select avg(height) from students)
in 的用法 :
select students.name from students where students.cls_id in (select id from classes);
自关联(单表) :
自己 inner join 自己,对表的设计要求较高。
示例 : 使用自关联查询江苏省下所有的市
select city.* from areas as city inner join areas as province on city.pid = province.aid where
province.atitle = "江苏省"'