導航:首頁 > 編程大全 > 資料庫組合查詢

資料庫組合查詢

發布時間:2023-04-11 01:24:34

資料庫-聯表查詢

SQL使用(一)——聯合查詢

1.聯合查詢分類

內連接(inner Join 或 Join)

外連接(outer Join)

左外連接(left outer Join 或 left Join)

右外連接(right outer Join 或 right Join)

全外連接(full outer Join 或 full Join)

交叉連接 (cross Join)

結果集鏈接 (union 和 union all)

2.聯合查詢介紹

相關數據表如下:

A表

B表

C表

2.1內連接(Inner Join)

內連接:僅顯示兩個表中匹配行,即兩表中都有才顯示。

SQL如下:

SELECT  A.id  AS  AID,    A.content  AS  AContent,    B.id  AS  BID,    B.content  AS  BContent  FROM  A  INNERJOIN  B  ON  (A.id = B.id);

1

2

3

4

5

6

7

8

查詢結果:

由查詢結果可以看出,內連接根據連接條件(A.id=B.id)查詢出了A、B兩表中都存在的數據信息。2個表的聯合查詢結果如此,那麼3個表甚至更多表聯合查詢的結果呢?

A、B、C三表聯合內查詢SQL

SELECTA.idASAID,    A.contentASAContent,    B.idASBID,    B.contentASBContent,    C.idASCID,    C.(A.id = B.id)INNERJOINCON(A.id = C.id)

1

2

3

4

5

6

7

8

9

10

11

查詢結果:

啊?怎麼多了一行數據?不用驚訝,其實C表中有2個id為1的記錄,然而我們怎麼理解得到的查詢結果呢?

可以把A、B兩表的查詢結果作為T表(中間結果表),然後T表內連接C表,連接條件為T.A.id=C.id。

簡單來說n(n>=2)都可以看做兩張表的聯合查詢,後面的小節將只介紹兩個表的聯合查詢。

2.2外連接(Outer Join)

2.2.1左外連接(Left outer Join)

左外連接:左表有就顯示,不論右表。

SQL:

SELECTA.idASAID,    A.contentASAContent,    B.idASBID,    B.(A.id = B.id);

1

2

3

4

5

6

7

8

查詢結果:

左連接並不是把B表左連接到A表上,而是把A表作為基準表。由查詢結果可以看出,A、B兩表左連接,只要A中有結果,無論B表中有無結果,都會被查詢出來。

2.2.2右外連接(Right outer Join)

右外連接:右表有就顯示,不論左表。

SQL:

SELECTA.idASAID,    A.contentASAContent,    B.idASBID,    B.(A.id = B.id);

1

2

3

4

5

6

7

8

9

查詢結果:

右連接和左連接類似,只是把B表(連接的表)作為基準表。由查詢結果可以看出,無論A表是否存在其他數據,只要B表數據存在就會被查詢出來。

2.2.3全外連接(Full outer Join)

全外連接:左表/右表,有一個有就顯示。

SQL:

SELECTA.idASAID,    A.contentASAContent,    B.idASBID,    B.(A.id = B.id);

1

2

3

4

5

6

7

8

9

查詢結果:

全外連接查詢就字面意思也不難看出是查詢出兩表(A、B)中的所有記錄信息。

註:MySQL中不支持全外連接(但是可以union來實現,後面會介紹)。

2.2交叉連接(Cross Join)

SQL:

SELECTA.idASAID,    A.contentASAContent,    B.idASBID,    B.;

1

2

3

4

5

6

7

8

9

查詢結果:

由結果可以看出,交叉連接是對A、B量表進行笛卡爾積的結果查詢出來。即A的每條記錄都有和B中所有記錄相對應的信息。

2.3 SQL Union

SQL Union用於將多個select結果集進行合並。值得注意的是,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每條 SELECT 語句中的列的順序必須相同。

SQL:

SELECT*FROMAUNIONSELECT*fromB;

1

查詢結果:

Union是把2個Select結果集進行合並,由查詢結果也不難看出,A、B兩表的結果數據進行了合並,並且都被查詢出來了。

