有需要互关的小伙伴,关注一下,有关必回关,争取今年认证早日拿到博客专家
mysql> SELECT e.empno,ename,e.deptno,e.is_deleted FROM `emp_test` e ;
+-------+-------+--------+------------+
| empno | ename | deptno | is_deleted |
+-------+-------+--------+------------+
| 1 | 张三 | 1 | 0 |
| 2 | 李四 | 1 | 1 |
| 3 | 王五 | 10 | 0 |
+-------+-------+--------+------------+
3 rows in set (0.07 sec)
mysql> select * from dept;
+--------+--------+------+
| deptno | dname | loc |
+--------+--------+------+
| 1 | 开发部 | 北京 |
| 2 | 测试部 | 上海 |
| 3 | 市场部 | 广州 |
| 4 | 运营部 | 杭州 |
+--------+--------+------+
4 rows in set (0.06 sec)
-- 因为e.is_deleted = 0再过滤条件中,所以不会出现再结果集中
mysql> SELECT e.empno,ename,e.deptno as edeptno,e.is_deleted,dname,d.deptno as ddeptno FROM `emp_test` e left join dept d on e.deptno = d.deptno where e.is_deleted = 0;
+-------+-------+---------+------------+--------+---------+
| empno | ename | edeptno | is_deleted | dname | ddeptno |
+-------+-------+---------+------------+--------+---------+
| 1 | 张三 | 1 | 0 | 开发部 | 1 |
| 3 | 王五 | 10 | 0 | NULL | NULL |
+-------+-------+---------+------------+--------+---------+
2 rows in set (0.07 sec)
实现细节:
生成笛卡尔积
+-------+-------+---------+------------+---------+--------+
| empno | ename | edeptno | is_deleted | ddeptno | dname |
+-------+-------+---------+------------+---------+--------+
| 1 | 张三 | 1 | 0 | 1 | 开发部 |
| 1 | 张三 | 1 | 0 | 2 | 测试部 |
| 1 | 张三 | 1 | 0 | 3 | 市场部 |
| 1 | 张三 | 1 | 0 | 4 | 运营部 |
| 2 | 李四 | 1 | 1 | 1 | 开发部 |
| 2 | 李四 | 1 | 1 | 2 | 测试部 |
| 2 | 李四 | 1 | 1 | 3 | 市场部 |
| 2 | 李四 | 1 | 1 | 4 | 运营部 |
| 3 | 王五 | 10 | 0 | 1 | 开发部 |
| 3 | 王五 | 10 | 0 | 2 | 测试部 |
| 3 | 王五 | 10 | 0 | 3 | 市场部 |
| 3 | 王五 | 10 | 0 | 4 | 运营部 |
+-------+-------+---------+------------+---------+--------+
执行on子句(e.deptno = d.deptno)
+-------+-------+---------+------------+---------+--------+
| empno | ename | edeptno | is_deleted | ddeptno | dname |
+-------+-------+---------+------------+---------+--------+
| 1 | 张三 | 1 | 0 | 1 | 开发部 |
| 2 | 李四 | 1 | 1 | 1 | 开发部 |
+-------+-------+---------+------------+---------+--------+
执行join子句
left join 会把左表中有on过滤后的临时表中没有的添加进来,右表用null填充
right会把右表中有on过滤后的临时表中没有的添加进来,左表用null填充
故将王五添加进来,并且右表填充null
+-------+-------+---------+------------+---------+--------+
| empno | ename | edeptno | is_deleted | ddeptno | dname |
+-------+-------+---------+------------+---------+--------+
| 1 | 张三 | 1 | 0 | 1 | 开发部 |
| 2 | 李四 | 1 | 1 | 1 | 开发部 |
| 3 | 王五 | 10 | 0 | NULL | NULL |
+-------+-------+---------+------------+---------+--------+
执行where子句
+-------+-------+---------+------------+---------+--------+
| empno | ename | edeptno | is_deleted | ddeptno | dname |
+-------+-------+---------+------------+---------+--------+
| 1 | 张三 | 1 | 0 | 1 | 开发部 |
| 3 | 王五 | 10 | 0 | NULL | NULL |
+-------+-------+---------+------------+---------+--------+
-- empno=2因为不满足e.is_deleted = 0故不会连表,dept对应部分为null(只有完全满足连表条件才会连表)
mysql> SELECT e.empno,ename,e.deptno as edeptno,e.is_deleted,dname,d.deptno as ddeptno FROM `emp_test`e left join dept d on e.deptno = d.deptno and e.is_deleted = 0 ;
+-------+-------+---------+------------+--------+---------+
| empno | ename | edeptno | is_deleted | dname | ddeptno |
+-------+-------+---------+------------+--------+---------+
| 1 | 张三 | 1 | 0 | 开发部 | 1 |
| 2 | 李四 | 1 | 1 | NULL | NULL |
| 3 | 王五 | 10 | 0 | NULL | NULL |
+-------+-------+---------+------------+--------+---------+
3 rows in set (0.10 sec)
实现细节:
生成笛卡尔积
+-------+-------+---------+------------+---------+--------+
| empno | ename | edeptno | is_deleted | ddeptno | dname |
+-------+-------+---------+------------+---------+--------+
| 1 | 张三 | 1 | 0 | 1 | 开发部 |
| 1 | 张三 | 1 | 0 | 2 | 测试部 |
| 1 | 张三 | 1 | 0 | 3 | 市场部 |
| 1 | 张三 | 1 | 0 | 4 | 运营部 |
| 2 | 李四 | 1 | 1 | 1 | 开发部 |
| 2 | 李四 | 1 | 1 | 2 | 测试部 |
| 2 | 李四 | 1 | 1 | 3 | 市场部 |
| 2 | 李四 | 1 | 1 | 4 | 运营部 |
| 3 | 王五 | 10 | 0 | 1 | 开发部 |
| 3 | 王五 | 10 | 0 | 2 | 测试部 |
| 3 | 王五 | 10 | 0 | 3 | 市场部 |
| 3 | 王五 | 10 | 0 | 4 | 运营部 |
+-------+-------+---------+------------+---------+--------+
执行on子句(e.deptno = d.deptno and e.is_deleted = 0)
+-------+-------+---------+------------+---------+--------+
| empno | ename | edeptno | is_deleted | ddeptno | dname |
+-------+-------+---------+------------+---------+--------+
| 1 | 张三 | 1 | 0 | 1 | 开发部 |
+-------+-------+---------+------------+---------+--------+
执行join子句
将被on条件过滤掉的李四和王五加回来,右表填充null
+-------+-------+---------+------------+--------+---------+
| empno | ename | edeptno | is_deleted | dname | ddeptno |
+-------+-------+---------+------------+--------+---------+
| 1 | 张三 | 1 | 0 | 开发部 | 1 |
| 2 | 李四 | 1 | 1 | NULL | NULL |
| 3 | 王五 | 10 | 0 | NULL | NULL |
+-------+-------+---------+------------+--------+---------+
from>on>join>where>group by>having>select>distinct>order by>limit
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有