⑴ 資料庫-聯表查詢
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
)
⑼ 資料庫的組合查詢可以用其他語句代替嗎,有什麼不同
可以用其他語句代替。同一個查詢可以用不同的方式來實現,但每種查詢方法的執行滲猛橋效率不同。總體來說,多表連接叢猛查詢的效率比子查詢的效率要高,嵌套子查詢的效率比相關子查詢的效知凳率要好一些。