鍍金池/ 問答/數(shù)據(jù)庫/ mysql 兩個(gè)表通過他們倆的兩個(gè)字段來做左連接是這樣寫嗎

mysql 兩個(gè)表通過他們倆的兩個(gè)字段來做左連接是這樣寫嗎

select * from t1 left join t2 on (t1.a = t2.a and t1.b = t2.b) ;

回答
編輯回答
負(fù)我心

是。。。這種問題要學(xué)會(huì)使用搜索引擎。。。

2018年8月23日 17:58
編輯回答
枕頭人

是的。
舉個(gè)栗子,表 t1 (b=10 * a)和 t2(b=100 * a) 數(shù)據(jù)如下,但是 t2 多一列且第一列為 10:

mysql> select * from t1;
+----+------+------+
| id | a    | b    |
+----+------+------+
|  1 |    1 |   10 |
|  2 |    2 |   20 |
+----+------+------+

mysql> select * from t2;
+----+------+------+
| id | a    | b    |
+----+------+------+
|  1 |    1 |   10 |
|  2 |    2 |  200 |
|  3 |    3 |  300 |
+----+------+------+
  • 對(duì)于 t1 到 t2 左連接
    可以看出左連接是從左表 t1 的角度出發(fā),盡量到右表 t2 中滿足匹配條件 t1.a = t2.a and t1.b = t2.b 的列。如果有,就列在結(jié)果集中,如果沒有則默認(rèn)為 NULL

    mysql> select * from t1 left join t2 on (t1.a = t2.a and t1.b = t2.b);
    +----+------+------+------+------+------+
    | id | a    | b    | id   | a    | b    |
    +----+------+------+------+------+------+
    |  1 |    1 |   10 |    1 |    1 |   10 |
    |  2 |    2 |   20 | NULL | NULL | NULL |
    +----+------+------+------+------+------+
  • 對(duì)于 t1 到 t2 右連接
    可以看出是從右表 t2 的角度出發(fā),盡量到左表 t1 中滿足匹配條件 t1.a = t2.a and t1.b = t2.b 的列。如果有,就列在結(jié)果集中,如果沒有則默認(rèn)為 NULL

    mysql> select * from t1 right join t2 on (t1.a = t2.a and t1.b = t2.b);
    +------+------+------+----+------+------+
    | id   | a    | b    | id | a    | b    |
    +------+------+------+----+------+------+
    |    1 |    1 |   10 |  1 |    1 |   10 |
    | NULL | NULL | NULL |  2 |    2 |  200 |
    | NULL | NULL | NULL |  3 |    3 |  300 |
    +------+------+------+----+------+------+

另外還有 INNER JOIN 和 FULL JOIN 等關(guān)聯(lián)關(guān)系,可以參考:SQL 基礎(chǔ)教程

2018年7月18日 18:30