MySQL 連線查詢彙總

2022-08-24 13:03:10 字數 3145 閱讀 4376

mysql-連線查詢:

# 連線查詢:把多張表進行記錄的連線(按照某個條件進行資料的拼接)

# 分類

1,內鏈結

2,外連線

# 左外

# 右外

3,自然連線

4,交叉連線

mysql-內鏈結 :

# inner join (inner關鍵字可以省略) [inner join比left join快]

# 從左表中取出每一條記錄,與右表中的所有記錄進行匹配

# 匹配必須是某個條件,在左表和右表中相同【公共部分】,才會保留結果.否則,不保留

# 基本語法

select * from [左表] innder join [右表] on [左表].[字段]=[右表].[字段];

# 內連線,可以沒有on,那麼系統會保留所有的結果,沒錯.又是傳說中的笛卡爾積

# '還可以使用where代替on,但是效率沒有on高'

例子:排他性: a,b表中至少有1個匹配時,才返回行。兩表的【交集】

sql語句如下:

select a.name,b.address from a

inner join b

on a.id = b.a_id

查詢結果為:

name address

張 北京

王 上海

inner join 內連線等價於下面的sql:

select a.name, b.address

from a, b

where a.id = b.a_id

mysql-外連線:

1, 左外

左外連線: 包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行),以及右邊表中全部匹配的行。

【通俗:就是2張表,查左表滿足條件的所有以及右表中含有左表條件的資料,where (右表條件)..is not null顯示不為null的數】

# 以某張表為主,取出裡面的所有記錄.每條與另外一張表.不管能不能匹配上條件.最終都會保留.如果不能匹配,那麼其他表的字段都置空

# left join (left join 是left outer join的簡寫)

# 基本語法

select

...from

[左表]

left join

[右表]

on[條件]

# 會把左邊所有的資料都顯示出來,如果右表沒有匹配的資料.以null顯示

例:select * from a_table a left join b_table b on a.a_id = b.b_id (where b_id is not null);

2,右外

右外連線: 包含右邊表的全部行(不管左邊的表中是否存在與它們匹配的行),以及左邊表中全部匹配的行

【通俗:就是2張表,查右表滿足條件的所有以及左表中含有右表條件的資料,where (左表條件)..is not null顯示不為null的數】

# right join

# 基本語法

select

...from

[左表]

right join

[右表]

on[條件]

# 會把右表所有的資料都顯示出來,如果左表沒有匹配的資料.以null顯示

例:select * from a_table a right join b_table b on a.a_id = b.b_id (where a_id is not null);

mysql-自然連線:

# natural join

# mysql方言,其他資料庫不一定有

# '自動的匹配連線條件',但是.不怎麼建議使用.是以'欄位名稱作為匹配模式'

# 基本語法

select ...from [表1] natural join [表2]; //內連線

* 自動使用同名字段作為連線條件,結果中會合併該欄位

select ...from [表1] left natural join [表2]; //左外自然連線

select ...from [表1] right natural join [表2]; //右外自然連線

mysql-交叉連線:

# cross join

# 從一張表中迴圈取出每一條記錄,每條記錄都去另外一張表進行匹配.而且匹配一定保留(沒有條件匹配不帶條件where...)

# 而連線本身欄位就會增加(保留) -- 笛卡爾積(笛卡爾是沒有意義的,【盡量要避免】)

# 存在的價值:保證連線這種結構的完整性而已.

# 基本語法

select * from [左表] cross join [右表]; == select * from [左表],[右表];

select * from emp cross join dept;

# 也可以加上條件

select *

from emp e

cross join

dept d

on e.deptno=d.deptno ;

【兩表連線如果要避免返回笛卡爾積,必須確保至少一方表是唯一的,否則在能查到記錄的情況下,不論哪一種連線方式一定會返回笛卡爾積記錄集的。】

mysql-全外:

# 全外(mysql不支援,但是我們可以通過其他方式實現)

# 這個就是,左右兩表都是相同的,兩個表的所有內容都必須全部出來,如果沒有對應記錄的,就用null填充

select * from 表1 left outer join 表2 on 表1.欄位=表2.欄位

union

select * from 表1 right outer join 表2 on 表1.欄位=表2.欄位;

-聯合查詢 ,把他們的結果集合並一下就出來了

例: select * from a_table a left join b_table b on a.a_id = b.b_id (where b_id is not null) union select * from a_table a

left join b_table b on a.a_id = b.b_id (where b_id is not null);

mysql連線查詢例項 MySQL連線查詢例項詳解

建立表suppliers create table suppliers s id int not null auto increment,s name char 50 not null,s city char 50 null,s zip char 10 null,s call char 50 not...

mysql連線查詢例項 MySQL連線查詢例項詳解

建立表suppliers create table suppliers s id int not null auto increment,s name char 50 not null,s city char 50 null,s zip char 10 null,s call char 50 not...

mysql連線查詢on MySQL連線查詢例項詳解

建立表suppliers create table suppliers s id int not null auto increment,s name char 50 not null,s city char 50 null,s zip char 10 null,s call char 50 not...