基本定义:
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