MySQL筆記 select多表查詢

2021-07-30 05:32:32 字數 2777 閱讀 2065

前面的筆記已經記錄了select單錶查詢與子查詢,此筆記記錄sql99標準的多表連線查詢。

一、sql92與sql99的連線查詢

sql99標準連線查詢語法:

select col1,col2[,...] from table1,table2 [,table3,...] [where condition]
如:

select t1.*,t2.id from table1 t1,table2 t2 where t1.id=t2.id;//可以有多個條件,條件可以是非等值的,如">"
sql99標準連線查詢語法:比sql92標準更具可讀性,同時使用專門的條件子句(on子句)指定連線條件,而非使用where

1、交叉連線(cross join)

select col1,col2 [,...] from table1 cross join table2;
說明:即廣義笛卡爾積。

2、自然連線(natural join)

select col1,col2 [,...] from table1 natural join table2;
說明:會以同名列作為連線條件,沒同名列時效果同cross join。

3、join+using 子句連線

select col1,col2 [,...] from table1 join table2 using(sharedcol1,sharedcol2[,...]);
說明:在natural join 上的改進,指定哪些列作為連線條件。

4、join+on 子句

select col1,col2 [,...] from table1 join table2 on table1.id=table2.id;
說明:sql99中on子句指定連線條件,且每個on子句只能指定乙個連線條件,則如需進行n表連線,就需要n-1個join...on對。

5、左、右、全(full)外(outer)連線

select col1,col2 [,...] from table1 left/right/full [outer] join table2 [on 子句];//outer有無結果無區別,left時產生table1的完全結果,table2中為資料或null
6、inner join

select col1,col2 [,...] from table1 inner join table2 [on 子句];//產生多個表的交集
二、簡單實踐1、實踐用表:對應序號列的型別相同

2、sql92連線

說明:sql使用where指定連線條件。and 與union的速度比較?

3、sql99連線

說明:即笛卡爾積。

說明:因為有兩列名相同(id與name),所以自動以此兩列作為連線條件。

using 子句指定連線列:

說明:只指定同名列(id與name)中的id作為連線條件,所以不考慮name列值是否相同。

on 子句指定連線條件:

說明:只是join 而沒有使用on指定連線條件時,也是笛卡爾積,即同cross join。

說明:從結果可見,left join首先查出左邊表的所有記錄,總條數為左邊表記錄數,對應右邊表不存在的記錄值為空,right join 相反,總條數為右邊表的記錄數。mysql不支援full join。此外,左、右、全連線必須指定on 條件,否則提示錯誤。

MySQL筆記 select多表查詢

mysql筆記 select多表查詢,前面的筆記已經記錄了select單錶查詢與子查詢,此筆記記錄sql99標準的多表連線查詢。一 sql92與sql99的連線查詢 sql92標準連線查詢語法 select col1,col2 from table1,table2 table3,where cond...

MySQL筆記 MySQL多表查詢

主鍵 一張從表中某個字段引用主表中的主鍵,維護多表之間的關係 從表 使用別人資料的表,被主表約束 級聯兩個表,乙個表的關鍵字段進行修改,另乙個表也會隨之修改 constraint 外來鍵約束名 foreign key 外來鍵字段 references 主表名 字段 刪除外來鍵 alter table...

MYSQL多表查詢筆記

1 等值連線查詢 查詢的結果為兩個表匹配到的資料 語法 select from 表1,表2 where 條件 and 條件 例子 select from 表1,表2,表3,where 表1.欄位1 表2.欄位1 and 表2.欄位2 表3.欄位2 ps where 後面支援多種運算子,進行條件處理 ...