SQL查询优化原理分析(二)
来源:互联网 发布:迦太基 汉尼拔 知乎 编辑:程序博客网 时间:2024/04/30 14:05
理解笛卡尔集
笛卡尔集是积集合的一种,假设A和B都是集合,A和B的笛卡尔用A X B来表示,是所有有序偶(a,b)的集合,其中a属于A,b属于B。
A X B={(a,b)|a属于A且b属于 B} ,则AXB所形成的集合就叫笛卡尔集。
SQL查询语句有很多使用到笛卡尔集概念的例子,比如
from A,B left join C on A.id=C.aid and B.id=C.bid
这样的语句
实例1:select * from t_company,t_department
从实例1可以看出笛卡尔集就是两个表中每条记录两两组合形成的集合
实例2:select * from t_company,t_department where t_company.com_id=t_department.dep_comid
从实例2可以看出where的作用是把t_company.com_id等于t_department.dep_comid的记录拿出来形成新的结果集
实例3:select * from t_company left join t_department on t_company.com_id=t_department.dep_comid
实例4:select * from t_company right join t_department on t_company.com_id=t_department.dep_comid
从实例3和实例4的结果集来看,唯一的区别是实例4最后一行数据,也就是说right join 比left join 多了一行记录
left join 关键字选择记录会分三步走:
第一步:选择左表(t_company)和右表(t_department)形成笛卡尔集
第二步:选择t_company.com_id等于t_department.dep_comid的记录形成新的笛卡尔集
第三步:在上一步的基础之上把左表(t_company)中不符合on条件的行也加入进来
通过这三步就可以得到left join的结果集了
right join 关键字选择记录也会分三步走:
第一步:选择左表(t_company)和右表(t_department)形成笛卡尔集
第二步:选择t_company.com_id等于t_department.dep_comid的记录形成新的笛卡尔集
第三步:在上一步的基础之上把右表(t_department)中不符合on条件的行也加入进来
通过这三步就可以得到right join的结果集了
因为右表(t_department)有一条记录dep_comid=3,而在左表(t_company)没有com_id=3的记录,所以right join 结果集会出现多了一条的情况
实例5:select * from t_company inner join t_department on t_company.com_id=t_department.dep_comid
实例6:select * from t_company full join t_department on t_company.com_id=t_department.dep_comid
Mysql不支持full join,所以实际使用的SQL语句是:
select * from t_company left join t_department on t_company.com_id=t_department.dep_comid
union
select * from t_company right join t_department on t_company.com_id=t_department.dep_comid
inner join 关键字选择记录会分两步走:
第一步:选择左表(t_company)和右表(t_department)形成笛卡尔集
第二步:选择t_company.com_id等于t_department.dep_comid的记录形成新的笛卡尔集
通过这两步就可以得到inner join的结果集了,可以看到 from 左表 inner join 右表 和 from 左表,右表 的结果是一致的
full join 关键字选择记录也会分三步走:
第一步:选择左表(t_company)和右表(t_department)形成笛卡尔集
第二步:选择t_company.com_id等于t_department.dep_comid的记录形成新的笛卡尔集
第三步:在上一步的基础之上把左表(t_company)和右表(t_department)中不符合on条件的行都加入进来
通过这三步就可以得到full join的结果集了
- SQL查询优化原理分析(二)
- SQL查询优化原理分析(一)
- SQL查询优化原理分析(三)
- SQL查询和优化(二)
- 性能优化之MySQL优化(二)- explain分析SQL
- SQL查询和优化(十四)——用分析函数优化标量子查询
- 【MySql性能优化二】利用explain进行查询和分析sql语句
- 【SQL之查询优化(二)】SQL Server数据库优化经验总结
- oracle中sql语句查询优化(二)
- MySQL索引优化分析,SQL优化,慢查询分析
- SQL慢查询分析,原因及优化
- SQL优化(二)
- SQL优化(二)
- MYSQL查询优化(二)
- MYSQL查询优化(二)
- MYSQL查询优化(二)
- MYSQL查询优化(二)
- SQL 查询优化 (一)
- Java classpath
- linux中字符串转换函数 simple_strtoul
- 男人的精子 女人可以吃吗
- hadoop学习(五)------源码编译
- github常见操作和常见错误!错误提示:fatal: remote origin already exists.
- SQL查询优化原理分析(二)
- pci-skeleton.c
- json串和对象-----转化
- 理解进程调度时机并跟踪分析进程调度与进程切换的过程
- Android 防止ViewPager中的Fragment被销毁的方法,更加流畅
- Makefile 语法分析
- 黑马程序员——泛型和Map集合
- Android 切换Fragment时实现数据保持
- Android中的TRIM优化