MySQL數據庫聯合查詢與連接查詢


聯合查詢

基本概念

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

 

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

 

應用場景

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

 

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

 

基本語法

select 語句

union[union選項]

select 語句;

 

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

distinct:去重,去掉完全重復的數據(默認)

all:保存所有的數據。

 

 

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

Order by的使用

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 + 右表;

 

自然連接自動使用同名字段作為連接條件,而且在連接完成之后合並同名字段。

 

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

 

using關鍵字

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

using內部的字段名就是作為連接條件的字段,也是需要合並的同名字段。

原理

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

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

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

語法

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

分類:  MySQL數據庫


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM