LEFT JOIN ON AND/WHERE
LEFT JOIN ON AND/WHERE
Question
这两个SQL查询的结果相同吗?
1 |
|
Test SQL
Creat Database
1 |
|
Creat Table
1 |
|
Creat Data
1 |
|
Query Result
1 |
|
TableAId | Code | Name | TableBId | AId | Code | Name |
---|---|---|---|---|---|---|
1 | A | A | 1 | 1 | C | C |
1 | A | A | 2 | 1 | D | D |
2 | B | B | 3 | 2 | E | E |
2 | B | B | 4 | 2 | D | D |
3 | C | C | NULL | NULL | NULL | NULL |
1 |
|
TableAId | Code | Name | TableBId | AId | Code | Name |
---|---|---|---|---|---|---|
1 | A | A | NULL | NULL | NULL | NULL |
2 | B | B | NULL | NULL | NULL | NULL |
3 | C | C | NULL | NULL | NULL | NULL |
1 |
|
TableAId | Code | Name | TableBId | AId | Code | Name |
---|---|---|---|---|---|---|
1 | A | A | 1 | 1 | C | C |
1 | A | A | 2 | 1 | D | D |
2 | B | B | NULL | NULL | NULL | NULL |
3 | C | C | NULL | NULL | NULL | NULL |
1 |
|
TableAId | Code | Name | TableBId | AId | Code | Name |
---|---|---|---|---|---|---|
1 | A | A | 1 | 1 | C | C |
1 | A | A | 2 | 1 | D | D |
2 | B | B | NULL | NULL | NULL | NULL |
3 | C | C | NULL | NULL | NULL | NULL |
1 |
|
TableAId | Code | Name | TableBId | AId | Code | Name |
---|---|---|---|---|---|---|
1 | A | A | 1 | 1 | C | C |
1 | A | A | 2 | 1 | D | D |
1 |
|
TableAId | Code | Name | TableBId | AId | Code | Name |
---|---|---|---|---|---|---|
1 | A | A | 1 | 1 | C | C |
1 | A | A | 2 | 1 | D | D |
ALL
Conclusion
连接多张表查询时会生成临时表,使用
LEFT JOIN
时
ON
是生成临时表的条件,不管ON的结果是否为真,都会返回左边表的所有数据AND
是在ON
的基础上进行过滤,但是仍会返回左边表的所有数据WHERE
是在临时表生成后,进行过滤,相当于对单表进行过滤
REF
LEFT JOIN ON AND/WHERE