SQL语句各种JOIN的区别

本文详细介绍了SQL中的四种连接类型:内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)及全连接(FULL JOIN)。通过具体的数据库表数据和查询结果展示了不同连接方式的特点和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库中的原表

---------------------------------------------------------------------

Persons表:

P_Id

name

address

1

张三丰

光明顶45号

2

李四光

中华路112号

3

王五龙

南京路8号

 

Orders表:

O_id

order_no

P_id

1

1111

3

2

1122

3

3

1134

1

4

1177

1

5

1200

5

 

 

内连接INNERJOIN(或者JOIN

---------------------------------------------------------------------

两个表中只有都满足条件的才显示,显示最少:

SELECT Persons.name, Orders.order_no FROMPersons INNER JOIN Orders ON Persons.P_id=Orders.P_id ORDER BY Orders.order_no

结果集:

name

order_no

王五龙

1111

王五龙

1122

张三丰

1134

张三丰

1177

 

 

左连接LEFTJOIN(或者LEFT OUTER JOIN

---------------------------------------------------------------------

左表中无论有没满足条件的都全显示,右表只有满足条件的才显示:

SELECT Persons.name, Orders.order_no FROMPersons LEFT JOIN Orders ON Persons.P_id=Orders.P_id ORDER BY Orders.order_no

结果集:

name

order_no

王五龙

1111

王五龙

1122

张三丰

1134

张三丰

1177

李四光

 

 

 

右连接RIGHTJOIN(或者RIGHT OUTER JOIN

---------------------------------------------------------------------

右表中无论有没满足条件的都全显示,左表只有满足条件的才显示:

SELECT Persons.name, Orders.order_no FROMPersons RIGHT JOIN Orders ON Persons.P_id=Orders.P_id ORDER BY Orders.order_no

结果集:

name

order_no

王五龙

1111

王五龙

1122

张三丰

1134

张三丰

1177

 

1200

 

 

全连接FULLJOIN(或者FULL OUTER JOIN

---------------------------------------------------------------------

两个表中只要有满足条件的都全显示,显示最多:

SELECT Persons.name, Orders.order_no FROMPersons FULL JOIN Orders ON Persons.P_id=Orders.P_id ORDER BY Orders.order_no

结果集:

name

order_no

王五龙

1111

王五龙

1122

张三丰

1134

张三丰

1177

 

1200

李四光

 

 

 

### SQL JOIN与INNER JOIN区别 #### INNER JOIN的特点 INNER JOIN属于JOIN的一种特定形式,仅返回两个表中满足连接条件的匹配行。这意味着如果左表或右表中有不匹配的数据,则这些记录不会出现在最终的结果集中[^1]。 ```sql SELECT * FROM tableA a INNER JOIN tableB b ON a.id = b.foreign_id; ``` 此查询会获取`tableA`和`tableB`里依据字段`id`相等的所有组合;只有当两边都有对应项时才会被选出。 #### 一般JOIN的概念拓展 实际上,“JOIN”本身是一个更广泛的概念,在不同的上下文中可以指代多种类型的联接方式,比如LEFT JOIN, RIGHT JOIN以及FULL OUTER JOIN等等。而INNER JOIN则是其中一种具体的实现方式[^2]。 对于未指定具体类型的JOIN,默认情况下很多SQL方言将其视为INNER JOIN处理。然而为了提高代码可读性和避免歧义,建议总是显式声明所需的JOIN种类[^3]。 #### 实际应用对比 考虑如下场景:有两个表格分别存储订单信息(`orders`)和客户资料(`customers`),现在要找出所有已下单客户的姓名及其对应的订单编号。 采用INNER JOIN的方式编写SQL语句: ```sql SELECT c.name AS customer_name, o.order_number FROM customers c INNER JOIN orders o ON c.customer_id = o.customer_id; ``` 这段脚本只会列出那些既存在于顾客列表又确实下了单的人的信息——即只显示有实际交易记录的情况下的客户名与订单号配对结果[^4]。 相比之下,如果不加限定地使用JOIN(假设其行为同于INNER JOIN),则效果相同。但是为了避免误解并增强意图表达清晰度,推荐还是应该写出全称来表明确切含义[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值