將多張表連在一起進行查詢。通過兩個表共有的列去進行拼接。多表連線,首先要在表之間建立連線。
連線查詢一共分為以下幾類:
交叉連線
內連線外連線
自然連線
將一張表的資料與另外一張表中的資料彼此交叉。也就是說把一張表中的每一行逐個與另一張表去進行匹配。沒有任何連線條件,所有的記錄都會被保留。
select 欄位1,欄位2 from 表1 join 表2
交叉連線產生的結果是笛卡爾積,沒有實際應用。
使用比較運算子設定連線條件,將乙個表中的所有行與另外一張表中的行進行匹配,只返回滿足條件的行。
select 欄位1,欄位2 from 表1 join 表2 where 連線(檢索條件)
注:內連線一次可以連線很多張表,只需要在在建立連線的時候連線多張表,在設定檢索條件的時候把需要檢索的資訊都設定好就可以。
在查詢時所有的表有主從之分。把作為主表的表的行與從表中的行一一進行匹配,如果匹配成功返回到主表中,如果匹配不成功,則仍然保留主表中的行,相應的從表中的行也被填上null值。
左外連線:left join on
把左表作為主表去連線右表
select * from 表1 left join 表2
on條件表示式
右外連線:right join on
把右表作為主表去連線左邊的表
select * from 表1 right join 表2 on 條件表示式
mysql不支援全外連線
全外連線:即都為主表。左表中未匹配的行仍保留,同時賦給右表null值,右表的未匹配的行仍然保留同時賦給左表值null。
select * from 表1 full join 表2 on 條件表示式
自連線,就是兩個表的兩個副本進行連線,為了區別,對錶設定別名
子查詢是指巢狀到其它查詢裡的select語句,也稱為巢狀查詢。字查詢一般不使用order by 語句
當子查詢的返回值只有乙個時,可以使用比較運算子等將父查詢和子查詢連線起來。
如果子查詢的返回結果不止乙個,是有很多個時不能直接使用比較運算子進行連線,可以在比較運算子和子查詢之間插入any,some,all。其中等值關係可以用in操作。
select boys.`boyname` from boys
where boys.id
= (select girls.boyfriend_id from girls where girls.id<2);
父查詢和子查詢需要使用比較運算子進行連線
any只要有乙個為true則結果為true
all如果一系列的比較都為true,結果才為true
select boys.`boyname` from boys
where boys.boysage
>(select girls.age from girls where girls.`id`<2);
in關鍵字的子查詢用於判斷父查詢的表示式是否在子查詢返回的多個值的列表中。
select boys.`boyname` from boys where boys.id
in (select girls.boyfriend_id from girls where girls.id<4);
判斷是有存在有或者只要有有個。exists和後邊的查詢語句共同構成乙個exists語句,只要在exists語句中查詢到有乙個滿足條件,返回結果為true。否則返回結果為false。
select * from boys
where exists (select * from girls where girls.id=4);
把多個查詢語句的查詢結果結合在一起。使用union 關鍵字
select * from 表1
union * from 表2
union 聯合查詢的返回結果會自動去除重複項,如果不需要去除重複項需要使用 union all 資料庫操作 多表查詢
一 關鍵字 join 多表建立交叉連線 cross join。on 關鍵字 後面跟篩選條件。二 分類 內連線 inner jion 外連線 left right join 全連線 union 三 子查詢 子查詢就是select語句巢狀select語句,可以理解為子查詢是一張表 子查詢是將乙個查詢語句...
資料庫篇多表操作
第1章 多表操作 實際開發中,乙個專案通常需要很多張表才能完成。例如 乙個 專案就需要分類表 category 商品表 products 訂單表 orders 等多張表。且這些表的資料之間存在一定的關係,接下來我們將在單錶的基礎上,一起學習多表方面的知識。1.1 表與表之間的關係 有3類表關係 一對...
資料庫之多表操作
分析步驟 1 先站在左表的角度去找 是否左表的多條記錄可以對應右表的一條記錄,如果是,則證明左表的乙個欄位foreign key 右表乙個字段 通常是id 2 再站在右表的角度去找 是否右表的多條記錄可以對應左表的一條記錄,如果是,則證明右表的乙個欄位foreign key 左表乙個字段 通常是id...