013-MySQL_03-多表查询

使用多表查询的前提 : 多个表中有内容相同的字段(字段名可以不同)
使用多表查询的前提 : 多个表中有内容相同的字段(字段名可以不同)

关联查询(连接查询) :

内连接查询 :  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 = "江苏省"'

 

posted on 2018-05-04 22:20  TrancezZ  阅读(110)  评论(0)    收藏  举报

导航