导读:本期聚焦于小伙伴创作的《SQL中And和Where使用提示是什么?用+进行左关联有哪些注意事项?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《SQL中And和Where使用提示是什么?用+进行左关联有哪些注意事项?》有用,将其分享出去将是对创作者最好的鼓励。

SQL查询中And和Where的使用逻辑以及用加号实现左关联的方式,是很多开发者在编写复杂查询时容易混淆的知识点,不同的写法会直接影响查询结果的正确性。

SQL中And和Where使用提示是什么?用+进行左关联有哪些注意事项?

And和Where的使用提示

基础作用差异

Where是SQL查询中的条件过滤子句,用于对查询结果集进行整体过滤,作用于整个查询的最终输出结果,不符合Where条件的记录会被直接排除在结果集之外。

And是逻辑运算符,用于连接多个条件,既可以出现在Where子句中连接过滤条件,也可以出现在表关联(如left join、right join)的on子句中,连接关联条件。

不同场景下的使用建议

当需要在关联时就过滤从表数据时,应该把条件放在on子句中用And连接,这样不会影响主表的记录输出;当需要在关联完成后过滤整个结果集时,应该把条件放在Where子句中。

下面通过一个内连接的示例展示And在Where中的使用:

-- 查询年龄大于18且城市为北京的用户
SELECT u.id, u.name, u.age, u.city
FROM user u
WHERE u.age > 18 AND u.city = '北京';

如果是左关联场景,主表条件放在Where中,从表条件放在on的And中,示例代码如下:

-- 左关联查询所有用户及其订单,只关联未支付的订单
SELECT u.id, u.name, o.order_id, o.pay_status
FROM user u
LEFT JOIN order o ON u.id = o.user_id AND o.pay_status = 0;

用+进行左关联的提示及注意事项

基本语法说明

用加号实现左关联是Oracle数据库特有的关联语法,不属于SQL标准语法,其他主流数据库如MySQL、PostgreSQL等不支持这种写法。左关联的核心逻辑是保留左表(主表)的所有记录,右表(从表)没有匹配的记录时对应字段显示为null。

语法规则是:在关联条件的从表字段后加(+),表示这个字段允许为空,对应左关联的右表侧。

具体注意事项

  • 加号只能出现在关联条件中,不能出现在Where子句的条件里,否则会报错或者得到不符合预期的结果。
  • 如果关联条件有多个,每个从表字段后都需要加(+),不能只加其中一个,否则关联逻辑会出错。
  • 左关联时加号要加在右表的关联字段后,右关联时加号要加在左表的关联字段后,不能放反位置。
  • 这种写法只能实现左关联和右关联,无法实现全外关联,全外关联需要用full outer join语法。

下面是使用+实现左关联的完整示例代码:

-- 查询所有用户及其订单信息,保留没有订单的用户
SELECT u.id, u.name, o.order_id, o.order_amount
FROM user u, order o
WHERE u.id = o.user_id(+);

如果关联条件有两个,正确的写法如下:

-- 多条件左关联,同时匹配用户id和订单状态
SELECT u.id, u.name, o.order_id, o.order_amount
FROM user u, order o
WHERE u.id = o.user_id(+) AND o.pay_status(+) = 1;

和标准左关联语法的对比

标准SQL的左关联语法是left join,可读性和通用性都更好,建议优先使用标准语法,只有在维护老旧的Oracle项目时再使用+的写法。两者的结果是一致的,示例如下:

-- 标准左关联写法,和上面的+写法结果一致
SELECT u.id, u.name, o.order_id, o.order_amount
FROM user u
LEFT JOIN order o ON u.id = o.user_id;

常见错误案例

很多开发者会把从表的条件放在Where子句中,导致左关联失效,示例如下:

-- 错误写法:把从表条件放在Where中,左关联会失效,没有订单的用户会被过滤掉
SELECT u.id, u.name, o.order_id, o.order_amount
FROM user u, order o
WHERE u.id = o.user_id(+) AND o.pay_status = 1;

正确的写法应该把从表条件放在关联条件中:

-- 正确写法:从表条件放在on等效的位置,用And连接
SELECT u.id, u.name, o.order_id, o.order_amount
FROM user u, order o
WHERE u.id = o.user_id(+) AND o.pay_status(+) = 1;

SQLAndWhere左关联加号关联修改时间:2026-07-15 18:18:29

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。