:① SELECTS#,SNAMEFROMSWHEREAGE<17ANDSEX=’F’;②#,CNAME(联接查询方式)FROMS,SC,#=##=#ANDSEX=’M’;或:SELECTC#,CNAME(嵌套查询方式)FROMCWHEREC#IN(SELECTC#FROMSCWHERES#IN(SELECTS#FROMSWHERESEX=’M’));或:SELECTC#,CNAME(存在量词方式)FROMCWHEREEXISTS(SELECT*#=#ANDEXISTS(SELECT*#=#ANDSEX=’M’));EXISTS表示存在量词,EXISTS操作符后子查询的结果集中如果不为空,则产生逻辑真值“true”,否则产生假值“false”这类查询和不相关子查询有一个明显区别,即子查询的查询条件依赖于外层父查询的某个属性值,内层查询由于与外层查询有关,因此必须反复求值一般处理过程为:首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,若WHERE子句返回值为真,则取此元组放入结果表,然后再取外层表的下一个元组,重复这一过程,直到外层表全部查完为止。③ #,TNAMEFROMT,SC,C,#=##=##=#ANDSEX=’M’;④ SELECTDISTINCTX..S#FROMSCASX,#=##!=#;SELECTC#FROMSCASX,#=##=’S2’#=’S4’;⑥SELECTC#FROMCWHERENOTEXISTS (SELECT* FROMS,SC #=##=# ANDSNAME=’WANG’);⑦SELECTC#,CNAMEFROMCWHERENOTEXISTS(SELECT*FROMSWHERENOTEXISTS (SELECT* FROMSC WHERES#=#ANDC#=#));外层循环依次扫描C关系中的每个元组,中层循环依次扫描S关系中的每个元组,内层循环依次扫描SC关系中的每个元组,对于C关系中的每个元组,若有一个学生没有选修,则最内层查询为空,得出中层选择条件为真,进而得出中层查询不为空,从而外层的选择条件为假,该课程不会选出来放到结果集中。所以,只有某个课程被学生中的所有学生选修,最内层查询每次都不为空,中层选择条件每次都为假,得出中层查询结果为空,进而得出外层选择条件为真,该课程元组被选择出来放到结果集中。⑧SELECTDISTINCTS#FROMSCASXWHERENOTEXISTS (SELECT* FROMC,T #=#ANDTNAME=’LIU’ ANDNOTEXISTS (SELECT* FROMSCASY #=##=#));或者SELECTDISTINCTS#FROMSCASXWHERENOTEXIST
【数据库应用黄皮本】第3章关系数据库语言SQL 来自淘豆网www.taodocs.com转载请标明出处.