下面是例子分析
表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...