sql——sql中的各种连接
现有两张表
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中的各种连接的更多相关文章
- SQL Server中多表连接时驱动顺序对性能的影响
本文出处:http://www.cnblogs.com/wy123/p/7106861.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...
- sql语句中的join连接(左连接、右连接、全连接、内连接)
内部连接(inner join): select * from d_user a inner join D_ORGANIZATION b on a.COMPANY_XID=b.ID 内部链接也是排他 ...
- 清晰讲解SQL语句中的外连接,通用于Mysql和Oracle,全是干货哦
直入主题: 我们做一个操作,将员工SCOTT的部门去掉,再次通过内连接查看数据,看看会产生什么现象? 使用内连接,查询数据 问题:找不到SCOTT员工了,只有13条数据,这显然不合理:这就是内连接的缺 ...
- 清晰讲解SQL语句中的内连接,通用于Mysql和Oracle,全是干货哦
本文章目的:力求清晰明了讲解SQL语句的内连接的各种应用,没有深奥的理解! 前奏:这篇文章和下篇文章会将内连接和外连接讲解清楚SQL语句的多表查询常用的有以下几种:两表联合查询(1)内连接(2)外连接 ...
- 回想sql语句中的各种连接
1. 内连接(Inner Join) 内连接是最常见的一种连接,它页被称为普通连接,而E.FCodd最早称之为自然连接. 以下是ANSI SQL-92标准 select * from t_ins ...
- sql server中的左连接与右连接的简便写法
左连接 *=(左表中的数据全部显示出来,右表中没有相关联的数据显示null) select Users.*,Department.name as DepartmentName from Users,D ...
- SQL语句中不同的连接JOIN
为了从两个表中获取数据,我们有时会用JOIN将两个表连接起来.通常有以下几种连接方式: JOIN or INNER JOIN(内连接) : 这两个是相同的,要求两边表同时有对应的数据,返回行,任何 ...
- SQL Server中的完全连接(full join)
一.建库和建表 create database scort use scort create table emp ( empno int primary key, ename ), sal int, ...
- 在Oracle SQL Developer中创建新连接
步骤: 1.如下图 2.点击“测试”,如果左下角的状态出现“成功”,说明OK
- SQL中的内连接与外连接
关于关系代数连接运算的介绍请查看下面链接 http://www.cnblogs.com/xidongyu/articles/5980407.html 连接运算格式 链接运算由两部分构成:连接类型和连接 ...
随机推荐
- Ionic 启动及应用图标
1.在项目的根目录下创建resources文件夹. 2.在文件夹中都放入icon.png(应用图标,最小192x192px,不带圆角),splash.png(启动屏幕,最小2208x2208px,中间 ...
- python终端总是无法删除字符
yum install readline-devel
- IE中操作粘贴板复制和粘贴
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- INNODB insert buffer 简单分析
在mysql5.1 之前称为Insert Buffer, 优化2级非唯一索引上插入操作的读IO, 在5.5之后改名为Change Buffer, 功能也扩展为2级非唯一索引上的插入.删除.更新.pur ...
- MySQL自带的性能压力测试工具mysqlslap
mysqlslap是从MySQL的5.1.4版开始就开始官方提供的压力测试工具. 通过模拟多个并发客户端并发访问MySQL来执行压力测试,同时提供了较详细的SQL执行数据性能报告,并且能很好的对比多个 ...
- The Downside of MySQL Auto-reconnect
A few days ago I was doing some cleanup on a passive master database using the MySQL client. I didn’ ...
- CISCO ASA 5505 经典配置案例
nterface Vlan2 nameif outside ----------------------------------------对端口命名外端口 security-level 0 -- ...
- Don't Dismiss Georgia Tech's $6,600 Online Master's Degree
https://www.pcmag.com/commentary/343924/dont-dismiss-georgia-techs-6-600-online-masters-degree Don't ...
- Oracle 导出用户下的所有索引创建语句
SELECT dbms_lob.substr(dbms_metadata.get_ddl('INDEX', INDEX_NAME))||';' from dba_indexes where owne ...
- .后面是方法不加引号 ,后面是"名"要加引号
.后面是方法不加引号 ,后面是"名"要加引号