【文章內容簡介】
in 子查詢 表達式 [not] in (子查詢) 判斷表達式的值是否在子查詢的結果中。 ? 示例 ? 選修了 001號課程的學生的學號及姓名。 select SNO, SNAME from S where SNO in (select SNO from SC where CNO = 001) 集合成員資格( Ⅱ ) ? 列出選修了 001號和 002號課程的學生的學號。 select SNO from SC where = 001 and SNO in ( select SNO from SC where CNO = 002) ? 列出張軍和王紅同學的所有信息。 select * from S where SNAME in (“張軍”,“王紅”) 集合之間的比較( Ⅰ ) ? some/all子查詢 ? 表達式 比較運算符 ? some (子查詢) 表達式的值至少與子查詢結果中的一個值相比滿足比較運算符 ? 。 ? 表達式 比較運算符 ? all (子查詢) 表達式的值與子查詢結果中的所有的值相比都滿足比較運算符 ?。 集合之間的比較( Ⅱ ) ? 示例 ? 找出平均成績最高的學生號 。 select SNO from SC group by SNO having avg(SCORE) = all ( select avg(SCORE) from SC group by SNO) 集合基數(shù)的測試( Ⅰ ) ? 測試集合是否為空 [not] exists (子查詢) 判斷子查詢的結果集合中是否有任何元組存在。 ? 列出選修了 01號課程的學生的學號及姓名 。 select SNO, SNAME from S where exists ( select * from SC where CNO = 01 and SNO = ) 集合基數(shù)的測試( Ⅱ ) ? 列出選修了 001號和 002號課程的學生的學號。 select SNO from SC SC1 where = 001 and exists ( select SNO from SC SC2 where SC2. CNO = 002 and = ) ? 注: in后的子查詢與外層查詢無關 , 每個子查詢執(zhí)行一次 , 而 exists后的子查詢與外層查詢有關 , 需要執(zhí)行多次 , 稱之為相關子查詢 。 ? 列出至少選修了 001號學生選修的所有課程的學生名 。 select SNAME from S where not exists ( select CNO from COURSE where exists ( select * from SC where = and = 001) and not exists ( select * from SC where = and = ) 任意課程 , 001號學生選之 , 所求學生選之 。 ? 不存在任何一門課程 ,001號學生選之 , 所求學生沒有選之 。 集合基數(shù)的測試( Ⅲ ) ? 測試集合是否存在重復元組 unique (子查詢) 如果子查詢結果中沒有重復元組,則返回 true。 ? 示例 ? 找出所有只教授一門課程的老師姓名 。 select PNAME from PROF where unique ( select PNO from PC where = ) 集合基數(shù)的測試( Ⅳ ) ? 找出至少選修了兩門課程的學生姓名 。 select SNAME from S where not unique ( select SNO from SC where = ) ? 思考 to TRUE or not to TRUE , that is the question. unique { (a , b , null) , (a , b , null) } ? 派生關系( Ⅰ ) ? 命令 (子查詢) as 關系名(列名,列名, … ) SQL92中 , 允許在 from子句中使用子查詢表達式 , 這時可將該子查詢的結果命名為一個 臨時關系 加以引用 。 ? 示例 ? 找出平均成績及格的學生 。 先求出每個學生的平均成績 , 再從中找出及格的學生 select SNAME , avg( SCORE) from S, SC where = group by SC .SNO 派生關系( Ⅱ ) select SNAME , AVG_SCORE from (select SNAME , avg( SCORE) from S, SC where = group by SC .SNO) as result(SNAME , AVG_SCORE ) where AVG_SCORE = 60 派生關系 Vs 視圖? 視圖( Ⅰ ) ? 定義視圖 create view view_name[(列名 [,列名 ] …)] as (查詢表達式) [with check option] 視圖的屬性名缺省為子查詢結果中的屬性名,也可以顯式指明。 with check option指明當對視圖進行 insert, update時,要檢查是否滿足視圖定義中的條件。 ? 撤消視圖 drop view view_name 視圖( Ⅱ ) ? 示例 create view COMPUTER_PROF as (select PNO , PNAME , SAL from PROF, DEPT where = and = “計算機系”) create view DEPTSAL( DNO, LOW, HIGH, AVERAGE, TOTAL ) as ( select DNO, min(SAL), max(SAL), avg(SAL), sum(SAL) from PROF group by DNO ) 視圖( Ⅲ ) ? 給出計算機系工資超過 800的老師姓名 。 select PNAME from COMPUTER_PROF where SAL 800 ? 給出計算機系老師的最低、最高、平均工資以及工資總額。 select LOW , HIGH , AVERAGE , TOTAL from DEPTSAL , DEPT where = and =“計算機系” 關系的連接( Ⅰ ) ? 基本分類 連接成分包括兩個輸入關系 、 連接條件 、 連接類型 。 ? 連接條件 :決定兩個關系中哪些元組相互匹配 , 以及連接結果中出現(xiàn)哪些屬性 。 ? 連接類型 :決定如何處理與連接條件不匹配的元組 。 連接類型 連接條件 inner join left outer join right outer join f