前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL 查询条件放到 JOIN 子句与 WHERE 子句的差别

SQL 查询条件放到 JOIN 子句与 WHERE 子句的差别

作者头像
Denis
发布2023-04-14 11:22:42
2.3K0
发布2023-04-14 11:22:42
举报
文章被收录于专栏:WordPress果酱WordPress果酱

我们再写 SQL 的时候,最常碰到一个问题就是,把查询条件放到 JOIN 子句和放到 WHERE 子句有什么不同呢?比如:

查询条件放到 JOIN 语句

代码语言:javascript
复制
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts JOIN wp_skus sku ON sku.post_id = wp_posts.ID AND sku.type=1 WHERE 1=1 AND wp_posts.post_type = 'product' AND wp_posts.post_status = 'publish' ORDER BY sku.price DESC, wp_posts.post_date DESC LIMIT 0, 10

查询条件放到 WHERE 语句

代码语言:javascript
复制
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts JOIN wp_skus sku ON sku.post_id = wp_posts.ID WHERE 1=1 AND wp_posts.post_type = 'product' AND wp_posts.post_status = 'publish' AND sku.type=1 ORDER BY sku.price DESC, wp_posts.post_date DESC LIMIT 0, 10

结果分两种情况:

INNER JOIN:简单说如果使用的是 INNER JOIN,这两种查询的结果相同。但是语义上:JOIN - 描述两个表之间的关系WHERE - 从结果集中删除行。这两种方法直接存在显著的语义上的差别,尽管两种方法对结果和性能都无影响,但是选择正确的语法将有助于代码更易于被阅读。

OUTER JOIN:如果使用的是 OUTER JOIN,可能会不同,比如上面的 SQL 改成 LEFT JOIN,并且连接条件失败,则查询条件放到 JOIN 子句仍将获得一行,但是如果放到 WHERE 子句,则它将被过滤掉,因为 NULL 不等于 1

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档