Mysql 連接的使用



JOIN 按照功能大致分爲如下三類:

        A INNER JOIN B on 條件(內連接,或等值連接):獲取兩個表中字段匹配關係的記錄。

        A LEFT JOIN B on條件(左連接):獲取左表所有記錄,即使右表沒有對應匹配的記錄。

        A RIGHT JOIN B on 條件(右連接): 與 LEFT JOIN 相反,用於獲取右表所有記錄,即使左表沒有對應匹配的記錄。      

內連接查詢

INNER JOIN子句的語法如下:

SELECT column_list
FROM t1
INNER JOIN t2 ON join_condition1
INNER JOIN t3 ON join_condition2
...
WHERE where_conditions;

        MySQL INNER JOIN支持使用等於以外的運算符,但是也可以使用大於(>),小於(<)和不等於(<>)運算符的其他運算符來形成連接謂詞。

實例:

#兩張表的數據如下:

mysql> select * from girl;
+-----+--------+
| hid | bname  |
+-----+--------+
|   3 | 默默   |
|   2 | 羞羞   |
|   5 | 海燕   |
+-----+--------+
3 rows in set (0.00 sec)

mysql> select * from boy;
+-----+--------+
| hid | bname  |
+-----+--------+
|   1 | lisi   |
|   2 | 王五   |
|   3 | 趙六   |
+-----+--------+
3 rows in set (0.00 sec)

#查詢boy表和girl表中hid想同的bname。

mysql> select boy.hid,boy.bname,girl.hid,girl.bname 
    -> from
    -> boy inner join girl on boy.hid=girl.hid;
+-----+--------+-----+--------+
| hid | bname  | hid | bname  |
+-----+--------+-----+--------+
|   3 | 趙六   |   3 | 默默   |
|   2 | 王五   |   2 | 羞羞   |
+-----+--------+-----+--------+
2 rows in set (0.01 sec)


#查詢boy和girl表中數據,boy.hid=3的行.

mysql> select boy.hid,boy.bname,girl.hid,girl.bname from boy inner join girl on boy.hid=girl.hid where boy.hid=3;
+-----+--------+-----+--------+
| hid | bname  | hid | bname  |
+-----+--------+-----+--------+
|   3 | 趙六   |   3 | 默默   |
+-----+--------+-----+--------+
1 row in set (0.00 sec)

#查詢boy和girl表中數據,”boy.hid=girl.hid=3“的行.

mysql> select boy.hid,boy.bname,girl.hid,girl.bname from boy inner join girl on boy.hid=girl.hid where boy.hid and girl.hid=3;
+-----+--------+-----+--------+
| hid | bname  | hid | bname  |
+-----+--------+-----+--------+
|   3 | 趙六   |   3 | 默默   |
+-----+--------+-----+--------+
1 row in set (0.00 sec)

注意:在匹配階段 WHERE 子句的條件都不會被使用.僅在匹配階段完成以後,WHERE 子句條件纔會被使用。它將從匹配階段產生的數據中檢索過濾.


左連接查詢

    MySQL left join 與 join 有所不同,MySQL LEFT JOIN 會讀取左邊數據表的全部數據,即便右邊表無對應數據.

實例:

#以左表所有的數據爲準,查詢右表所有的數據,匹配不到以"null"代替。

mysql> select boy.hid,boy.bname,girl.hid,girl.bname  from boy left join girl on boy.hid=girl.hid;
+-----+--------+------+--------+
| hid | bname  | hid  | bname  |
+-----+--------+------+--------+
|   3 | 趙六   |    3 | 默默   |
|   2 | 王五   |    2 | 羞羞   |
|   1 | lisi   | NULL | NULL   |
+-----+--------+------+--------+
3 rows in set (0.00 sec)

注意:如果 B 表中沒有任何一行數據匹配 ON 的條件,將會額外生成一行所有列爲 NULL 的數據。


右連接查詢

    MySQL RIGHT JOIN 會讀取右邊數據表的全部數據,即便左邊邊表無對應數據。

mysql> select boy.hid,boy.bname,girl.hid,girl.bname  from boy right join girl on boy.hid=girl.hid;
+------+--------+-----+--------+
| hid  | bname  | hid | bname  |
+------+--------+-----+--------+
|    2 | 王五   |   2 | 羞羞   |
|    3 | 趙六   |   3 | 默默   |
| NULL | NULL   |   5 | 海燕   |
+------+--------+-----+--------+
3 rows in set (0.00 sec)

三種連接的區別:

1.png2.png3.png



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章