MySQL 左右關聯

2021-06-27 22:03:11 字數 2696 閱讀 3010

下面是例子分析

表a記錄如下:

id name

2 jack

4 hello

9 heihei

3 world

1 dream

表b記錄如下:

id name

2 miaomiao

4 yanyan

7 jack

建立這兩個表sql語句如下:

create table a (

id varchar(10),

name varchar(30));

insert into `a` values ('2', 'jack');

insert into `a` values ('4', 'hello');

insert into `a` values ('9', 'heihei');

insert into `a` values ('3', 'world');

insert into `a` values ('1', 'dream');

create table b (

id varchar(10),

name varchar(30));

insert into `b` values ('2', 'miaomiao');

insert into `b` values ('4', 'yanyan');

insert into `b` values ('7', 'jack');

實驗如下:

1.left join(左聯接)

sql語句如下:

select * from a

left join b

on a.id=b.id

結果如下:

mysql> select * from a left join b on a.id = b.id;

+------+--------+------+----------+

| id | name | id | name |

+------+--------+------+----------+

| 2 | jack | 2 | miaomiao |

| 4 | hello | 4 | yanyan |

| 9 | heihei | null | null |

| 3 | world | null | null |

| 1 | dream | null | null |

+------+--------+------+----------+

5 rows in set (0.73 sec)

結果說明:

left join是以a表的記錄為基礎的,a[主表]可以看成左表,b[副表]可以看成右表,left join是以左表為準的.

換句話說,左表(a)的記錄將會全部表示出來,而右表(b)只會顯示符合搜尋條件的記錄(例子中為: a.id = b.id).

b表記錄不足的地方均為null.

2.right join(右聯接)

sql語句如下:

select * from a

right joing b

on a.id = b.id

結果如下:

mysql> select * from a right join b on a.id = b.id;

+------+-------+------+----------+

| id | name | id | name |

+------+-------+------+----------+

| 2 | jack | 2 | miaomiao |

| 4 | hello | 4 | yanyan |

| null | null | 7 | jack |

+------+-------+------+----------+

3 rows in set (0.00 sec)

結果說明:

仔細觀察一下,就會發現,和left join的結果剛好相反,這次是以右表(b) [主表]為基礎的,a[主表]表不足的地方用null填充.

3.inner join(相等聯接或內聯接)

sql語句如下:

mysql> select * from a inner join b on a.id = b.id;

+------+-------+------+----------+

| id | name | id | name |

+------+-------+------+----------+

| 2 | jack | 2 | miaomiao |

| 4 | hello | 4 | yanyan |

+------+-------+------+----------+

2 rows in set (0.00 sec)

結果說明:

很明顯,這裡只顯示出了 a.id = b.id的記錄.這說明inner join並不以誰為基礎,它只顯示符合條件的記錄.

left join操作用於在任何的 from 子句中

沒有where條件等價於完全關聯,反之則為內部關聯。其約束是先on 再 where ,這裡一定要注意的是:條件是放在on裡還是where裡,放的位置不同結果可能完全不一樣的,where 後面所有欄位都是用來進一步過濾的。

副表的約束條件盡量在on裡寫,因為on關聯後再約束副表的話可能丟東西。主表的約束基本上寫在on或where裡都行。

oracle ( ) 左右關聯

select emp name,dept name form employee,department where employee.emp deptid department.deptid 此sql語句使用了右連線,即 所在位置的另一側為連線的方向,右連線說明等號右側的所有記錄均會被顯示,無論其在左...

Oracle 左右關聯

select from test2 t1,test3 t2 where t1.c2 t2.name t1三列,t2為三列,以t1表為基礎表,結果顯示六列,t1表全顯示,t2表顯示t1.c2 t2.name 相關聯的資料。select from test2 t1,test3 t2 where t1.c...

MySQL之左 右 內關聯型別解析

下面是例子分析 表a記錄如下 id name 2 jack 4 hello 9 heihei 3 world 1 dream 表b記錄如下 id name 2 miaomiao 4 yanyan 7 jack 建立這兩個表sql語句如下 create table a id varchar 10 na...