mysql左连接—left join

原文链接:这里
0.前言

join 是 SQL查询中很常见的一种操作,具体来讲有join,left join, right join,full join等很多形式。这片文章主要说下left join

1.定义与图解

左联结,会将左侧表中的数据全部取出来。不管右侧是否存在能关联上的数据。

首要条件,A表和B表必须有重合的部分。

我们先执行下面SQL语句生成数据。

DROP TABLE IF EXISTS `students`;
CREATE TABLE `students` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`stu_name` varchar(20) NOT NULL ,
`stu_sex` varchar(10) NOT NULL ,
`class_id` int(10) NOT NULL ,
`age` int(10) NOT NULL DEFAULT 18,
`create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8;
insert into students (stu_name,stu_sex,class_id,age) values
('张三','男',1001,18),
('王晓红','女',2001,20),
('李清乐','男',1001,23),
('赵倚天','男',3001,23),
('赵四','男',1001,22),
('王燕','女',3001,21),
('李西西','女',2001,20),
('高严','男',3001,22),
('冯清贺','男',4001,23),
('杨丽丽','女',5001,21),
('王和和','男',4001,22);
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`teacher_name` varchar(20) NOT NULL ,
`teacher_sex` varchar(10) NOT NULL ,
`class_id` int(10) NOT NULL ,
`age` int(10) NOT NULL DEFAULT 18,
`tel` varchar(11) ,
`create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8;
insert into teacher (teacher_name,teacher_sex,class_id,age,tel) values
('王老师','男',1001,38,'13011112222'),
('李老师','男',2001,28,'13012344222'),
('赵老师','男',3001,38,'13011112233'),
('孙老师','男',4001,28,'14011112222'),
('周老师','男',5001,18,' ');

执行完毕后,我们有两个表了。

然后我们执行left join语句

select *
from students as s
left join teacher as t
on s.class_id = t.class_id

我们用左右两个表的class_id作为关联。结果是:

我们可以看出,以左表为依据,查找左表中class_id与右表中的class_id重合的记录。

通过最后一条记录可以看到,即时表中有空记录也同样显示。

如果我们反着来,将两个表的位置调换

select *
from teacher as t
left join students as s
on s.class_id = t.class_id

结果如下:

2.扩展

我们如果只想要左侧部分怎么办,参照最上面的写法就可以。

select *
from students as s
left join teacher as t
on s.class_id = t.class_id
where t.class_id is null

posted on   longkui  阅读(4322)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示