Mysql 查询语句(六)
连接查询
我们的链接查询类似于数学集合中的交并补
将多张表进行记录的连接查询(按照某个字段指定的条件进行数据的拼接);
进行数据的拼接(两张表的内容显示在一个结果表中 使用连接查询)
最终的结果是:记录数有可能变化,字段数一定会增加(至少两张表的合并)
意义:在用户查看数据的时候,显示的数据来自于多张表
我们先说说内连接—— inner join
查询的结果为两个表匹配到的数据 也就是A表和B表交集
语法:selete * from 表1 inner或left或right join 表2 on 表1,列 = 表2,列;
--查询 有能够对应班级的学生以及班级信息
select * from students inner join classes on students.cls_id = classes.id;
这里我们查询班级表,表中只有两条数据对应python_01和python_02,因此我们使用第一条查询语句时我们只能查出来在python_01和python_02这两个班级里的人,而cls_id为3,4,5,的人应为数据库中不存在对应班级id所以无法查询出来,也就满足了我们的需求!
按照要求显示姓名和班级
select students.*,classses.name from students inner join classes on students.cls_id = classes.id;
select students.name,classses.name from students inner join classes on students.cls_id = classes.id;
给表起别名
select s.name,c.name from students as s inner join classes as c on s.cls_id = c.id;
查询有能够对应班级的学生以及班级信息,显示学生的所有信息,只显示班级名称
select s.*,c.name from students as s inner join classes as c on s.cls_id = c.id;
在以上的查询中,就按每个班级姓名显示在第一列
select c.name,s.* from students as s inner join classes as c on s.cls_id = c.id;
查询有能够对应班级的学生以及班级信息,按照班级进行排序(order by)
--select c.xxx,s.xxx from students as s inner join classes as c on .... order by .....;
select c.name,s.* from students as s inner join classes as c on s.cls_id = c.id order by c.name;
将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;
左连接查询:查询的结果为两个表匹配到的数据,左表特有的数据,对于右表中不存在的数据使用null填充
left join
--查询每位学生对应的班级信息(左连接)
select * from students as s left join classes as c on s.cls_id = c.id;
我们看看和inner join有什么差别
select * from students as s inner join classes as c on s.cls_id = c.id;
在left join左边时students表,我们以左边表的所有字段为基准,右边表有的数据就显示,不存在的数据用null填充
--查询没有对应班级信息的学生
--select .... from xxx as x left join xxx as x on ... where ...
--select .... from xxx as x left join xxx as x on ... having...
select * from students as s left join classes as c on s.cls_id = c.id having c.id is null;
select * from students as s left join classes as c on s.cls_id = c.id wherec.id is null;
右连接查询:查询的结果为两个表匹配到的数据,右表特有的数据,对于左表中不存在的数据使用null填充
就是和左连接查询相反,,基本和左连接查询一样,但基本不用,将两个表换位置就可以达成,就变成左连接查询,这里我们就不做演示啦,一般会用左查询就够了!
下次我们介绍子查询和自关联查询语句就讲完啦!