如果2個Select結果集中存在相同的結果,用Union則會把相同的記錄進行合並,查詢結果中僅僅會顯示一條。那麼如果想都顯示出來,把Union換成Union All 即可。

Union實現Full outer Join:

1.首先獲取A、B表中id的不同組合。

SQL:

CREATEVIEWvasSELECTA.idfromAUNIONSELECTB.idfromB;

1

視圖內存如下:

2.以視圖V為基本表,Left Join A、B表即可。

SQL:

SELECTA.id,    A.content,    B.id,    B.contentFROMvLEFTJOINAON(A.id = v.id)LEFTJOINBON(B.id = v.id);

1

2

3

4

5

6

7

8

9

查詢結果如下:

⑵ 如何對access中兩個資料庫中表進行聯合查詢

點擊菜單欄上面的:創建——查詢設計;
在彈出的對話框中選擇兩個表:訂單和訂單明細,然後點擊添加;
添加下列欄位到設計表中;
點擊菜單欄上面的保存按鈕;
在彈出的對話框中,輸入這個查詢的名字,然後點擊確定即可。

⑶ 資料庫中的統計查詢和組合查詢

1、
select a.編號,a.名稱,sum(b.數量)
from 葯品 a,處方 b
where a.編號=b.葯品編號
group by a.編號,a.名稱

2、
select 廠商 from 葯品 group by 廠商 having count(1)>=3

3、首隱
select * from 醫生 where 編號 not in (select distinct 醫生編號 from 處方 where 葯品編號 in (select 編號 from 葯巧芹稿品 where 名孝孝稱 like '%青黴素%'))

⑷ 資料庫中的統計查詢和組合查詢

聯接最簡單
select 科室,sum(數量)
from 醫生,處方,段孝敏葯品
where 葯品.名稱='青黴素'
and 醫生.編號 = 處方.醫生編號
and 處方.葯品編號 = 葯品.編號
group by 科室

你要求不連接單表
declare @葯編號 int
select @葯編號=編號 from 葯品 where 名稱='青黴素'

select 科室,
sum((select 數量 from 處方 where 醫生編號=醫生.編號慎察 and 葯品編號=@葯編握枝號))
from 醫生
group by 科室

⑸ 數據分析人必掌握的資料庫語言-SQL指南第七期

本篇重點為大家講解 組合數據、數據插入、更新和刪除數據 相關內容。



多數SQL查詢只包含從一個或多個表中返回數據的單條 SELECT 語句。但是,SQL也允許執行多個查詢,並將結果作為一個查詢結果集返回。這些組合查詢通常稱為並 (union) 或復合查詢 (compound query)。

主要有 兩種情況 需要使用組合查詢:

在一個查詢中從不同的表返回結構數據;

對一個表執行多個查詢,宴頃輪按一個查詢返回數據。

創建組合查詢

利用 UNION ,可給出多條 SELECT 語句,將它們的結果組合成一個結果集。

使用方法: 給出每條SELECT語句,在各條語句之間放上關鍵字UNION。

假如需要Illinois、Indiana和Michigan等美國幾個州的所有顧客的報表,還想包括不管位於哪個州的所有的Fun4All。

分析:這條語句由兩條 SELECT語句 組成,之間用 UNION 關鍵字分隔。UNION指示DBMS執行這兩條SELECT語句,並把輸出組合成一個查詢結果集。

在簡單的例子中,使用UNION可能比使用WHERE子句更為復雜。但對於較復雜的過濾條件,或者從多個表中檢索數據的情形,使用UNION可能會使處理更簡單。

1、UNION規則

UNION必須由 兩條或兩條以上 的SELECT語句組成,語句之間用關鍵字 UNION分隔。

UNION中的每個查詢必須包含相同的 列、表達式或聚集函數。

列數據晌信類型 必須兼容 :類型不必完全相同,但必須是DBMS可以隱含轉換的類型。

2、包含或取消重復的行

使用 UNION 時, 重復的行會被自動取消 ,這是UNION的默認行為,如果想返回所有的匹配行,可使用 UNION ALL

3、對組合查詢結果排序

