mysql 中怎么实现外连接

30次阅读
没有评论

共计 1935 个字符,预计需要花费 5 分钟才能阅读完成。

这篇文章将为大家详细讲解有关 mysql 中怎么实现外连接,文章内容质量较高,因此丸趣 TV 小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

首先 my sql 不支持 oracle 的(+) 

内连接: 只连接匹配的行
左外连接: 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行
右外连接: 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行
全外连接: 包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。
交叉连接   生成笛卡尔积-它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个

行都一一匹配

举个例子吧。
表 A
id   name 
1     张
2     李
3     王

表 B
id   address   A_id
1     北京      1
2     上海      3
3     南京      10

包容性:A 表包容 B 表, 左连接左表是全的.(left join 或 left outer join)
SQL 语句如下:
SELECT A.name, B.address
FROM A
LEFT JOIN B ON A.id = B.A_id
查询结果为:
name     address
张     北京
李     NULL
王     上海

包容性:B 表包容 A 表, 右连接右表是全的.(right join 或 right outer join)
SQL 语句如下:
SELECT A.name, B.address
FROM A
RIGHT JOIN B ON A.id = B.A_id
查询结果为:
name     address
张     北京
王     上海
NULL     南京

排他性:A,B 表中至少有 1 个匹配时,才返回行。两表的交集
SQL 语句如下:
select A.name,B.address from A
inner join B
on A.id = B.A_id

查询结果为:
name     address
张     北京
王     上海
inner join   内连接等价于下面的 sql:
SELECT A.name, B.address
FROM A, B
WHERE A.id = B.A_id

注释: 全外连接返回参与连接的两个数据集合中的全部数据,无论它们是否具有与之相匹配的行。在功能上,它等价于

对这两个数据集合分别进行左外连接和右外连接,然后再使用消去重复行的并操作将上述两个结果集合并为一个结果集

。(full join 或 full outer join)
SQL 语句如下:
select * from A
full join B
查询结果为:
id     name     id     address A_id
1     张     1     北京     1
2     李     1     北京     1
3     王     1     北京     1
1     张     2     上海     3
2     李     2     上海     3
3     王     2     上海     3
1     张     3     南京     10
2     李     3     南京     10
3     王     3     南京     10

注释:返回 3 *3= 9 条记录,即笛卡尔积
SQL 语句如下:
SELECT * FROM A
CROSS JOIN B
查询结果为:
id     name     id     address A_id
1     张     1     北京     1
2     李     1     北京     1
3     王     1     北京     1
1     张     2     上海     3
2     李     2     上海     3
3     王     2     上海     3
1     张     3     南京     10
2     李     3     南京     10
3     王     3     南京     10
CROSS JOIN 等价于:
select * from A,B

注意:
1. on A.id = B.id 等同于 using(id)// 这里字段名要相同
2. 当 MySQL 在从一个表中检索信息时,你可以提示它选择了哪一个索引。 
如果 EXPLAIN 显示 MySQL 使用了可能的索引列表中错误的索引,这个特性将是很有用的。 
通过指定 USE INDEX (key_list),你可以告诉 MySQL 使用可能的索引中最合适的一个索引在表中查找记录行。 
可选的二选一句法 IGNORE INDEX (key_list) 可被用于告诉 MySQL 不使用特定的索引。   

效率问题:
1.inner join 比 left join 快
注:inner join   内连接等价于下面的 sql: SELECT A.name, B.address FROM A, B WHERE A.id = B.A_id
所以一般要用一般的连接就可以了.
2. 连接字段建索引

多表外连接
select   A.*,B.f1,B.f2,B.fn,C.f1,C.f2,C.fn   from   A    
  left   join   B   on   A.id=B.id    
  left   join   C   on   C.id=A.id  
  where …….

关于 mysql 中怎么实现外连接就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计1935字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)