Oracle SQL:如何查询Orders表所有ID,含Names表无匹配的记录
解决Orders表全量关联Names表的SQL写法
这问题太常见啦!你之前用WHERE ORDERS.ID = NAMES.ID的写法其实是**内连接(INNER JOIN)**的逻辑,它只会返回两张表中ID匹配的记录,所以Orders里ID为3的那条自然查不出来。
要实现保留Orders所有记录、无匹配时Name显示null的需求,你需要用左外连接(LEFT JOIN),它的核心就是优先保留左表(Orders)的所有数据,右表(Names)有匹配就关联对应字段,没匹配的字段自动填充为null。
正确的SQL代码
SELECT Orders.ID, Names.Name FROM Orders LEFT JOIN Names ON Orders.ID = Names.ID;
效果验证
按照你给出的示例数据:
- Orders表记录:ID=1、ID=2、ID=3
- Names表记录:ID=1(对应Name)、ID=2(对应Name)
执行上面的SQL后,返回结果会是:
| ID | Name |
|---|---|
| 1 | [对应Name] |
| 2 | [对应Name] |
| 3 | NULL |
完全符合你要的“包含所有Orders表ID,无匹配则Name为null”的要求。
内容的提问来源于stack exchange,提问作者Dorgao
相关产品推荐
相关产品推荐

