SQL查询--连接查询

      使用的数据库:https://blog.csdn.net/weixin_44953902/article/details/100169739
      当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回。
      mysql支持三种类型的连接查询,分别为:
SQL查询--连接查询_第1张图片

内连接(inner join … in)

  -- select ... from 表A inner join 表B;
  select * from students inner join classes;

SQL查询--连接查询_第2张图片

-- 查询 有能够对应班级的学生以及班级信息
  select * from students inner join classes on students.cls_id=classes.id;

SQL查询--连接查询_第3张图片

-- 按照要求显示姓名、班级
  select students.name,classes.name from students inner join classes on students.cls_id=classes.id;

SQL查询--连接查询_第4张图片

--给数据表起名字
  select s.name,c.name from students as s inner join classes as c on s.cls_id=c.id;

SQL查询--连接查询_第5张图片

-- 在以上的查询中,将班级名单显示在第1列
  select c.name,s.* from students as s inner join classes as c on s.cls_id=c.id;

SQL查询--连接查询_第6张图片

-- 查询 有能够对应班级的学生以及班级信息,按照班级进行排序
  select c.name,s.* from students as s inner join classes as c on s.cls_id=c.id order by c.name;

SQL查询--连接查询_第7张图片

-- 班级相同时,按照学生的id及逆行排序
  select c.name,s.* from students as s inner join classes as c on s.cls_id=c.id order by c.name,s.id;

SQL查询--连接查询_第8张图片

左连接(left join)

-- 查询每位学生对应的班级信息
  select * from students as s left join classes as c on s.cls_id=c.id;

SQL查询--连接查询_第9张图片

-- 查询没有对应班级信息的学生
  -- select ... from xxx as s left join xxx as c on ... where ...;
  -- select ... from xxx as s left join xxx as c on ... having ...;
  select * from students as s left join classes as c on s.cls_id=c.id having c.name is null;
  select * from students as s left join classes as c on s.cls_id=c.id where c.name is null;

SQL查询--连接查询_第10张图片

right join … on

一般用的很少:将数据表名字互换位置,用left join 完成

你可能感兴趣的:(数据库)