Mysql连接查询
分类:
按年代分类:
sql92标准
sql99标准【推荐】
内连接:【inner join = join】
等值连接
非等值连接
自连接
外连接:
左外连接【left outer join = left join】
右外连接【right outer join = right join】
交叉连接
sql99标准
语法:
select 查询的列
from 表1 别名 【连接类型】
join 表2 别名
on 连接条件
【where 筛选条件】
【group by 分组】
【having 筛选条件】
【order by 排序条件】
student表
class表
(一)内连接【inner join = join】
JOIN等同于INNER JOIN,即内连接,不满足ON条件的会直接过滤掉,不显示。
①等值连接
案例1:
select *
from student s 【inner】 join class c
on s.class_id = c.id;
案例2:
select *
from student s 【inner】 join class c
on s.class_id = c.id
where s.name like ‘%小%’;
②非等值连接
BETWEEN … AND …
案列:
select *
from student s join class c
on s.class_id between c.id and c.id
where c.id=1 or c.id=2
③自连接
同一个表自己连接
案列:
select *
from student s join student c
on s.id = c.class_id;
(二)外连接
外连接可分为一个主表一个从表:
外连接的查询结果为主表中的所有记录
如果从表中有和它匹配的,则显示匹配的值
如果从表中没有和它匹配的,则显示null
外连接查询结果=内连接结果+主表中有而从表没有的记录
左外和右外调换两个表的顺序也可以实现同样的效果
①左外连接【left outer join = left join】
左外连接,将左边的表作为主表,不满足ON条件的会保留左边那张表的数据,右边表数据直接显示NULL。
案列:
select *
from student s left join class c
on s.class_id = c.id;
②右外连接【right outer join = right join】
右外连接,将右边的表作为主表,不满足ON条件的会保留右边那张表的数据,左边表数据直接显示NULL。
案列:
select *
from student s right join class c
on s.class_id = c.id;
(三)交叉连接
相当于用sql99语法的标准来实现笛卡尔乘积
案列:
select *
from student s cross join class c
on s.class_id = c.id;