【正文】
EXIST代表存在量詞? ,用在 WHERE中,后面跟子查詢,構(gòu)成一個條件。程序的執(zhí)行過程如下: 主查詢: SELETE S, C, G FROM SC WHERE G (待查學(xué)生所選課程的平均分 ) 子查詢: SELETE AVG(G) FROM SC WHERE C = (主查詢待選行的課程號 C) 掃描 SC: → Record1 … … 喚醒 子查詢,把 Record1的 C傳給 子查詢 ,子查詢根據(jù)主查詢的 C,計算 C的平均分并送回主查詢。 解: 1)在 SC中求 C108的平均分 (這是子查詢返回單值 ,且只執(zhí)行一次 ) 2)在 SC中求高于平均分的成績表 (這是主查詢 ) SELETE S, C, G FROM SC WHERE C =‘C108’ AND G (SELETE AVG(G) FROM SC WHERE C =‘C108’) ORDER BY G DESC; 這是簡單子查詢 31 查詢 【 例 12】 查詢其成績比該課程平均成績高的學(xué)生成績表。 (2)相關(guān)子查詢: 子查詢的查詢條件依賴于外層父查詢的某個屬性值,子查詢反復(fù)執(zhí)行。 SELETE S, SN, SA FROM S WHERE SA IN (SELETE SA FROM S WHERE SN =‘陳莉 ’ ); 29 查詢 嵌套查詢引出子查詢的概念,子查詢分為三種 : (1)簡單 子查詢: 子查詢只執(zhí)行一次,其結(jié)果用于父查詢,子查詢的查詢條件不依賴于父查詢。 【 例 10】 查詢與陳莉同年齡的所有學(xué)生。 SELECT , , FROM SC a1, SC a2 WHERE =‘C902’ AND AND =‘BP00204018’ AND =‘C902’; a1和 a2是為 SC定義了兩個不同的別名 ,相當(dāng)于對 SC表作自身連接 28 查詢 當(dāng)一個查詢是另一個查詢的條件時,需要用嵌套查詢來實現(xiàn)。 解: 題目要求查詢所有選修了某門課程且成績高于另一指定的也選修了此門課的學(xué)生成績。因此,這是一個等值連接。 解: 經(jīng)分析可知,有關(guān)學(xué)生情況存儲在 S表中,而選課情況存儲在 SC表中,所以此查詢涉及兩個表中的數(shù)據(jù)。因此在查詢中,經(jīng)常涉及到多個表的數(shù)據(jù),這就需要進行連接查詢,這是關(guān)系數(shù)據(jù)庫中最主要的查詢。 24 查詢 【 例 7】 查詢選修了 3門以上 4學(xué)分課程的學(xué)生的學(xué)號。 解: SELECT AVG( G) FROM SC WHERE C =‘C810’; 23 查詢 使用聚合函數(shù)可以實現(xiàn)對關(guān)系中的所有查詢的元組進行聚合運算,但在實際應(yīng)用中,經(jīng)常要將查詢的結(jié)果分組,然后再對每個分組進行統(tǒng)計。 解: SELECT S , G FROM SC WHERE C =‘C810’ ORDER BY G DESC; 21 查詢 聚合函數(shù)用于實現(xiàn)數(shù)據(jù)統(tǒng)計功能, SQL提供了許多聚合函數(shù),主要包括: ? COUNT([DISTINCT/ALL]*) 統(tǒng)計元組個數(shù) ? COUNT([DISTINCT/ALL]列名 ) 統(tǒng)計一列中值的個數(shù) ? SUM([DISTINCT/ALL]列名 ) 計算一列值的總和 ? AVG([DISTINCT/ALL]列名 ) 計算一列值的平均值 ? MAX([DISTINCT/ALL]列名 ) 求一列值中的最大值 ? MIN([DISTINCT/ALL]列名 ) 求一列值中的最小值 22 查詢 【 例 5】 查詢選修了課程的學(xué)生人數(shù)。 ORDER BY子句對指定的一個或多個屬性列,可按升序 (ASC)或降序(DESC)重新排列。 解: SELECT DISTINCT S FROM SC WHERE G< 60; 【 例 3】 查詢計算機系或信息系年齡在 20歲以下的學(xué)生姓名。 查詢 【 例 1】 查詢?nèi)w學(xué)生的姓名,學(xué)號,所在系。 而 選擇運算 對應(yīng)于 WHERE子句 ,可通過不同的 行條件表達式 ,查詢滿足