在用 UNION組合查詢 時,只能使用一條 ORDER BY 子句,它必須位於最後一條SELECT語句之後。

TopBDA大數據分析師培訓

除了SQL資料庫學習,還有大量數據分析知識和實操等你 探索 !

SELECT是最常用的SQL語句,還有其他3個常用的SQL語句需要學習,第一個就是 INSERT ,另外兩個之後為大家介紹。

INSERT用來 將行插入或添加到資料庫表 ,插入有幾種方式:

插入完整的行;

插入行的一部分;

插入某些查詢的結果。

插入完整的行

把數據插入表中的最簡單方法是使用基本的 INSERT 語法。

分析:在插入行時,DBMS將用VALUES列表中的相應值填入列表中的對應項。VALUES中的第一個值對應於第一個指定列名,第二個值對應於第二個列名,如此等等。

插入部分行

使用這種語法,還可以 省略列 ,這表示可以只給某些列提供值,給其他列不提供值。

分析:沒有給 cust_contact cust_email 這兩列提供值,這表示沒必要在INSERT語句中包含它們。因此,這里的INSERT語句 省略了這兩列及其對應的值。

插入檢索出的數據

INSERT一般用來給表插入具有指定列值的行。

INSERT還存在另一種形式, 可以利用它將SELECT語句的結果插入表中, 這就是所謂的 INSERT SELECT

假如想把另一表中的顧客列合並到Customers表中,不需要每次讀取一行再將它用INSERT插入,可以如下進乎塌行:

分析:使用INSERT SELECT從CustNew中將所有數據導入Customers。SELECT語句從CustNew檢索出要插入的值,SELECT中列出的每一列對應於Customers表名後所跟的每一列。

從一個表復制到另一個表

可以使用 CREATE SELECT 語句(或者在SQL Server里也可用 SELECT INTO 語句)。

INSERT SELECT 將數據添加到一個已經存在的表不同,CREATE SELECT將數據復制到一個新表。

使用SQL Server,可以這么寫:

分析:創建一個名為CustCopy的新表,並把Customers表的整個內容復制到新表中。

在使用 SELECT INTO 時,任何SELECT選項和子句都可以使用,包括 WHERE GROUP BY ;可利用連接從多個表插入數據;不管從多少個表中檢索數據,數據都只能插入到一個表中。



更新數據

更新表中的數據,可以使用 UPDATE 語句,使用UPDATE的方式有兩種:

更新表中的特定行;

更新表中的所有行。

基本UPDATE語句由三部分組成,分別是:

要更新的表;

列名和它們的新值;

確定要更新哪些行的過濾條件。

舉一個簡單例子,客戶1現在有了電子郵件地址,因此他的記錄需要更新,語句如下:

分析:UPDATE語句以要更新的表名開始。要更新的表名為Customers。SET命令用來將新值賦給被更新的列。UPDATE語句以WHERE子句結束,它告訴DBMS更新哪一行。

更新多個列的語法稍有不同。

分析:在更新多個列時,只需要使用一條SET命令,每個「列=值」對之間用逗號分隔(最後一列之後不用逗號)。

要刪除某個列的值,可設置它為NULL。

分析:NULL用來去除cust_email列中的值。

刪除數據

從一個表中刪除數據,使用DELETE語句,使用DELETE的方式有兩種:

從表中刪除特定的行;

從表中刪除所有行。

分析:DELETEFROM要求指定刪除數據的表名,WHERE子句過濾要刪除的行。如果省略WHERE子句,它將刪除表中每個顧客。

DELETE不需要列名或通配符 ,DELETE刪除整行而不是刪除列,要刪除指定的列,使用 UPDATE 語句。

使用 UPDATE或DELETE 時所遵循的重要原則:

除非更新和刪除每一行,否則絕對不要使用不帶WHERE子句的UPDATE或DELETE語句。

保證每個表都有主鍵,盡可能像WHERE子句那樣使用它。

在UPDATE或DELETE語句使用WHERE子句前,應該先用SELECT進行測試,保證它過濾的是正確的記錄,以防編寫的WHERE子句不正確。

使用強制實施引用完整性的資料庫,這樣DBMS將不允許刪除其數據與其他表相關聯的行。

