MySQL資料庫(十五)聯合查詢與連線查詢

2022-08-31 13:33:14 字數 3393 閱讀 8341

聯合查詢是可合併多個相似的選擇查詢的結果集。等同於將乙個表追加到另乙個表,從而實現將兩個表的查詢組合在一起,使用為此為unino或union all

聯合查詢:將多個查詢的結果合併到一起(縱向合併):字段數不變,多個查詢的記錄數合併

1、將同一張表中不同的結果(需要對應多條查詢語句來實現),合併到一起展示資料

2、最常見:在資料量大的情況下,會對錶進行分表操作,需要對每張表進行部分資料統計,使用聯合查詢來將資料存放到一起顯示

select 語句

union[union選項]

select 語句;

union選項:與select選項基本一樣

distinct:去重,去掉完全重複的資料(預設)

all:儲存所有的資料。

注意細節:union理論上只要保證字段數一樣,不需要每次拿到的資料對應的字段型別一致。永遠只保留第乙個select語句對應的欄位名字。

1、在聯合查詢中,如果要使用order by,那麼對應的select語句必須使用括號括起來

2、order by在聯合查詢中若要生效,必須配合使用limit,而limit後面必須跟對應的限制數量(通常可以使用乙個較大的值:大於對應表的記錄數)

連線查詢:將多張表連到一起,進行查詢(會導致記錄數行和字段數列發生改變)

連線查詢的意義

在關係型資料庫設計過程中,實體(表)與實體之間存在很多聯絡的。在關係型資料庫表的設計過程中,遵循著關係來設計:一對一,一對多,多對多,通常在實際操作的過程中,需要利用這層關係來保證資料的完整性

連線查詢的分類

連線查詢一共有以下幾類:

交叉連線

內連線外連線:左外連線(左連線)和右外連線(右連線)

自然連線

交叉連線:將兩張表的資料與另外一張表彼此交叉

原理1、從第一張表依次取出每一條記錄

2、取出每一條記錄之後,與另外一張表的全部記錄挨個匹配

3、沒有任何匹配條件,所有的結果都會進行保留

4、記錄數 = 第一張表記錄數 * 第二張表記錄數;字段數 = 第一張表字段數 + 第二張表字段數(笛卡爾積)

語法基本語法:表1 cross join 表2;

應用交叉連線產生那個的結果是笛卡爾積,沒有實際應用。保證連線查詢的整體完整性。

本質與from 表1,表2;產生的結果一樣

內連線:inner join,從一張表中取出所有的記錄去另外一張表中匹配:利用匹配條件進行匹配,成功了則保留,失敗了放棄

原理1、從第一張表中取出一條記錄,然後去另外一張表中進行匹配

2、利用匹配條件進行匹配

2.1 匹配成功,保留,繼續向下匹配

2.2 匹配失敗,向下繼續,如果全表匹配失敗,結束

語法基本語法:表1[inner]join 表2 on匹配條件;

1、如果內連線沒有匹配條件,結果為笛卡爾積,其實就是交叉連線(避免)

2、使用匹配條件進行匹配

3、因為表的設計通常容易產生同名字段,尤其是id,所以為了避免重名出現錯誤,通常使用表名.欄位名,確保唯一性。

4、通常,如果條件中使用到對應的表名,而表名通常比較長,所以可以通過表別名來簡化。

5、內連線匹配的時候,必須保證匹配到才會儲存。

6、內連線因為可以不強制必須使用匹配條件,(on)因此可以在完成資料匹配完成後,所用where條件來限制,效果與on一樣(建議使用on)

應用內連線通常是在對資料有精確要求的地方使用,必須保證兩張表中都能進行資料匹配

外連線:outer join,按照某一張表作為主表(表中所有記錄在最後都會保留),根據條件去連線另外一張表,從而得到目標資料

外連線分為兩種:左外連線(left join),右外連線(right join)

左連線:左表是主表

右連線:右表是主表

原理1、確定連線主表:左連線就是left join左邊的表為主表;right join就是右邊為主表

2、拿主表的每一條記錄,去匹配另外一張表(從表)的每一條記錄

3、如果滿足匹配條件,保留,不滿足即不保留

4、如果主表記錄在從表中一條都沒有匹配成功,那麼也要保留該記錄,從表對應的字段值都為null

語法基本語法:

左連線:主表 left join 從表 on 連線條件;

右連線:從表 right join 主表 on 連線條件;

左連線對應的主表資料在左邊,右連線對應的主表資料在右邊。

特點:1、外連線中主表資料記錄一定會儲存:連線之後不會出現記錄數少於主表(內連線可能)

2、左連線和右連線可以互相轉換,但是資料對應的位置(表順序)會改變

應用非常常用的一種獲取資料的方式。作為資料獲取對應主表以及其他資料(關聯)

自然連線:nature join,自然連線其實就是自動匹配連線條件,系統以兩表中同名字段作為匹配條件,如果兩表有多個同名字段,那就都作為匹配條件。在這裡,自然連線可以分為自然內連線和自然外連線。

自然外連線:

基本語法:左表 + nature + left/right + join + 右表;

自然內連線:

基本語法:左表 + nature + join + 右表;

自然連線自動使用同名字段作為連線條件,而且在連線完成之後合併同名字段。

實際上,自然連線並不常用。而且,咱們可以用內連線和外連線來模擬自然連線,模擬的關鍵就在於使用同名字段作為連線條件及合併同名字段。

是在連線查詢中用來代替對應的on關鍵字的,進行條件匹配

using內部的欄位名就是作為連線條件的字段,也是需要合併的同名字段。

原理1、在連線查詢中,使用on的地方使用using代替

2、使用using的前提是對應的兩張表連線的字段是同名(類似自然連線自動匹配)

3、如果使用using關鍵字,那麼對應的同名字段,最終在結果中只會保留乙個

語法基本語法:表1 [inner,left,right] join 表2 using(同名字段列表);//連線字段

MySQL資料庫(十五)聯合查詢與連線查詢

聯合查詢是可合併多個相似的選擇查詢的結果集。等同於將乙個表追加到另乙個表,從而實現將兩個表的查詢組合在一起,使用為此為unino或union all 聯合查詢 將多個查詢的結果合併到一起 縱向合併 字段數不變,多個查詢的記錄數合併 1 將同一張表中不同的結果 需要對應多條查詢語句來實現 合併到一起展...

mySQL資料庫 約束 聯合查詢

在實際應用中,之間會有關聯,每張表也會有一些欄位是有格式要求 比如 非空且唯一,不能為負數等等 所以每張表都會有一些約束 建立主鍵的方式 表建立完成之後新增主鍵 聯合主鍵 建立或者新增外來鍵 建立完成之後新增外來鍵 列舉型別 刪除表中的所有資料 為了保證資料的有效性和完整性,我們會新增一些外來鍵約束...

資料庫的聯合查詢

定義 表和表之間的資料以縱向的方式連線在一起 舉個例子 select e1 ename,e1 sal,e2 ename from emp e1 e1 和 e2 是自連線 join emp e2 on e1 mgr e2 empno union select ename,sal,我是最大老闆 from...