mysql的left join、right join、inner join、union等连接查询

TABLE A ;TABLE B
接:
内连接:A INNER JOIN B ,在A中也有,在B中也有的数据才能查询出来
外连接:
左(外)连接:A LEFT (OUTER) JOIN B,连接查询的数据为符合条件的左表A的所有行,而不仅仅是A、B表联接列所匹配的行。如果左表A的某行在右表B中没有匹配行,则在相关联的结果集行中右表B的所有选择列表列均为空值(NULL)。      
右(外)连接:RIGHT (OUTER) JOIN 与左连接相反,右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。  
(外)连接(MySQL不支持)FULL OUTER  JOIN ,完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。全外连接实际是上左外连接和右外连接的数学合集(去掉重复),即“全外=左外 UNION 右外”。

ON条件:是过滤两个链接表笛卡尔积形成中间表的约束条件。
WHERE条件:在有ON条件的SELECT语句中是过滤中间表的约束条件。在没有ON的单表查询中,是限制物理表或者中间查询结果返回记录的约束。在两表或多表连接中是限制连接形成最终中间表的返回结果的约束。
通俗来说就是,左链接时,left join on后面的条件,只限制右表数据,不影响左表数据。
例如:on 左表.is_used <> 0,只会把符合条件的右表数据去除,左表中左表.is_used <> 0条件的数据还是会保留,右表列显示为NULL。
如果是需要限制的是左表的条件,要写在where的后面。

交叉连接:
交叉连接:CROSS JOIN,有两种,显式的和隐式的,不带ON子句,返回的是两表的乘积,也叫笛卡尔积。返回左表中的所有行,左表中的每一行与右表中的所有行组合。
语句1:隐式的交叉连接,没有CROSS JOIN。
SELECT *  FROM A B WHERE A.id = 1
语句2:显式的交叉连接,使用CROSS JOIN。
SELECT *  FROM A CROSS JOIN B WHERE A.id = 1

联合连接:
(Oracle、MySQL均不支持)(UNION JOIN):这是一种很少见的连接方式。其作用是:找出全外连接和内连接之间差异的所有行。这在数据分析中排错中比较常用。也可以利用数据库的集合操作来实现此功能。

条件子句:
子查询:SELECT *  FROM A  WHERE  A.id  IN ('A111', 'A222');


并集(union,Union all)
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。
同时,每条 SELECT 语句中的列的顺序必须相同。
注释:默认地,union会删除重复值,也就是说A和B中重复的行,最终只会出现一次,而union all则会保留重复行
SQL UNION 语法:
SELECT * FROM A
UNION
SELECT * FROM B

mysql的left join、right join、inner join、union等连接查询

差异(Except)
就是两个集中不重复的部分。例如
SELECT * FROM A
EXCEPT
SELECT * FROM B
这个的意思是,凡是不出现在B表中的A表的行。
mysql的left join、right join、inner join、union等连接查询

交集(intersect)
就是两个集中共同的部分。例如
SELECT * FROM A
INTERSECT
SELECT * FROM B
这个的意思是,同时出现在A和B中的记录
mysql的left join、right join、inner join、union等连接查询