SQL的并集UNION,交集JOIN,交叉连接(CROSS JOIN笛卡尔积),差集(NOT IN)

1. 

a. 并集UNION SELECT column1, column2 FROM table1 UNION SELECT column1, column2 FROM table2
b. 交集
JOIN SELECT * FROM table1 AS a JOIN table2 b ON a.name=b.name
c. 差集
NOT IN SELECT * FROM table1 WHERE name NOT IN(SELECT name FROM table2)
d. 笛卡尔积
 SELECT * FROM table1 CROSS JOIN table2  SELECT * FROM table1,table2相同 

2. SQL
中的UNION UNION与UNION ALL的区别是,前者会去除重复的条目,后者会仍旧保留。
    a. UNION SQL Statement1 UNION SQL Statement2
   b. UNION ALL SQL Statement1 UNION ALL SQL Statement2

3. SQL
中的各种JOIN SQL中的连接可以分为内连接,外连接,以及交叉连接(即是笛卡尔积)
a. 交叉连接
CROSS JOIN 如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积; 
举例 SELECT * FROM table1 CROSS JOIN table2 等同于 SELECT * FROM table1,table2      一般不建议使用该方法,因为如果有WHERE子句的话,往往会先生成两个表行数乘积的行的数据表然后才根据WHERE条件从中选择。 因此,如果两个需要求交际的表太大,将会非常非常慢,不建议使用。
  b. 内连接INNER JOIN 如果仅仅使用 SELECT * FROM table1 INNER JOIN table2 没有指定连接条件的话,和交叉连接的结果一样。 但是通常情况下,使用INNER JOIN需要指定连接条件。 
-- 等值连接(=号应用于连接条件, 不会去除重复的列) SELECT * FROM table1 AS a INNER JOIN table2 AS b on a.column=b.column
-- 不等连接
(>,>=,<,<=,!>,!<,<>) 例如 SELECT * FROM table1 AS a INNER JOIN table2 AS b on a.column<>b.column
-- 
自然连接(会去除重复的列)
c. 外连接
OUTER JOIN 首先内连接和外连接的不同之处: 内连接如果没有指定连接条件的话,和笛卡尔积的交叉连接结果一样,但是不同于笛卡尔积的地方是,没有笛卡尔积那么复杂要先生成行数乘积的数据表,内连接的效率要高于笛卡尔积的交叉连接。 指定条件的内连接,仅仅返回符合连接条件的条目。外连接则不同,返回的结果不仅包含符合连接条件的行,而且包括左表(左外连接时), 右表(右连接时)或者两边连接(全外连接时)的所有数据行。 
1)左外连接LEFT [OUTER] JOIN 显示符合条件的数据行,同时显示左边数据表不符合条件的数据行,右边没有对应的条目显示NULL 
例如
 SELECT * FROM table1 AS a LEFT [OUTER] JOIN ON a.column=b.column
2)
右外连接RIGHT [OUTER] JOIN 显示符合条件的数据行,同时显示右边数据表不符合条件的数据行,左边没有对应的条目显示NULL 
例如
 SELECT * FROM table1 AS a RIGHT [OUTER] JOIN ON a.column=b.column
3)
全外连接 显示符合条件的数据行,同时显示左右不符合条件的数据行,相应的左右两边显示NULL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值