這里使用左連接為例子,對於左連接是將左邊表的數據顯示,右邊表中如果沒有對應的數據則使用null填充。
game表:
game_type表:
SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id
這里的語句得到的內容:
這里我們如果想將沒有游戲類型的游戲信息去掉:
SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id where t.type_name!=''
也可以這樣:
SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id where not ISNULL(t.type_name)
上面兩條語句得到的結果是一樣的,事實上准確點來說是應該使用第二條,因為如果在game表中的游戲5記錄對應的type_id是一個沒有type_name的類型,如下圖:
game表:
game_type表:
使用語句:SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id where t.type_name!=''得到的結果:
但是游戲5是有游戲類型的,只是游戲類型為空。所以這時候使用下面語句得到的結果才是正確的:
SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id where not ISNULL(t.type_name)
這里我們將game表中的游戲5記錄對應的type_id記錄設置為0,那么使用:
SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id
得到的內容:
假如這里我們想將游戲5的記錄篩選出來,就是篩選游戲表中沒有對應的游戲類型記錄:
因為剛剛我們使用語句:SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id where t.type_name!=''
可以將游戲5篩選掉,那么這里如果我們設置成下面這樣:
SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id where t.type_name=''
結果不能游戲5給篩選出來,這時候需要的是:
SELECT g.name,g.type_id,t.type_id,t.type_name FROM game g LEFT JOIN game_type t ON t.type_id=g.type_id where ISNULL(t.type_name)