1. 程式人生 > >第十二周的筆記

第十二周的筆記

查詢 包括 sele 由於 clas lec 一個 into class

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<條件>];

第十二周的筆記