MySQL中條件放在where後面與放在on後面的區別

假設有兩種表:test_on_position表和address表,address表存放地址,test_on_position存放會員及其經常使用的地址,數據以下:3d

address表:code

test_on_position表:blog

1. left join

條件在where後面

SELECT
    *
FROM
    test_on_position
LEFT JOIN address ON test_on_position.address = address.id
WHERE
    test_on_position.address IS NOT NULL

運行結果:it

條件在on後面

SELECT
    *
FROM
    test_on_position
LEFT JOIN address ON test_on_position.address = address.id AND test_on_position.address IS NOT NULL

運行結果:io

結果分析

當條件放在on後面時,不管on條件的真假,都會返回左表的值;test

當條件放在where後面時,只有知足條件的記錄會返回。im

inner join

條件在on後面

SELECT
    *
FROM
    test_on_position
INNER JOIN address ON test_on_position.address = address.id AND test_on_position.address IS NOT NULL

運行結果:d3

條件在where後面

SELECT
    *
FROM
    test_on_position
INNER JOIN address ON test_on_position.address = address.id
WHERE
    test_on_position.address IS NOT NULL

運行結果:數據

結果分析

不管條件放在哪裏,都只會返回知足條件的結果。db

相關文章
相關標籤/搜索