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

差异(Except)

就是两个集中不重复的部分。例如
SELECT * FROM A
EXCEPT
SELECT * FROM B
这个的意思是,凡是不出现在B表中的A表的行。

交集(intersect)

就是两个集中共同的部分。例如
SELECT * FROM A
INTERSECT
SELECT * FROM B
这个的意思是,同时出现在A和B中的记录

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL中的JOIN操作用于将两个或更多表连接在一起,以便基于它们之间的共同字段获取数据。主要有三种类型的JOIN: ### 内连接 (INNER JOIN) 内连接返回的是来自参与联接的两个表的所有匹配行。如果其中一个表中没有匹配项,则不会包含在结果集中。 **语法示例**: ```sql SELECT table1.column1, table2.column2 FROM table1 INNER JOIN table2 ON table1.common_column = table2.common_column; ``` 这个查询将从`table1`和`table2`中选择所有在`common_column`列上相等的行,并显示`table1.column1`和`table2.column2`这两列的数据。 ### 左外联接 (LEFT JOINLEFT OUTER JOIN) 左外联接返回左侧表的所有行及其匹配的右侧表的行,如果没有匹配则由NULL填充右侧表的部分。 **语法示例**: ```sql SELECT table1.column1, table2.column2 FROM table1 LEFT JOIN table2 ON table1.common_column = table2.common_column; ``` 这将从`table1`中选择所有的行,以及可能从`table2`中匹配的行。如果某个`table1`行没有匹配到`table2`,其与`table2.column2`相关的部分将是NULL。 ### 右外联接 (RIGHT JOINRIGHT OUTER JOIN) 右外联接与左外联接类似,但返回右侧表的所有行及其匹配的左侧表的行。如果没有匹配,则由NULL填充左侧表的部分。 **语法示例**: ```sql SELECT table1.column1, table2.column2 FROM table1 RIGHT JOIN table2 ON table1.common_column = table2.common_column; ``` 这将从`table2`中选择所有的行,以及可能从`table1`中匹配的行。如果某个`table2`行没有匹配到`table1`,其与`table1.column1`相关的部分将是NULL。 ### 相关问题: 1. MySQL JOIN 的应用场景有哪些? 2. 如何优化JOIN查询以提高性能? 3. MySQLJOINUNION的区别是什么?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值