【mysql】内连接、左连接、右连接、自连接

1.连接

当需要查询的数据字段来自多个表时,我们需要连表查询,连接又分为内连接、左右连接,自连接是内连接的一种特殊形式
【mysql】内连接、左连接、右连接、自连接_第1张图片

2.内连接

内连接是取两个表中的交集,使用on关键字来指定交集条件

语法格式
select 字段 from1 inner join2 on1.字段1 =2.字段2
如果不指定on的条件,则两个表进行笛卡尔运算

举例
select * from students inner join classes on students.cls_id=classes.id;

取别名
select * from students as s inner join classes as c on s.cls_id=c.id;

显示指定字段
select s.name,s.age,c.name from students as s inner join classes as c on s.cls_id=c.id;

3.左右连接

左连接就是以左表为主根据条件查询右表数据,当左表的字段在右表没有,则用null来填充。即左连接后的表包含了左表的全部数据,可能只包含右边的部分数据。左连接的用法跟内连接一样,就是把inner改为left而已

语法格式
select 字段 from1 left join2 on1.字段1 =2.字段2

举例
select * from students left join classes on students.cls_id = classes.id;

右连接跟做连接一样,不过就是把左换成了右,其实左右连接可以互换使用,即on条件相同,把要连接的表的先后顺序换了

下面两个语句查询到的数据相同,只是顺序不同
select * from students right join classes on students.cls_id=classes.id;
select * from classes right join students on classes.id=students.cls_id;

我们可以修改一下显示的顺序,即可达到一样的效果
select * from students right join classes on students.cls_id=classes.id;
select students.*,classes.* from classes right join students on classes.id=students.cls_id;

4.自连接

自连接实际上就是内连接,只不过它inner join的左右两边都是同一个表
下面举个例子
【mysql】内连接、左连接、右连接、自连接_第2张图片


自连接两次,得到省里的每个市
select * from areas as p inner join areas as c on c.pid=p.aid where p.atitle='广东省';

自连接三次,得到省、市、区三级关系
select * from areas as p inner join areas as c inner join areas as a on c.pid=p.aid and a.pid=c.aid where p.atitle='广东省';

你可能感兴趣的:(mysql,mysql,sql,内连接)