SQLSever指導(dǎo):查詢語(yǔ)句-單表查詢

字號(hào):

查詢語(yǔ)句-單表查詢
    回顧:?jiǎn)伪聿樵?BR>    一、選擇表中的若干列
    二、選擇表中的若干元組
    三、對(duì)查詢結(jié)果排序
    四、使用集函數(shù)
    五、對(duì)查詢結(jié)果分組
    查詢語(yǔ)句-單表查詢
    三、對(duì)查詢結(jié)果排序
    使用ORDER BY子句
     可以按一個(gè)或多個(gè)屬性列排序
     升序:ASC;降序:DESC;缺省值為升序
    當(dāng)排序列含空值時(shí)
    ASC:排序列為空值的元組后顯示
    DESC:排序列為空值的元組先顯示
    查詢語(yǔ)句-單表查詢
     [例24] 查詢選修了3號(hào)課程的學(xué)生的學(xué)號(hào)及其成績(jī),查詢結(jié)果按分?jǐn)?shù)降序排列。
    SELECT Sno,Grade
    FROM SC
    WHERE Cno = ’ 3 ’
    ORDER BY Grade DESC;
    查詢語(yǔ)句-單表查詢
     [例25] 查詢?nèi)w學(xué)生情況,查詢結(jié)果按所在系的系號(hào)升序排列,同一系中的學(xué)生按年齡降序排列。
     SELECT *
     FROM Student
     ORDER BY Sdept,Sage DESC;
    查詢語(yǔ)句-單表查詢
    四、使用集函數(shù)
    五類主要集函數(shù)
    計(jì)數(shù)
    COUNT([DISTINCT|ALL] *)
    COUNT([DISTINCT|ALL] <列名>)
    計(jì)算總和
    SUM([DISTINCT|ALL] <列名>)
    計(jì)算平均值
    AVG([DISTINCT|ALL] <列名>)
    查詢語(yǔ)句-單表查詢
    求大值
    MAX([DISTINCT|ALL] <列名>)
    求小值
    MIN([DISTINCT|ALL] <列名>)
    DISTINCT短語(yǔ):在計(jì)算時(shí)要取消指定列中的重復(fù)值
    ALL短語(yǔ):不取消重復(fù)值
    ALL為缺省值
    查詢語(yǔ)句-單表查詢
    [例26] 查詢學(xué)生總?cè)藬?shù)。
     SELECT COUNT(*)
     FROM Student;
    [例27] 查詢選修了課程的學(xué)生人數(shù)。
     SELECT COUNT(DISTINCT Sno)
     FROM SC;
    注:用DISTINCT以避免重復(fù)計(jì)算學(xué)生人數(shù)
    查詢語(yǔ)句-單表查詢
    [例28] 計(jì)算1號(hào)課程的學(xué)生平均成績(jī)。
     SELECT AVG(Grade)
     FROM SC
     WHERE Cno= ’ 1 ’;
    [例29] 查詢選修1號(hào)課程的學(xué)生高分?jǐn)?shù)。
     SELECT MAX(Grade)
     FROM SC
     WHER Cno= ’ 1 ’;
    查詢語(yǔ)句-單表查詢
    五、對(duì)查詢結(jié)果分組
    使用GROUP BY子句分組
    細(xì)化集函數(shù)的作用對(duì)象
    未對(duì)查詢結(jié)果分組,集函數(shù)將作用于整個(gè)查詢結(jié)果
    對(duì)查詢結(jié)果分組后,集函數(shù)將分別作用于每個(gè)組
    查詢語(yǔ)句-單表查詢
    [例30] 求各個(gè)課程號(hào)及相應(yīng)的選課人數(shù)。
     SELECT Cno,COUNT(Sno)
     FROM SC
     GROUP BY Cno;
     結(jié)果
     Cno COUNT(Sno)
     1 22
     2 34
     3 44
     4 33
     5 48
    查詢語(yǔ)句-單表查詢
    對(duì)查詢結(jié)果分組的說(shuō)明
    GROUP BY子句的作用對(duì)象是查詢的中間結(jié)果表
    分組方法:按指定的一列或多列值分組,值相等的為一組
    使用GROUP BY子句后,SELECT子句的列名列表中只能出現(xiàn)分組屬性和集函數(shù)
    查詢語(yǔ)句-單表查詢
    使用HAVING短語(yǔ)篩選終輸出結(jié)果
    [例31] 查詢選修了3門(mén)以上課程的學(xué)生學(xué)號(hào)。
     SELECT Sno
     FROM SC
     GROUP BY Sno
     HAVING COUNT(*) >3;
    查詢語(yǔ)句-單表查詢
     [例32] 查詢有3門(mén)以上課程是90分以上的學(xué)生的學(xué)號(hào)及(90分以上的)課程數(shù)
     SELECT Sno, COUNT(*)
     FROM SC
     WHERE Grade>=90
     GROUP BY Sno
     HAVING COUNT(*)>=3;