多表鏈結查詢語句

2021-05-26 00:25:08 字數 3498 閱讀 1543

多表查詢常涉及到到表連線的問題,主要涉及到內連線:

inner join

,外連線:

left join(or left outer join),right join(or right outer join),full join

和交叉連線:

cross join

。inner join

也叫等值鏈結。內連線具有排他性,而

outer join

卻是包容性的。

表連線進行查詢都是會產生一張中間的臨時表,然後再將這張臨時表返回給使用者。通用的

sql語句:

select (

待查詢欄位名

) from

表一(join type)

表二on (join condition) [

其他對臨時表記錄進行過濾的條件];

幾種連線方式查詢結果區別大致如下:

inner join:

只返回兩個表中連線字段相同的行(即符合條件的行);

left join:

返回包括左表中的所有記錄和右表中聯結字段相等的記錄;

right join:

返回包括右表中的所有記錄和左表中聯結字段相等的記錄;

full join:

兩個連線表的所有記錄;

cross join

:不帶where

子句,返回所有資料行的笛卡爾乘積.

表一

:tab_emp

id

emp_name

dept

1eric huang12

alice33

peter14

green

表二:

tab_dept

id

dept_name

1研發部

2財務部

3國際事業部

4綜合管理部

5銷售部

inner join

方式:

sql>

select

t1.emp_name, t2.dept_name

from

tab_emp t1

inner

join

tab_dept t2

ont1.dept=t2.id;

執行結果:

分析:可以看出採用

inner join

方式時,只會列出滿足連線條件的記錄;

left join

方式:

sql>

select

t1.emp_name, t2.dept_name

from

tab_emp t1

left

join

tab_dept t2

ont1.dept=t2.id;

執行結果:

分析:可以看出採用

left join

方式時,左表中的記錄和右表中聯結字段相等的記錄會全部列出,而右表中連線欄位不相等的字段全部為

null

right join

方式:

sql>

select

t1.emp_name, t2.dept_name

from

tab_emp t1

right

join

tab_dept t2

ont1.dept=t2.id;

執行結果:

分析:可以看出採用

right join

方式時,返回包括右表中的所有記錄和左表中聯結字段相等的記錄

;,若左表中連線欄位不相等的字段全部為

null

full join

方式:

sql>

select

t1.emp_name, t2.dept_name

from

tab_emp t1

full

join

tab_dept t2

ont1.dept=t2.id;

執行結果:

分析:可以看出採用

full join

方式時,左表的所有記錄會全部返回,右表的所有記錄也會全部返回,匹配的就直接列出,不匹配的某一邊的記錄值為

null

就行;cross join

方式:

值得注意的是該方式語法上和其他幾種有點差別,不能用

on子句。

select * from [

表一] cross join [

表二] 或者

select * from [

表一], [表二]

sql>

select

t1.emp_name, t2.dept_name

from

tab_emp t1

cross

join

tab_dept t2;

分析:最後返回的記錄數實際上就是兩張表記錄數的乘積。該型別的

join

句法不需要連線條件,乙個表中的所有行分別都會連線另乙個表的所有行,得到的結果被稱為乙個笛卡爾積。

最後總結一下,實際專案開發中

cross join

用得比較少,它是不能使用

on關鍵字的,其它都要用。一般先進行連線獲取到需要的新錶資料,然後使用其他子句如

where

子句進行過濾,

group by

子句進行聚合,

order by

子句進行排序等等操作。

採用join

方式多表連線查詢時,如果如果用到了

group by

,group by

的排序順序必須和

select

中列出的字段順序的一致

. 這可能是由於

group by

決定了表的排序方式

, 如果是左外連線

, 如果右邊沒有對應的話

,還要填補空值

. 如果排序方式對應不起來

, 就會錯亂。

mysql 多表鏈結查詢

我要做乙個按銷售數量排序的查詢sql操作,現在有如下3個表,要求獲取d product表中的所有資料 包括沒有銷售記錄的資料 以及d item表中的銷售數量 product num欄位的值 查詢條件是d category表的id,按d item表中的銷售數量 product num欄位的值 請問這樣...

MySQL 多表鏈結查詢

多表鏈結查詢時從多個表中獲取資料 table reference inner join outer join table reference on conditional expr 根據連線條件從多個表中查詢選擇資料,顯示這些表中與連線條件匹配的資料行,組合成新紀錄 就是匹配兩表相同的行 交集 內連...

多表鏈結的問題

select a.b.c.d.from a left join b on a.id b.id left join c on a.id c.id left join d on a.id d.id where a.id in 首先會把a和b按照id 關聯,得出來的合集再和進行關聯,依次類推 如果a裡id...