前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库系列 | left join加上where条件咋了?

数据库系列 | left join加上where条件咋了?

作者头像
Tinywan
发布2023-03-08 20:15:48
6830
发布2023-03-08 20:15:48
举报
文章被收录于专栏:开源技术小栈开源技术小栈

1SQL语句:left join后面加上where条件

数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户

2SQL LEFT JOIN 关键字

LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。

3LEFT JOIN 关键字语法

代码语言:javascript
复制
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2 
ON table_name1.column_name=table_name2.column_name

**注释:**在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN。

4原始的表

"sql_person" 表:

id

username

address

city

1

Apple

Oxford Street

London

2

Google

Fifth Avenue

New York

3

Huawei

China Beijing

Beijing

"sql_order" 表:

id

order_no

person_id

status

1

77895

1

1

2

87895

2

0

3

97895

98

1

4

107895

2

1

5左连接(LEFT JOIN)实例

现在,我们希望列出所有的人,以及他们的定购 - 如果有的话,您可以使用下面的 SELECT 语句:

1、使用where 条件查询

sql 查询语句

代码语言:javascript
复制
SELECT
 sql_person.username,
 sql_person.city,
 sql_order.order_no,
 sql_order.status 
FROM
 sql_person
 LEFT JOIN sql_order ON sql_person.id = sql_order.person_id 
WHERE
 sql_order.`status` = 1
ORDER BY
 sql_order.order_no.id

以上SQL执行过程:

(1)中间表 on 条件:sql_person.id = sql_order.person_id 查询中间的临时表记录

username

city

order_no

status

Huawei

Beijing

(null)

(null)

Google

New York

107895

1

Apple

New York

77895

1

Google

London

87895

0

LEFT JOIN 关键字会从左表 (sql_person) 那里返回所有的行,即使在右表 (sql_order) 中没有匹配的行。

(2)再对中间表过滤 where 条件:sql_order.status = 1

username

city

order_no

status

Google

New York

107895

1

Apple

London

77895

1

(2)不使用where 条件查询

sql 查询语句

代码语言:javascript
复制
SELECT
 sql_person.username,
 sql_person.city,
 sql_order.order_no,
 sql_order.status 
FROM
 sql_person
 LEFT JOIN sql_order ON ( sql_person.id = sql_order.person_id AND sql_order.status = 1 ) 
ORDER BY
 sql_order.order_no

(1)中间表 on 条件:sql_person.id = sql_order.person_id AND sql_order.status = 1 查询中间的临时表记录

username

city

order_no

status

Huawei

Beijing

(null)

(null)

Google

New York

107895

1

Apple

London

77895

1

注意:条件不为真也会返回左表中的记录。

6小结

  • 数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。
  • where条件是在临时表生成好后,再对临时表进行过滤的条件
  • where 条件加上,已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉
  • 过滤条件放在 where后面: 是先连接然生成临时查询结果,然后再筛选
  • 过滤条件放在 on后面: 先根据条件过滤筛选,再连,生成临时查询结果
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-09-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1SQL语句:left join后面加上where条件
  • 2SQL LEFT JOIN 关键字
  • 3LEFT JOIN 关键字语法
  • 4原始的表
    • "sql_person" 表:
      • "sql_order" 表:
      • 5左连接(LEFT JOIN)实例
        • 1、使用where 条件查询
          • (2)不使用where 条件查询
          • 6小结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档