当前位置: 首页 > 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.dtcms.com/a/282480.html

相关文章:

  • HTTP性能优化实战
  • GeoTools 基础概念解析
  • 5-Nodejs-npm与第三方模块
  • smolagents - 如何在mac用agents做简单算术题
  • 导入无人机航拍屋顶,10分钟智能铺设光伏板
  • 基于 Drools 的规则引擎性能调优实践:架构、缓存与编译优化全解析
  • MySQL 8.0 OCP 1Z0-908 题目解析(28)
  • 项目学习笔记 display从none切换成block
  • AWS ML Specialist 考试备考指南
  • 自学中医笔记(一)
  • AWS WebRTC 并发 Viewer 拉流失败分析:0.3 秒等待为何如此关键?
  • 线上分享:解码eVTOL安全基因,构建安全飞行生态
  • 【docker】将本地镜像打包部署到服务器上
  • 逆功率检测设备防逆流解决方案守护电网安全
  • JavaScript中将JSON对象转换为URL参数格式的字符串
  • java工具类Hutool
  • Python day15
  • pip包报错
  • Java全栈面试实录:从电商支付到AIGC的深度技术考察
  • Thymeleaf 流程控制与迭代详解
  • WebStorm vs VSCode:前端圈的「豆腐脑甜咸之争」
  • 基于JAVA Spring Boot物理实验考核系统设计与实现 (文档+源码)
  • 入门华为数通,HCIA/HCIP/HCIE该怎么选?
  • 如何删除 VSCode 账号的远程同步备份记录数据
  • 大模型-AI生成视频零基础启蒙:从0到1制作AI视频
  • DeepSeek + 通义万相:AI视频创作效率革命与技术实践
  • 【Linux操作系统 | 第19篇-进阶篇】Shell编程(上篇)
  • 英飞凌 | 新兴无线BMS系统解决方案深度分析
  • C语言:动态内存管理
  • 【Docker-Day 6】从零到一:精通 Dockerfile 核心指令 (FROM, WORKDIR, COPY, RUN)