有的DBMS允許資料庫管理員施加約束,防止執行不帶WHERE子句的UPDATE或DELETE語句。若是SQL沒有撤銷(undo)按鈕,應該非常小心地使用UPDATE和DELETE。

以上就是今天分享的全部內容,下期重點為大家介紹 使用視圖和創建和操縱表 ,我們下期見!

⑹ access 資料庫組合框查詢功能

1,打開access,點擊創建,點擊窗體設計,然後在工具欄的屬性表,在屬性表的數據的控制項來源中選擇要查詢的比偶。

2,點擊工具欄中窗體設計工具控基桐旁搏橡件的組合框,在主體中任意拉一個組合框,然後在跳出的框框中選擇第三個。

3,選擇要查詢的欄位,點擊下一步,直到最後一個,在最後一個框里輸入該查詢輪握窗體的名稱,點擊確定。

4,點擊保存,右擊該窗體的名稱,選擇窗體視圖,就可以看到效果了。

⑺ 資料庫實驗:統計查詢和組合查詢

1 統計各出版社出版圖書的數量。
SELECT
出版社.出版社名稱,
COUNT(圖書.書號) AS 出版圖書的數量
FROM
圖書, 出版社
WHERE
圖書.出版社編號 = 出版社.編號
GROUP BY
出版社.出版社名稱

2 列出多人合著的圖書書號和價格。
SELECT
書號,
價格
FROM
圖書
GROUP BY
書號,
價格
HAVING
COUNT(作者編號) >= 2

3 列出高教出版社出版的最貴圖書信息。
SELECT
圖書.*
FROM
圖書, 出版螞敏社
WHERE
圖書.出版社編號 = 出版社.編號
AND 出版社.出版社名稱 = '高教出版社'
AND 圖書態明.價格 IN (SELECT MAX(價格) FROM 圖書 T WHERE T.出悶閉枝版社編號 = 出版社.編號)

4 列出所有圖書都是30元以上的出版社名稱。
SELECT
出版社.出版社名稱
FROM
圖書, 出版社
WHERE
圖書.出版社編號 = 出版社.編號
GROUP BY
出版社.出版社名稱
HAVING
SUM ( CASE WHEN 圖書.價格 > 30 THEN 0 ELSE 1 END ) = 0

⑻ 資料庫SQL組合查詢,兩表之間取數據

select
*
from
B
where
id
in
(select
Max(ID)
from
B
where
B.Name
in
(select
name
from
A
where
pid='迅嘩99999'畝廳行伏盯)
group
by
name
)

⑼ 資料庫的組合查詢可以用其他語句代替嗎,有什麼不同

可以用其他語句代替。同一個查詢可以用不同的方式來實現,但每種查詢方法的執行滲猛橋效率不同。總體來說,多表連接叢猛查詢的效率比子查詢的效率要高,嵌套子查詢的效率比相關子查詢的效知凳率要好一些。

閱讀全文

與資料庫組合查詢相關的資料

熱點內容
桌面文件可以保存在哪裡 瀏覽:136
世界之窗修改密碼 瀏覽:555
系統文件巨大 瀏覽:138
重點畢業生數據採集有什麼用 瀏覽:341
手機抖音上的app在哪裡 瀏覽:215
thinkpad裝win7教程 瀏覽:793
2012文件伺服器資源管理器 瀏覽:459
純凈版win1032位改64 瀏覽:413
農產品行業融資主要分析哪些數據 瀏覽:601
華為微信不上網路設置 瀏覽:727
查看qq聊天記錄 瀏覽:931
nih是什麼意思網路用語 瀏覽:456
網路營銷課程設計公眾號論文 瀏覽:902
淘寶低價海關扣押蘋果 瀏覽:335
javadouble和float 瀏覽:303
atmega8下載程序 瀏覽:819
飛鴿傳輸文件和qq哪個快 瀏覽:519
怎樣在win10安裝winxp 瀏覽:354
iphone5s照片模糊不清怎麼解決 瀏覽:75
ps文件過大閃退怎麼辦 瀏覽:325

友情鏈接