You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

隐式内连接多WHERE条件工作原理及查询结果异常解析

关于隐式内连接的疑问与解析

显式与隐式内连接基础

显式内连接(Explicit Inner join)需指定两张表的关联列,仅返回这些列值匹配的记录,示例代码如下:

SELECT Customers.customer_id, Customers.name, Orders.amount
FROM Customers
INNER JOIN Orders
ON Customers.customer_id = Orders.customer_id
WHERE Orders.amount >= 200;

而隐式内连接(Implicit Inner join)仅通过WHERE子句指定匹配条件。我想了解多条件下隐式内连接的工作机制,以及条件顺序是否会影响结果?

测试表结构

我有如下两张表:

表1:Customers

customer_idnameage
1John25
2Marry22

表2:Orders

order_idamountcustomer_id
11001
22005

Orders表的customer_id字段存储Customers表的customer_id值,但该字段未设置外键约束。其中Orders表的customer_id=5在Customers表中不存在。

异常查询结果分析

我运行以下查询:
查询语句:

SELECT Customers.customer_id, Orders.customer_id, Customers.name, Orders.amount
FROM Customers, Orders
WHERE Customers.customer_id = Orders.customer_id
AND Orders.amount >= 200;

查询结果:

Customers.customer_idOrders.customer_idCustomers.nameOrders.amount
(null)5(null)200

结果返回了Orders表的全部字段数据,Customers表字段数据为null,但内连接理论上应仅返回两张表匹配的记录,这让我产生了困惑。

更新说明

我发现之前的查询语句中WHERE子句右侧有**(+)**符号,我之前误以为无用而忽略了,现在了解到该符号代表RIGHT OUTER join,此时查询结果就合理了。完整查询语句如下:

SELECT Customers.customer_id, Orders.customer_id, Customers.name, Orders.amount
FROM Customers, Orders
WHERE Customers.customer_id = Orders.customer_id (+)
AND Orders.amount >= 200;

感谢StackOverflow社区的帮助!

内容的提问来源于stack exchange,提问作者Arpit Jain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 00:15:04