数据库的各种表连接操作

数据库的各种表连接操作

1、内连接——INNER JOIN

inner join主要是获取两个或多个表的交集,只返回匹配的行;多张表之间没有主表附表之分。

--规范写法
select column_list 
from table1 t1
inner join table2 t2 on t1.column_name = t2.column_name

--常用写法1
select column_list 
from table1 t1
join table2 t2 on t1.column_name = t2.column_name

--常用写法2
select column_list 
from table1 t1, table2 t2
where t1.column_name = t2.column_name

2、左外部连接——LEFT JOIN

left join以左表为主表,右表为附表,返回左表的全部行和右表满足on条件的行;

如果左表的行在右表中没有匹配,那么这一行右表中对应数据用NULL代替;

可以是一主一附(一个左表,一个右表),也可以是一主多附(一个左表,多个右表)。

--规范写法
select column_list 
from table1 t1
left join table2 t2 on t1.column_name = t2.column_name

--常用写法
select column_list 
from table1 t1
left outer join table2 t2 on t1.column_name = t2.column_name

3、右外部连接——RIGHT JOIN

right join以右表为主表,左表为附表,返回右表的全部行和左表满足on条件的行;

如果右表的行在左表中没有匹配,那么这一行左表中的对应数据用NULL代替。

--规范写法
select column_list 
from table1 t1
right join table2 t2 on t1.column_name = t2.column_name

--常用写法
select column_list 
from table1 t1
right outer join table2 t2 on t1.column_name = t2.column_name

4、全连接——FULL JOIN

full join 会从左表和右表返回符合条件的所有行;

只要左表(table 1)和右表(table 2)其中一个表中存在匹配,就返回结果;

如果其中一个表的数据行在另一个表中没有匹配的行,那么对面的数据用NULL代替;

FULL JOIN 结合了 LEFT JOIN 和 RIGHT JOIN 的结果;

SQLServer 和Oracle支持FULL JOIN;

MySQL不支持FULL JOIN,可以使用LEFT JOIN + UNION + RIGHT JOIN来达到效果

--规范写法
select column_list 
from table1 t1
full join table2 t2 on t1.column_name = t2.column_name

--规范写法
select column_list 
from table1 t1
full outer join table2 t2 on t1.column_name = t2.column_name

5、交叉连接——CROSS JOIN

FULL JOIN 返回左表中的所有行,左表中的每一行与右表中的所有行组合;

交叉联接也称作笛卡尔积;

如果table 1有5行记录,table 2有6行记录,交叉连接结果为5*6=30条记录;

--规范写法
select column_list 
from table1 t1
cross join table2 t2

--根据on条件来过滤
select column_list 
from table1 t1
cross join table2 t2 on t1.column_name = t2.column_name

6、自然连接——NATURAL JOIN

NATURAL JOIN 等同于INNER JOIN或INNER USING 匹配两个表中相同名称的列;

具有相同名称的关联表的列将仅出现一次;

关联的表具有一对或多对相同名称的列,这些列必须是相同的数据类型;

不要在自然连接中使用ON子句;

--规范写法
select column_list 
from table1 t1
natural join table2 t2

7、自连接——SELF JOIN

SELF JOIN 是表与自身联接(一元关系)的连接,特别是当表具有引用其自身主键的外键时;

连接表本身意味着表的每一行都与自身以及表的其他每一行结合在一起;

自连接可以看作是同一表的两个副本的连接;

--规范写法
select column_list 
from table t1, table t2
where t1.column_name = t2.column_name

select column_list 
from table t1
inner join table t2 on t1.column_name = t2.column_name

8、联合查询

UNION 操作符用于合并两个或多个 SELECT 语句的结果集;

UNION 内部的每个 SELECT 语句必须拥有相同数量的列,相似的数据类型,相同的列顺序;

--union默认选取不同的值
select column_list
from table1 
union select column_list from table2

--union all允许选取重复的值
select column_list
from table1
union all select column_list from table2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仲夏夜茫七月未央

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值