第十二周的筆記
1.帶有IN謂詞的子查詢
在嵌套查詢中,子查詢的結果往往是一個集合,所謂謂詞IN是嵌套查詢中經常使用的謂詞。
例子:
(1)在學生成績視圖中,查詢16信管的所有課程期末平均分在前30名之後的學生學號、姓名、平均分,結果按成績降序排列
SELECT
SS.StudentNo
,SS.StudentName
,CONVERT(DECIMAL(4,1),AVG(SS.FinalScore)) AS AverageFinalScore
FROM
vw_StudentScore AS SS
WHERE
SS.StudentNo NOT IN
(SELECT TOP 30
SS.StudentNo
FROM
vw_StudentScore AS SS
WHERE
SS.Class=‘16信管‘
GROUP BY
SS.StudentNo
ORDER BY
AVG(SS.FinalScore) DESC)
AND SS.Class=‘16信管‘
GROUP BY
SS.StudentNo
,SS.StudentName
ORDER BY
AverageFinalScore DESC;
表表達式(包括子查詢、視圖、函數、公用表表達式)中不支持排序;
因為關系模型要求表中的行具有無序性,若指定排序後,返回的並非表,而是1個遊標對象(該對象用於有序訪問各行);
由於表表達式要求返回1張表,而不能返回遊標,故不支持排序.
子查詢中的ORDER BY子句僅用於為TOP選項提供排序依據,不能實現子查詢的排序;
若需對結果排序,還需在主語句中指定排序.
(2)在學生成績視圖中,查詢《C語言程序設計》成績比16信管所有學生高的其它班級學生名單
SELECT
SS.*
FROM
vw_StudentScore AS SS
WHERE
SS.Class<>‘16信管‘
AND SS.CourseName=‘C語言程序設計‘
AND SS.FinalScore>ALL
(SELECT
SS.FinalScore
FROM
vw_StudentScore AS SS
WHERE
SS.Class=‘16信管‘
AND SS.CourseName=‘C語言程序設計‘);
標量與單列表作多值比較
2.相關子查詢:如果子查詢的查詢條件依賴於父查詢,這類子查詢稱為相關子查詢。
例子:
(1)找出每個學生超過他自己選修課程的平均成績的課程號
SELECT
Sno,Cno
FROM
SCx
WHERE
Grade>=(SELECT AVG(Grade)
FROM SCy
WHERE y.Sno=x.Sno);
X是表SC的別名,又是稱為元組變量,可以用來表示SC的一個元組。內層查詢是求一個學生所選修課程平均成績的,至於是哪個學生的平均成績要看參數x。Sno的值,而該值是與父查詢相關的,因此這類查詢稱為相關子查詢。
3.插入數據
插入元組格式
INSERT
INTO<表格>[(<屬性列1>[,<屬性列2>])...]
VALUES(<常量1>[<常量2>]....);
4.修改數據
格式
UPDATE <表名>
SET<列名>=<表達式>[<列名>=<表達式>]..
[WHERE<條件>];
第十二周的筆記