当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回
mysql支持三种类型的连接查询,分别为:
- 内连接查询:查询的结果为两个表匹配到的数据
- 右连接查询:查询的结果为两个表匹配到的数据,右表特有的数据,对于左表中不存在的数据使用null填充
- 左连接查询:查询的结果为两个表匹配到的数据,左表特有的数据,对于右表中不存在的数据使用null填充
语法
select * from 表1 inner或left或right join 表2 on 表1.列 = 表2.列
示例:
-- 连接查询
-- inner join ... on
-- 交集
-- select ... from 表A inner join 表B
select * from student inner join classes;
-- 查询 学生信息及对应班级信息
select * from student inner join classes on student.cls_id = classes.id;
-- 查询 学生信息及对应班级名字 不显示班级id
select student.*,classes.name as class_name from student inner join classes on student.cls_id = classes.id;
-- 查询 学生姓名 对应 班级名字
select student.name,classes.name as class_name from student inner join classes on student.cls_id = classes.id;
-- 给数据表起名字
select s.*,c.name as class_name from student as s inner join classes as c on s.cls_id = c.id;
-- 查询信息 班级名字显示在第一列
select c.name,s.* from student as s inner join classes as c on s.cls_id = c.id;
-- 按照班级进行排序
select classes.name,student.* from student inner join classes on student.cls_id = classes.id order by classes.name asc;
-- left join .. on ..
-- 以左边的表的信息为基准取值
-- 查询 每位学生对应的班级信息
select * from student left join classes on student.cls_id = classes.id;
-- 查询没有班级的学生信息
select * from student left join classes on student.cls_id = classes.id having classes.id is null ;
网友评论