sql连接详解
笛卡尔乘积:
A={a, b},集合B={0, 1, 2},则AxB的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)};
(AxB≠BxA)
数据库中内连接与多表查询的区别
sql = "select [个人信息$].*,[工作经历$].* from [个人信息$],[工作经历$] where [个人信息$].UID=[工作经历$].UID"
sql = "select [个人信息$].*,[工作经历$].* from [个人信息$] inner join [工作经历$] on [个人信息$].UID=[工作经历$].UID"
第一种是普通的多表查询,内部还是笛卡尔积的逐行的搜索机制,如果查询的几张表数据量大的话会降低性能;
第二种是内连接。两种方式得到的结果是一致的。inner join(等值连接) 只返回两个表中联结字段相等的行的记录。
从结果上看一样。
但是从实现上看,多个from是笛卡尔集,再筛选,效率是O(n^2),很差。
join是先做hash,再匹配,效率是O(logN),很好。
推荐使用内连接。SQL规格推荐也是用join的。
连接查询的分类
1. 交叉连接(就是没有连接条件的“全部连接”)
形式: from 表1 [cross] join 表2 或 from 表1,表2;
结果:两张表的笛卡尔积
2. 内连接
形式:from 表1 [inner] join 表2 on 表1.字段1 = 表2.字段2;
结果:取得一个“交叉连接”的结果中,满足所设定的连接条件(就是on后面的条件)的那些行的数据。
3. 左(外)连接
形式:from 表1 left [outer] join 表2 on 表1.字段1 = 表2.字段2;
结果:内连接数据+左表不满足连接条件的列,null(一对多时,左表列会重复。学生表->学生成绩表)
是将两个表的满足连接条件的所有数据(即内连接数据), 再加上那些“左边”表中,不能满足连接条件的数据的总和。 对于左边表中不能满足条件的数据,在结果中的右边部分,都补上“null”
4. 右(外)连接
参考左外连接。
5. 全(外)连接
形式:from 表1 full [outer] join 表2 on 表1.字段1 = 表2.字段2;
左外链接和右外连接之并集。mysql不支持全外连接,可以用union替代。
最新文章
- 转行|如何成为企业想要的Android工程师
- 使用免费组件view pdf 文档
- SQL*Loader之CASE1
- 使用 Object.create 创建对象,super 关键字,class 关键字
- java前三本基础知识总结
- linux查找webshell
- Ubuntu下的网络配置(USTC)
- 查杀oracle锁表
- oracle中的sql%rowcount
- Android接口测试-JUnit入门
- BOM数据基础 - Mobox物料编码管理及实现
- Flex 布局教程
- (转)KMP算法实现。超级赞!见过的最容易理解的
- 7、创建ROS msg和srv
- springboot项目如何打包成war包
- 图说OOP基础(一)
- 2017-2018 ACM-ICPC Southeast Regional Contest (Div. 1)
- hdu 1255(线段树 扫描线) 覆盖的面积
- GoLang学习控制语句之if/else
- Hive性能分析和优化方法
热门文章
- 计算概论(A)/基础编程练习2(8题)/1:求平均年龄
- Django框架之跨站请求伪造
- BZOJ 1063 道路设计(树形DP)
- BZOJ 2141 排队(树状数组套treap)
- Hadoop错误日志
- Package libvirt was not found in the pkg-config search path
- POJ 1830 开关问题(高斯消元)题解
- hdu6446 网络赛 Tree and Permutation(树形dp求任意两点距离之和)题解
- POJ 1753 Flip Game(bfs+位压缩运算)
- python正则表达式re模块详细介绍--转载