msyql jion 和 union 的區別

jiaohonggang發表於2020-12-02
  • join(連線查詢):是將兩個查詢(或表)的每一行,以“兩兩橫同對接”的方式,
    所得到的所有行的結果,即一個表中的某行,跟另一個表中的某行。
    進行“橫向對接”,得到一個新行。

  • union (聯合查詢):指將2個或2個以上的欄位數量相同的查詢結果,“縱向堆疊”後合併為一個結果。

  • 測試資料

mysql> select * from test;
+----+--------+------+------+
| id | name   | sex  | age  |
+----+--------+------+------+
|  1 | name1  | 女   |   15 |
|  2 | name1  | 女   |   15 |
|  4 | name2  | 男   |   30 |
|  5 | name50 | 男   |   12 |
+----+--------+------+------+

mysql> select * from user;
±—±------±-----+
| id | name | age |
±—±------±-----+
| 1 | name1 | 18 |
| 2 | name2 | 15 |
| 3 | name3 | 20 |
| 4 | name4 | 30 |
±—±------±-----+

  • 查詢資料的結果區別:

    join(連線查詢):橫向拼接查詢結果的資料。

    mysql> select * from test left join user on test.name=user.name;
    +----+--------+------+------+------+-------+------+
    | id | name   | sex  | age  | id   | name  | age  |
    +----+--------+------+------+------+-------+------+
    |  1 | name1  | 女   |   15 |    1 | name1 |   18 |
    |  2 | name1  | 女   |   15 |    1 | name1 |   18 |
    |  4 | name2  | 男   |   30 |    2 | name2 |   15 |
    |  5 | name50 | 男   |   12 | NULL | NULL  | NULL |
    +----+--------+------+------+------+-------+------+
    
       

    union (聯合查詢):縱向拼接查詢結果的資料。

    mysql> select id, name, age from test union select id, name, age from user;
    +----+--------+------+
    | id | name   | age  |
    +----+--------+------+
    |  1 | name1  |   15 |
    |  2 | name1  |   15 |
    |  4 | name2  |   30 |
    |  5 | name50 |   12 |
    |  1 | name1  |   18 |
    |  2 | name2  |   15 |
    |  3 | name3  |   20 |
    |  4 | name4  |   30 |
    +----+--------+------+
    
       

相關文章