SQL join中on和where的区别解析
更新时间:2025年08月11日 09:52:09 作者:茅坑的小石头
本文详细介绍SQL join中on和where的区别,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,感兴趣的朋友跟随小编一起看看吧
0.结论
- 两个表在,join时,首先做一个笛卡尔积,on后面的条件是对这个笛卡尔积做一个过滤形成一张临时表,如果没有where就直接返回结果,如果有where就对上一步的临时表再进行过滤。
- 先on,再join,再where
- 在使用left join时,on和where条件的区别如下:
- 1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
- 2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉
1.数据准备
DROP TABLE IF EXISTS `class`;
CREATE TABLE `class`
(
`c_id` int DEFAULT NULL COMMENT '班级ID',
`c_name` varchar(50) DEFAULT NULL COMMENT '班级名'
);
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`
(
`s_id` int DEFAULT NULL COMMENT '学生ID',
`s_name` varchar(50) DEFAULT NULL COMMENT '学生名',
`c_id` int DEFAULT NULL COMMENT '班级ID'
);
INSERT INTO `class` (`c_id`, `c_name`)
VALUES (1, '一班'),
(2, '二班'),
(3, '三班');
INSERT INTO `student` (`s_id`, `s_name`, `c_id`)
VALUES (1, '张三', 1),
(2, '李四', 2),
(3, '王五', 4);2.测试
-- 单表 select * from class c; select * from student s; -- 笛卡尔积 select * from class c inner join student s order by c.c_id, s.s_id; -- 内连 select * from class c inner join student s on c.c_id = s.c_id order by c.c_id, s.s_id; -- 左外连(先on,再join,再where) select * from class c left join student s on c.c_id = s.c_id order by c.c_id, s.s_id; select * from class c left join student s on c.c_id = s.c_id and c.c_id <> 2 order by c.c_id, s.s_id; select * from class c left join student s on c.c_id = s.c_id where c.c_id <> 2 order by c.c_id, s.s_id; select * from class c left join student s on c.c_id = s.c_id and s.c_id <> 2 order by c.c_id, s.s_id; select * from class c left join student s on c.c_id = s.c_id where s.c_id <> 2 order by c.c_id, s.s_id;
2.1.普通
2.1.1.class单表

2.1.2.student单表

2.1.3.笛卡尔积

2.1.4. 内连接

2.2.5.普通外连

2.2.重点来啦-外连接
2.2.1.一

2.2.2.二

2.2.3.三

2.2.4.四

3.参考资料
相关文章
存储过程配合UpdateDaset方法批量插入Dataset数据实现代码
用存储过程配合UpdateDaset方法批量插入Dataset数据,感兴趣的你可不要错过了哈,希望本文提供知识点可以帮助到你2013-02-02
SQL Server统计信息更新时采样百分比对数据预估准确性的影响详解
这篇文章主要给大家介绍了关于SQL Server统计信息更新时采样百分比对数据预估准确性影响的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧2018-09-09
由于系统错误 126 (SQL Server),指定驱动程序无法加载
今天下午在给客户安装用友T3标准版时碰到一个非常棘手的问题,MSDE2000数据库和用友T3软件都安装好了,但是打开系统管理的时候提示:AUTOMATION错误,然后将数据库彻底卸载干净,用友通T3软件也彻底卸载干净,重新安装了一下,仍然是这个情况2021-03-03
SQL Server数据类型char、nchar、varchar、nvarchar的区别浅析
这篇文章主要介绍了SQL Server数据类型char、nchar、varchar、nvarchar的区别浅析,本文写的比较容易明白,需要的朋友可以参考下2014-06-06


最新评论