您好,登錄后才能下訂單哦!
這篇“mysql中的join和where優先級順序是什么”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“mysql中的join和where優先級順序是什么”文章吧。
join功能
inner join(內連接,或等值連接) : 獲取兩個表中字段匹配關系的記錄。
left join (左連接) : 獲取左表所有記錄,即使右表沒有對應匹配的記錄。
right join (右連接) : 與 LEFT JOIN 相反,用于獲取右表所有記錄,即使左表沒有對應匹配的記錄。
where
where 是 mysql 語句的查詢條件
表 a1
x | y |
---|---|
1 | 10 |
2 | 20 |
3 | 30 |
表 a2
x | y |
---|---|
10 | 100 |
20 | 200 |
20 | 300 |
create table if not exists `a1`( `x` int(10), `y` int(10) ); create table if not exists `a2`( `y` int(10), `z` int(10) )
正常左連接
select * from a1 left join a2 on a1.y = a2.y;
x | y | y | z |
---|---|---|---|
1 | 10 | 10 | 100 |
2 | 20 | 20 | 200 |
2 | 20 | 20 | 300 |
3 | 30 | NULL | NULL |
左連情況下, 由于左邊a1.y = 30在右表無數據所以右表數據 (y,z)為 NULL
左連 on && and
select * from a1 left join a2 on a1.y = a2.y and a2.y = 10;
x | y | y | z |
---|---|---|---|
1 | 10 | 10 | 100 |
2 | 20 | NULL | NULL |
3 | 30 | NULL | NULL |
由于是左連, 所以判斷 (a1.y = a2.y && a2.y = 10) 只能篩選出(10, 100)與左邊匹配, 所以后面均為 NULL.
即實際優先級是
select * from (a1 left join a2 on a1.y = a2.y and a2.y = 10)
左連 on && where
select * from a1 left join a2 on a1.y = a2.y where a2.y = 10;
x | y | y | z |
---|---|---|---|
1 | 10 | 10 | 100 |
只有一條數據, 因此可判斷其優先級為
select * from (a1 left join a2 on a1.y = a2.y) where a2.y = 10
也就是說 會先左連生成臨時表, 然后再在整體表上進行 where 查詢.
以上就是關于“mysql中的join和where優先級順序是什么”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。