left join on 后and 和 where 的区别

SQL左连接与筛选条件

SELECT * FROM student a LEFT JOIN sc b ON a.Sid = b.Sid AND a.Sname="赵雷"

结果:(left join 左连接,左表所有数据 拼接 右表符合on条件的数据。on后用and连接,‘a.Sid = b.Sid AND a.Sname="赵雷"’都作为on条件)


SELECT * FROM student a LEFT JOIN sc b ON a.Sid = b.Sid WHERE a.Sname="赵雷"

结果:(当on后用where连接,where作为筛选条件,筛选‘student a LEFT JOIN sc b ON a.Sid = b.Sid’的结果集)

### SQL中LEFT JOIN ONWHERE区别及用法比较 在SQL查询中,`LEFT JOIN ON` `WHERE` 是两种不同的语法结构,分别用于实现不同的功能。以下是两者的区别及用法的详细比较: #### 1. **LEFT JOIN ON 的作用** `LEFT JOIN ON` 用于将两个表进行连接,并返回左表中的所有记录以及右表中满足连接条件的匹配记录。如果右表中没有匹配的记录,则返回 NULL 值。其基本语法如下: ```sql SELECT columns FROM table1 LEFT JOIN table2 ON table1.column = table2.column; ``` 此语法确保即使右表中没有匹配的数据,左表的所有行也会被保留[^1]。 #### 2. **WHERE 的作用** `WHERE` 子句用于过滤查询结果,限制返回的行数。它通常用于指定条件以筛选数据。例如: ```sql SELECT columns FROM table1 WHERE condition; ``` 当 `WHERE` 子句与 `LEFT JOIN` 结合使用时,可能会改变查询结果的行为。具体来说,`WHERE` 条件会进一步过滤已经通过 `LEFT JOIN` 连接后的结果集[^2]。 #### 3. **LEFT JOIN ONWHERE 的结合使用** 当 `LEFT JOIN ON` `WHERE` 同时出现在一个查询中时,需要注意它们的作用范围顺序。例如: ```sql SELECT t1.id, t1.name, t2.value FROM table1 t1 LEFT JOIN table2 t2 ON t1.id = t2.id WHERE t2.value IS NOT NULL; ``` 在这个例子中,`LEFT JOIN` 确保了即使 `table2` 中没有匹配的记录,`table1` 的所有行仍然会被保留。然而,`WHERE t2.value IS NOT NULL` 的条件会过滤掉那些在 `table2` 中没有匹配值的行。因此,最终的结果可能与单独使用 `LEFT JOIN` 不同[^3]。 #### 4. **关键区别** - **数据保留**:`LEFT JOIN ON` 保证左表的所有行都会被包含在结果集中,即使右表中没有匹配的记录。而 `WHERE` 则会对整个结果集进行额外的过滤。 - **作用范围**:`LEFT JOIN ON` 的条件仅影响表之间的连接逻辑,而 `WHERE` 的条件则作用于整个查询结果。 - **性能影响**:`LEFT JOIN ON` 的条件会在连接阶段应用,而 `WHERE` 的条件会在连接完成后再进行过滤。这可能导致性能上的差异[^4]。 #### 示例代码 以下是一个具体的示例,展示两者的行为差异: ```sql -- 示例表 CREATE TABLE table1 (id INT, name VARCHAR(50)); CREATE TABLE table2 (id INT, value INT); INSERT INTO table1 (id, name) VALUES (1, 'A'), (2, 'B'), (3, 'C'); INSERT INTO table2 (id, value) VALUES (1, 10), (3, 30); -- 使用 LEFT JOIN ON SELECT t1.id, t1.name, t2.value FROM table1 t1 LEFT JOIN table2 t2 ON t1.id = t2.id; -- 输出: -- id | name | value -- 1 | A | 10 -- 2 | B | NULL -- 3 | C | 30 -- 使用 LEFT JOIN ON + WHERE SELECT t1.id, t1.name, t2.value FROM table1 t1 LEFT JOIN table2 t2 ON t1.id = t2.id WHERE t2.value IS NOT NULL; -- 输出: -- id | name | value -- 1 | A | 10 -- 3 | C | 30 ``` #### 总结 `LEFT JOIN ON` `WHERE` 在 SQL 查询中有不同的用途行为。正确理解它们的作用范围顺序对于编写高效的查询语句至关重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值