现有两张表

tablea 和 tableb

   

各种连接

1、笛尔卡积

SELECT * FROM TabA a,TabB b where a.id = b.id /*笛尔卡积乘积*/

返回的结果为两表中所有满足a.id=b.id的记录。b表中id 为1的有两条记录,a表中有一条,返回的结果中可以看出,a表中又自动补齐了一条id为1的记录。

一般的笛尔卡积SELECT * FROM TabA a,TabB 返回的数据为15条。a表中有m条记录,b表中有n条记录,则一般的笛尔卡积返回的数据为m*n条记录。记录之间的组合是随意的。

2、inner join

select * FROM TabA a INNER JOIN TabB b ON a.id=b.id /*inner join*/

inner join的返回结果和笛尔卡积是相同的。

SELECT * FROM TabA a,TabB b where a.id = b.id /*笛尔卡积乘积*/

select * FROM TabA a INNER JOIN TabB b ON a.id=b.id /*inner join*/

区别:执行方式  第一条语句将表a和表b的记录组合起来,然后考察满足条件的,并返回记录。

第二条语句是参照表a中的记录,一条一条到表b中去找符合记录的,符合则连在一起,否则转到a中下一条

inner join 是笛尔卡积的特殊形式。一般情况下,我们选用inner join,内连接的效率要高于笛卡尔积的效率。

3、left join

select * FROM TabA a LEFT JOIN TabB b ON a.id=b.id /*left join*/

返回的为a表中所有的记录,即使在b表中没有匹配到。

4、right join

SELECT * FROM TabA a RIGHT JOIN TabB b ON a.id=b.id /*right join*/

返回的为b表中所有的记录,即使在a表中没有匹配到满足条件的记录。

5、full join

在mysql中,不支持full join操作。我们使用

select * from TabA a left join TabB b on a.id = b.id
union
select *
from TabA a right join TabB b on a.id = b.id /*返回左右表所有的行 相当于full join mysql不支持full join*/

full join:等于left join和right join的并集

6、从两张表中查询出id字段相同,name字段不同的所有记录

SELECT * FROM TabA a WHERE a.id in(SELECT id FROM TabB)
UNION
SELECT * FROM TabB b WHERE b.id in(SELECT id FROM TabA) ORDER BY id /*UNION 去重 UNINSTALL 不去重*/

SELECT * FROM TabA a WHERE EXISTS (SELECT id FROM TabB b WHERE a.id=b.id)
UNION ALL
SELECT * FROM TabB b WHERE EXISTS (SELECT id FROM TabA a WHERE a.id=b.id)

后面的语句性能比第一要好点。

sql——sql中的各种连接的更多相关文章

  1. SQL Server中多表连接时驱动顺序对性能的影响

    本文出处:http://www.cnblogs.com/wy123/p/7106861.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...

  2. sql语句中的join连接(左连接、右连接、全连接、内连接)

    内部连接(inner join): select * from d_user a inner join D_ORGANIZATION b on a.COMPANY_XID=b.ID  内部链接也是排他 ...

  3. 清晰讲解SQL语句中的外连接,通用于Mysql和Oracle,全是干货哦

    直入主题: 我们做一个操作,将员工SCOTT的部门去掉,再次通过内连接查看数据,看看会产生什么现象? 使用内连接,查询数据 问题:找不到SCOTT员工了,只有13条数据,这显然不合理:这就是内连接的缺 ...

  4. 清晰讲解SQL语句中的内连接,通用于Mysql和Oracle,全是干货哦

    本文章目的:力求清晰明了讲解SQL语句的内连接的各种应用,没有深奥的理解! 前奏:这篇文章和下篇文章会将内连接和外连接讲解清楚SQL语句的多表查询常用的有以下几种:两表联合查询(1)内连接(2)外连接 ...

  5. 回想sql语句中的各种连接

    1. 内连接(Inner Join) 内连接是最常见的一种连接,它页被称为普通连接,而E.FCodd最早称之为自然连接. 以下是ANSI SQL-92标准 select * from    t_ins ...

  6. sql server中的左连接与右连接的简便写法

    左连接 *=(左表中的数据全部显示出来,右表中没有相关联的数据显示null) select Users.*,Department.name as DepartmentName from Users,D ...

  7. SQL语句中不同的连接JOIN

    为了从两个表中获取数据,我们有时会用JOIN将两个表连接起来.通常有以下几种连接方式: JOIN  or  INNER JOIN(内连接) : 这两个是相同的,要求两边表同时有对应的数据,返回行,任何 ...

  8. SQL Server中的完全连接(full join)

    一.建库和建表 create database scort use scort create table emp ( empno int primary key, ename ), sal int, ...

  9. 在Oracle SQL Developer中创建新连接

    步骤: 1.如下图 2.点击“测试”,如果左下角的状态出现“成功”,说明OK

  10. SQL中的内连接与外连接

    关于关系代数连接运算的介绍请查看下面链接 http://www.cnblogs.com/xidongyu/articles/5980407.html 连接运算格式 链接运算由两部分构成:连接类型和连接 ...

随机推荐

  1. MySQL缓存机制详解(一)

    本文章拿来学习用||参考资料:http://www.2cto.com/database/201308/236361.html 对MySql查询缓存及SQL Server过程缓存的理解及总结   一.M ...

  2. 有关于《Linux C编程一站式学习》(备份)

    Linux C编程一站式学习 -- PDF版本,共37章: Linux C编程一站式学习 -- 在线版,来自灰狐: Linux C编程一站式学习 -- 在线版,来自亚嵌教育: Linux C一站式学习 ...

  3. deep learning自学知识积累笔记

    推荐系统的演变过程 协同过滤(英雄所见略同)思想为类似喜好的人的选择必然也类似.比如小学男生普遍喜欢打手游,中年大叔普遍喜欢射雕英雄传 随后有了SVD奇异值分解,但是SVD要求不能太稀疏,因此有了隐语 ...

  4. 破解 jar 包之直接修改 .class 文件方式

    一.常规 JAVA 软件破解流程 先讲一下常规jar包的破解流程. 1. 快速定位.          1) 通过procmon监控相关软件,查看程序都访问了些啥.         2) 用jd-gu ...

  5. 解决MySQL5.6中的Slave延迟问题的基本教程

    一.原因分析一般而言,slave相对master延迟较大,其根本原因就是slave上的复制线程没办法真正做到并发.简单说,在master上是并发模式(以InnoDB引擎为主)完成事务提交的,而在sla ...

  6. history历史记录控制

    往往我们操作的每一条命令都会被机器记录下来,所有我们为了安全需要屏蔽掉某些敏感的操作命令. 设置linux默认的历史记录数: 临时生效: export  HISTSIZE=5 history 永久生效 ...

  7. python的学习之路day3

    大纲 1.汉字编码 2.浅拷贝与深拷贝 3.函数 4.return 5.函数的基本参数 6.format 7.三元运算(三目运算) 8.python的内置函数 abs() all() any() bo ...

  8. 阿里八八Alpha阶段Scrum(12/12)

    今日进度 俞鋆: 和前端对接,完成了注册接口的对接写了一部分数据同步接口. 李嘉群: 完成了注册界面与服务器的对接 黄梅玲: json数据解析并在listview中显示(还未完成) 王国超: 今天开始 ...

  9. sublime text3 setting-user

    { "caret_style": "smooth", "find_selected_text": true, "font_size ...

  10. Python os.md

    os 便携式访问操作系统的特定功能.os模块提供了对特定平台模块(如posix, nt, mac)的封装, 函数提供的api在很多平台上都可以相同使用, 所以使用os模块会变得很方便. 但不是所有函数 ...