文档详情

数据库SQL语言课件.ppt

发布:2025-04-05约2.41万字共10页下载文档
文本预览下载声明

子查询向主查询只返回一个值,即刘伟教师的职称“讲师”,然后以此作为父查询的条件,相当于再执行父查询,查询所有职称为“讲师”的教师号、姓名。SELECTTNO,TNFROMTWHEREPROF=’讲师’3214如果子查询的返回值不止一个,而是一个集合时,则不能直接使用比较运算符,可以在比较运算符和子查询之间插入ANY或ALL。其具体含义详见以下各例。3.3.7.2返回一组值的子查询01例3.53查询讲授课程号为C5的教师姓名。SELECTTNFROMTWHERETNO=ANY(SELECTTNOFROMTCWHERECNO=C5)使用ANY02先执行子查询,找到讲授课程号为C5的教师号,为一组值构成的集合(T2,T3,T5);再执行父查询,其中ANY的含义为任意一个,查询教师号为T2、T3、T5的教师的姓名。该例也可以使用前面所讲的连接操作来实现:SELECTTNFROMT,TCWHERET.TNO=TC.TNOANDTC.CNO=C5‘可见,对于同一查询可使用子查询和连接两种方法来解决,可根据习惯任意选用。例3.54查询其他系中比计算机系某一教师工资高的教师的姓名和工资。SELECTTN,SALFROMTWHERESALANY(SELECTSALFROMTWHEREDEPT=计算机)ANDDEPT!=计算机 /*注意:此行是父查询中的条件*/先执行子查询,找到计算机系中所有教师的工资集合(1500,900);再执行父查询,查询所有不是计算机系且工资高于1500或900的教师姓名和工资。此查询也可以写成:SELECTTN,SALFROMTWHERESAL(SELECTMIN(SAL)FROMTWHEREDEPT=计算机)ANDDEPT!=‘计算机’先执行子查询,利用库函数MIN找到计算机系中所有教师的最低工资——900;再执行父查询,查询所有不是计算机系且工资高于900的教师。使用IN可以使用IN代替“=ANY”。例3.55(题目同3.53)SELECTTNFROMTWHERETNOIN(SELECTTNOFROMTCWHERECNO=C5)3.使用ALLALL的含义为全部。例3.56查询其他系中比计算机系所有教师工资都高的教师的姓名和工资。SELECTTN,SALFROMTWHERESALALL(SELECTSALFROMTWHEREDEPT=计算机)ANDDEPT!=‘计算机’子查询找到计算机系中所有教师的工资集合(1500,900);父查询找到所有不是计算机系且工资高于1500的教师姓名和工资。此查询也可以写成:SELECTTN,SALFROMTWHERESAL(SELECTMAX(SAL)FROMTWHEREDEPT=计算机)ANDDEPT!=‘计算机’库函数MAX的作用是找到计算机系中所有教师的最高工资1500。例3.57查询不讲授课程号为C5的教师姓名。SELECTDISTINCTTNFROMTWHEREC5!=ALL(SELECTCNOFROMTCWHERETNO=T.TNO)!=ALL的含义为不等于子查询结果中的任何一个值,也可使用NOTIN代替!=ALL。子查询包含普通子查询和相关子查询。前面所讲的子查询均为普通子查询,而本例中子查询的查询条件引用了父查询表中的属性值(T表的TNO值),我们把这类查询称为相关子查询。条件查询当要在表中找出满足某些条件的行时,则需使用WHERE子句指定查询条件。WHERE子句中,条件通常通过三部分来描述:1.????列名;2.????比较运算符;3.????列名、常数。运算符含义=,,,=,=,!=比较大小多重条件AND,ORBETWEENAND确定范围IN确定集合LIKE字符匹配ISNULL空值表3.8常用的比较运算符3.3.2.1比较大小01例3.25查询选修课程号为‘C1’的学生的学号和成绩。SELECTSNO,SCOREFROMSCWHERECNO=’C1’例3.26查询成绩高于

显示全部
相似文档