Sqlserver 學習筆記
by:授客 QQ:1033553122
-----------------------接Part 2-------------------
13. 使用compute對查詢結果集中的所有記錄進行彙總統計,并顯示所有參加彙總的記錄的詳細資訊。
格式:
COMPUTE 聚合函數[列名] --聚合函數,例如SUM (),AVG (),COUNT ()等
結合GROUP BY使用
示例:
SELECT * FROM std_table
GROUP BY 專業方向
COMPUTE SUM(聯考分數)
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5ycuFmc091Zz9CXu9Wbt92Yvw1cldWYtl2LcVGb5R3c3c2bsJ2Lc52YuMnah5Waz5yZtl2cvw1LcpDc0RHaiojIsJye.gif)
SELECT 專業方向, COUNT(*) 系部總人數
FROM std_table
GROUP BY 專業方向
COMPUTE COUNT(專業方向)
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5ycuFmc091Zz9CXu9Wbt92Yvw1cldWYtl2LcVGb5R3c3c2bsJ2Lc52YuMnah5Waz5yZtl2cvw1LcpDc0RHaiojIsJye.gif)
COMPUTE SUM(COUNT(*))
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5ycuFmc091Zz9CXu9Wbt92Yvw1cldWYtl2LcVGb5R3c3c2bsJ2Lc52YuMnah5Waz5yZtl2cvw1LcpDc0RHaiojIsJye.gif)
SELECT 專業方向, AVG(聯考分數) 聯考平均分
COMPUTE AVG(AVG(聯考分數))
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5ycuFmc091Zz9CXu9Wbt92Yvw1cldWYtl2LcVGb5R3c3c2bsJ2Lc52YuMnah5Waz5yZtl2cvw1LcpDc0RHaiojIsJye.gif)
EXEC
SP_RENAME '專業.系部名稱',
'系部代碼'
14.
UNION操作
UNION
操作符用于合并兩個或多個
SELECT
語句的結果集。
請注意,UNION
内部的
語句必須擁有相同數量的列。列也必須擁有相似的資料類型。同時,每條
語句中的列的順序必須相同。【原因:sql
union隻是将兩個結果聯結起來一起顯示,并不是聯結兩個表】
注釋:預設地,UNION
操作符選取不重複的記錄。如果允許重複的值,請使用
UNION ALL。
另外,UNION
結果集中的列名總是等于
中第一個
語句中的列名。
--UNION
和NNION
ALL
--UNION操作符用于合并兩個或多個SELECT語句的結果集
學号
FROM 學生
UNION
專業代碼
FROM 專業
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5ycuFmc091Zz9CXu9Wbt92Yvw1cldWYtl2LcVGb5R3c3c2bsJ2Lc52YuMnah5Waz5yZtl2cvw1LcpDc0RHaiojIsJye.gif)
UNION ALL
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5ycuFmc091Zz9CXu9Wbt92Yvw1cldWYtl2LcVGb5R3c3c2bsJ2Lc52YuMnah5Waz5yZtl2cvw1LcpDc0RHaiojIsJye.gif)
--對比:NNION
ALL保留了重複值
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5ycuFmc091Zz9CXu9Wbt92Yvw1cldWYtl2LcVGb5R3c3c2bsJ2Lc52YuMnah5Waz5yZtl2cvw1LcpDc0RHaiojIsJye.gif)
15
複合連接配接條件查詢(多表查詢)
學生.學号,
學生.姓名,
班級.班級名稱
FROM
學生
JOIN
班級
ON 學生.班級代碼
= 班級.班級代碼
班級.班級名稱,
專業.專業名稱,
系部.系部名稱
專業
ON 學生.專業代碼
= 班級.專業代碼
系部
ON 系部.系部代碼
= 班級.系部代碼
--先建立如下表
CREATE
TABLE person
(
id INT PRIMARY KEY,
lastNAME VARCHAR(10)
NOT NULL,
firstName VARCHAR(10)
addr VARCHAR(20)
city VARCHAR(10)
)
TABLE orders
orderNo CHAR(6)
idP INT FOREIGN KEY
REFERENCES person(id)
INSERT
INTO person
VALUES(1,
'Lai', 'fy',
'none', 'none')
VALUES(2,
'Lai', 'll',
VALUES(3,
'Lai', 'zy',
VALUES(4,
'Lai', 'fj',
INTO orders
'111', 1)
'zzz', 2)
'zzz', NULL)
--給上述兩個表中插入資料後,做如下查詢語句
--left join
可以寫成left
outer join,,,其它的以此類推
--
列出所有人的訂購(INNER
JOIN --->内連接配接)
person.lastName, person.firstName,
orders.orderNo
person
INNER
JOIN orders
ON
person.id = orders.idp
ORDER
BY person.lastName
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5ycuFmc091Zz9CXu9Wbt92Yvw1cldWYtl2LcVGb5R3c3c2bsJ2Lc52YuMnah5Waz5yZtl2cvw1LcpDc0RHaiojIsJye.gif)
--注:INNER
和JOIN效果一樣,隻要表中有一個比對,則傳回記錄行
--列出所有的人,以及他們的訂購,如果有的話(LEFT
OUTER JOIN-->左外連接配接)
LEFT
OUTER JOIN orders
--注:LEFT
OUTER JOIN會傳回左表所有的行,即使在右表中沒有比對值的行
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5ycuFmc091Zz9CXu9Wbt92Yvw1cldWYtl2LcVGb5R3c3c2bsJ2Lc52YuMnah5Waz5yZtl2cvw1LcpDc0RHaiojIsJye.gif)
--列出所有的訂單,以及訂購他們的人,如果有的話(RIGHT
OUTER JOIN-->右外連接配接)
RIGHT
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5ycuFmc091Zz9CXu9Wbt92Yvw1cldWYtl2LcVGb5R3c3c2bsJ2Lc52YuMnah5Waz5yZtl2cvw1LcpDc0RHaiojIsJye.gif)
--注:RIGHT
OUTER JOIN會傳回右表所有的行,即使在左表中沒有比對值的行
--列出所有的人,以及他們的定單;同時列出所有的定單,以及定購它們的人(FULL
JOIN--->完全連接配接)
FULL
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5ycuFmc091Zz9CXu9Wbt92Yvw1cldWYtl2LcVGb5R3c3c2bsJ2Lc52YuMnah5Waz5yZtl2cvw1LcpDc0RHaiojIsJye.gif)
16嵌套查詢
* FROM
WHERE
班級代碼
IN
FROM 班級
WHERE 專業代碼
IN
WHERE 系部代碼
系部代碼
FROM 系部
IN(1, 2,
5)
作者:授客
微信/QQ:1033553122
全國軟體測試QQ交流群:7156436
Git位址:https://gitee.com/ishouke
友情提示:限于時間倉促,文中可能存在錯誤,歡迎指正、評論!
作者五行缺錢,如果覺得文章對您有幫助,請掃描下邊的二維碼打賞作者,金額随意,您的支援将是我繼續創作的源動力,打賞後如有任何疑問,請聯系我!!!
微信打賞
支付寶打賞 全國軟體測試交流QQ群