当前位置: 首页 > news >正文

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.四

在这里插入图片描述

9.参考

在join中,on和where的区别

http://www.lryc.cn/news/590108.html

相关文章:

  • 锁存型霍尔 IC:定义、应用与优势全解析
  • Git问题排查与故障解决详解
  • 前端性能与可靠性工程:前端韧性工程 - 优雅降级与离线支持
  • 《设计模式之禅》笔记摘录 - 7.中介者模式
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘tkinter’问题
  • 网络编程/Java面试/TCPUDP区别
  • 【代码】Matlab鸟瞰图函数
  • AsyncRelayCommand示例学习
  • 测试开发工作日常用的提示词分享
  • XPath注入攻击详解:原理、危害与防御
  • 智能工厂生产设备状态检测算法
  • 基于多源时序特征卷积网络(MSTFCN)的光伏功率预测模型
  • 基于springboot+vue的酒店管理系统设计与实现
  • 施易德门店管理系统应用案例分析:零售女装品牌伊芙丽的全球化布局
  • PandaWiki与GitBook深度对比:AI时代的知识管理工具,选谁好?
  • 从电子管到CPU
  • Swarm Network 选择 Walrus 实现可验证 AI
  • 浏览器自动化方案
  • 小架构step系列16:代码文档
  • 共生型企业:驾驭AI自动化(事+AI)与人类增强(人+AI)的双重前沿
  • 道可云人工智能每日资讯|天津市人工智能(AI+信创)创新生态联盟成立
  • 面试150——数组字符串
  • 区块链之拜占庭容错算法——Practical Byzantine Fault Tolerance(PBFT)
  • 移动支付方式全解析:无卡支付、快捷支付、认证支付、协议支付与代扣的区别
  • 堆排序算法详解:原理、实现与C语言代码
  • 网络安全(初级)(Python实现sql自动化布尔盲注)
  • 牛客:HJ25 数据分类处理[华为机考][哈希][字符串]
  • python基础②-数据结构
  • 【DataWhale】快乐学习大模型 | 202507,Task02笔记
  • 牛客:HJ26 字符串排序[华为机考][map]