数据库表的连接查询

数据库中表的连接类型:
交叉联接,内联接,外联接
应用场景:
(复制用 交叉联接cross join
不满足特定条件 -->外联接
满足特定条件–> 内联接)

交叉联接只有一个步骤–笛卡尔积(Cartesian Product)
内联接有连个步骤–笛卡尔积、过滤
外连接有三个步骤–笛卡尔积、过滤、添加外部行
从外联接保留表的角度来看,可以认为外联接结果中的数据行包括两种:内部行和外部行。
内部行是按照on子句中的条件能在联接的另一边找到匹配的那些行;
而外部行则是指找不到匹配的那些行。
内联接只返回内部行,而外联接同时返回内部行和外部行。
(补充一句:where过滤条件是在外部行被添加后才被应用的,而且是最终的;
on 的过滤条件只是用于决定是否匹配)

1.交叉联接(笛卡尔积)
在逻辑上,交叉联接是一种最简单的联接。
交叉联接只实现一个逻辑查询步骤(笛卡尔积)。
其实就是将一个输入表的每行与另一个表的所有行进行匹配。
如果一个表有m行,另一个表有n行,将得到m x n行的结果集。

交叉联接生成的结果集是一个虚拟表,表中各列直接源于参与联接的两个表。

交叉联接的两种形式:
第一种(显示)
select C.custid,E.empid
from sales.customer as C
cross join HR.Employee AS E
或者
第二种(隐式)
select C.custid,E.empid
from sales.customer as C,HR.Employee AS E;

交叉联接后面跟的条件只能是where,不能用on。
2.内连接
使用比较运算符(包括=、>、<、<>、>=、<=、!>和!<)进行表间的比较操作,查询与连接条件相匹配的数据。

1)等值连接(隐式内连接)
不使用inner join,而是使用where.
联接条件只包含等号运算符。
select col_list from table1, table2 where table1.col=table2.col

2)自然连接 (显示内连接)
需要用到关键字inner join(inner 可以省略),因为内连接是默认的连接方式。
select col_list from table1[inner] join table2 on table1.col=table2.col

等值连接和自然连接的关系
自然连接是一种特殊的等值连接,它要求两个关系中进行比较的属性必须是相同的属性组,并且再结果中把重复的属性列去掉

  • 等值连接是要求有相等的属性,但不一定是公共属性;而自然连接要求相等的属性必须是公共属性。
  • 等值连接不把重复的属性除去,而自然连接要把重复的属性去掉。
  • 自然连接一定是等值连接,但等值连接不一定是自然连接。

3)不等连接
在连接条件中使用除等于号之外运算符(>、<、<>、>=、<=、!>和!<)
select col_list from table1[inner] join table2 on table1.col<>table2.col

3.外联接
left join,right join,full join
此外还有一些:
自联接
对同一个表的多个实例也可以进行联接,这种功能就是所谓的自联接(self-join),所有的基本联接类型都支持自联接。
select C.custid,E.empid
from sales.customer as C
join sales.customer as E
On c.custid=e.custid;

组合联接
联接条件涉及联接两边的多个列的查询。
select distinct Customers.custid,companyname
from sales.Customers
left join sales.Orders
on Customers.custid=Orders.custid
and customers.city=orders.city;

多表联接
一个联接运算符只对两个表进行操作,而一条查询语句可以包含多个连接。
通常,from子句中包含多个表运算符时,表运算符在逻辑上是按从左到右的顺序处理的。
可以理解是,第一个运算符的结果表将作为第二个表运算符的输入。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值