数据库的连接 SQL Joins

基本定义:


  left join (左连接):返回包括左表中的所有记录和右表中连接字段相等的记录。


  right join (右连接):返回包括右表中的所有记录和左表中连接字段相等的记录。


  inner join (等值连接或者叫内连接):只返回两个表中连接字段相等的行。

(略)


  full join (全外连接):返回左右表中所有的记录和左右表中连接字段相等的记录。
 

一.UNION形成并集
  UNION可以对两个或多个结果集进行连接,形成“并集”。
  子结果集所有的记录组合在一起形成新的结果集。

1、限定条件
  要是用UNION来连接结果集,有4个限定条件。
  (1)、子结果集要具有相同的结构。
  (2)、字结果集的列数必须相同。
  (3)、子结果集对应的数据类型必须可以兼容。
  (4)、每个子结果集不能包含order by和compute子句。

2、语法形式
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

3.示例:
  无重复记录:

  有重复记录:


二.EXCEPT形成差集
  EXCEPT可以对两个或多个结果集进行连接,形成“差集”。
  返回左边结果集合中已经有的记录,而右边结果集中没有的记录。

1、限定条件
  要是用EXCEPT来连接结果集,有4个限定条件。
  (1)、子结果集要具有相同的结构。
  (2)、字结果集的列数必须相同。
  (3)、子结果集对应的数据类型必须可以兼容。
  (4)、每个子结果集不能包含order by和compute子句。

2、语法形式
SELECT column_name(s) FROM table1
EXCEPT
SELECT column_name(s) FROM table2;

  博主的MySQL版本不支持EXCEPT,暂用NOT IN展示结果。


三.INNER JOIN形成交集
  INNER JOIN可以对两个或多个结果集进行连接,形成“交集”。
  返回左边结果集和右边结果集中都有的记录。

1、限定条件
  要是用INNER JOIN来连接结果集,有4个限定条件。
  (1)、子结果集要具有相同的结构。
  (2)、字结果集的列数必须相同。
  (3)、子结果集对应的数据类型必须可以兼容。
  (4)、每个子结果集不能包含order by和compute子句。

2、语法形式
SELECT column_name(s) FROM table1
INNER JOIN table2
ON table2.column_name(s) = table1.column_name(s);

SELECT column_name(s) FROM table1
JOIN table2
ON table2.column_name(s) = table1.column_name(s);
 

七种JION理论

 

一、左连接。A表中所有记录,不管B表中有没有关联的数据。在B表中找到的关联数据列也会被一起返回

SELECT *
FORM tableA A
LEFT JOIN tableB B
ON A.key=B.key

二、右连接。B表中所有记录,不管A表中有没有关联的数据。在A表中找到的关联数据列也会被一起返回

SELECT *
FORM tableA A
RIGHT JOIN tableB B
ON A.key=B.key

三、内连接。将A表和B表中能关联起来的数据连接后返回。

SELECT *
FORM tableA A
INNER JOIN tableB B
ON A.key=B.key

四、A表有但B表没有关联数据的记录集

SELECT *
FORM tableA A
LEFT JOIN tableB B
ON A.key=B.key
WHERE B.key IS NULL

五、B表有但A表没有关联数据的记录集

SELECT *
FORM tableA A
RIGHT JOIN tableB B
ON A.key=B.key
WHERE A.key IS NULL

六、全连接,返回左右表里的所有记录,其中左右表里能关联起来的记录被连接后返回

SELECT *
FORM tableA A
FULL OUTER JOIN tableB B
ON A.key=B.key

七、返回A表和B表里没有相互关联的记录集

SELECT *
FORM tableA A
FULL OUTER JOIN tableB B
ON A.key=B.key
WHERE A.key IS NULL OR B.key IS NULL

两表合并

两表合并:

查询相同数据并去重

select id from a
intersect
select id from b

1查询不同数据并去重 (a表 except b表 )

select id from a
except
select id from b

2查询不同数据并去重 (b表 except a表 )

select id from b
except
select id from a

SQL UNION 语法(选取不同的值,不允许重复。)

SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2

SQL UNION ALL 语法(允许重复!)

SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值