MySQL之左 右 內關聯型別解析

2021-09-30 11:39:23 字數 2702 閱讀 2373

下面是例子分析

表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裡都行。

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...

mysql欄位型別解析 MySQL欄位型別最全解析

前言 要了解乙個資料庫,我們必須了解其支援的資料型別。mysql 支援大量的字段型別,其中常用的也有很多。前面文章我們也講過 int 及 varchar 型別的用法,但一直沒有全面講過字段型別,本篇文章我們將把字段型別一網打盡,講一講常用字段型別的用法。常用的字段型別大致可以分為數值型別 字串型別 ...

MySQL資料型別解析

mysql支援大量的列型別,它可以被分為3類 數字型別 日期和時間型別以及字串 字元 型別。本節首先給出可用型別的乙個概述,並且總結每個列型別的儲存需求,然後提供每個類中的型別性質的更詳細的描述。概述有意簡化,更詳細的說明應該考慮到有關特定列型別的附加資訊,例如你能為其指定值的允許格式。由mysql...