左链接 右链接

本文详细解释了SQL中的不同类型的连接操作,包括左外链接、右外链接、全链接和内链接。并通过实例展示了如何使用这些连接来获取部门表与员工表之间的不同组合数据。

为了学习Hibernate,我理解一下

 

left outer join 或者 left join 表示左外链接

 

right outer join 或者 right join 表示右外链接

 

full outer join 或者 full join 表示全链接

 

左外链接:在查询结果中包含join左侧表中的所有记录,以及join右侧表中匹配的记录.

(就是依据左侧表中的数据,查询右侧表中的数据)

 

右外链接:在查询结果中包含join右侧表中的所有记录,以及join左侧表中匹配的记录.

(就是依据右侧表中的数据,查询左侧表中的数据)

 

全链接:在查询结果中包含join两侧所以的匹配和不匹配的记录.

(也就是相当于left join union right join的结果)

 

inner join:在查询结果中仅返回符合on 条件的列

 

select * from department_table left join staff_table on department_table.department_id=staff_table.department_id//左链接


select * from department_table right join staff_table on department_table.department_id=staff_table.department_id//右链接


select * from department_table inner join staff_table on department_table.department_id=staff_table.department_id//内链接

 

 

select * from department_table full join staff_table//全链接
 
### 不同类型的 JOIN 介绍 #### 连接 (LEFT JOIN) 连接返回表中的所有记录,以及表中存在的匹配记录。如果表中不存在匹配,则结果集中相应的列包含 NULL。 ```sql SELECT * FROM table_left AS l LEFT JOIN table_right AS r ON l.id = r.left_id; ``` 此操作会保留侧表格 `table_left` 的全部行数,并尝试找到侧表格 `table_right` 中相匹配的项;当找不到对应关系时,在最终的结果集里来自边表的相关字段会被填充成NULL值[^1]。 #### 连接 (RIGHT JOIN) 连接正好相反于连接,它返回的是表所有的记录加上边存在的匹配记录。对于那些在表没有找到配对的情况,其对应的属性将被设置为空(NULL)。 ```sql SELECT * FROM table_left AS l RIGHT JOIN table_right AS r ON l.id = r.left_id; ``` 这里展示了如何利用SQL语句实现两个表之间的外联接,即优先显示`table_right`的所有条目并补充可能有的关联数据自`table_left`之中。 #### 内连接 (INNER JOIN) 内连接只选取两表间存在交集的部分作为输出,也就是说只有满足条件(通常是键值相同)才会出现在查询结果当中。 ```sql SELECT * FROM table_left AS l INNER JOIN table_right AS r ON l.id = r.left_id; ``` 上述例子说明了怎样执行一次内部链接,仅获取到共同拥有的部分——也就是两个集合重叠之处所代表的信息实体。 ### 实际案例分析 假设有一个订单(order)表客户(customer)表: | order_id | customer_id | | --- | --- | | 1 | 1 | | 2 | 2 | | customer_id | name | | --- | --- | | 1 | Alice | | 2 | Bob | | 3 | Charlie | - 使用 **INNER JOIN** 将得到如下结果: | order_id | customer_id | name | | --- | --- | --- | | 1 | 1 | Alice | | 2 | 2 | Bob | 这是因为查找出两者都具有的customer_ids(1 2),而忽略了不在此范围内的任何一方的数据。 - 如果采用 **LEFT JOIN**, 则可以获得这样的列表: | order_id | customer_id | name | | --- | --- | --- | | 1 | 1 | Alice | | 2 | 2 | Bob | 这表明即使某些顾客从未下单过也不会丢失这些客户的资料,因为是从订单表出发做扩展。 - 对应地,若是选择了 **RIGHT JOIN**, 输出将是: | order_id | customer_id | name | | --- | --- | --- | | 1 | 1 | Alice | | 2 | 2 | Bob | | NULL | 3 | Charlie | 这意味着即便有些顾客未曾有过购买行为,依然会在报表中体现出来,只是它们不会有关联的订单编号而已。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值