文档详情

数据库原理与应用教程―SQL Server 2019 课件 第8章数据库查询.ppt

发布:2025-05-31约1.39万字共84页下载文档
文本预览下载声明

2)带有EXISTS的子查询(存在性测试)使用子查询进行存在性测试时,通过逻辑运算符EXISTS或NOTEXISTS,检查子查询所返回的结果集是否有行存在。运算符EXISTS:如果在子查询的结果集内包含有一行或多行,则存在性测试返回TRUE;如果不包含任何行,则返回FALSE。NOTEXISTS:将对存在性测试结果取反。8.5.2相关子查询注:EXISTS子查询的目标属性列表达式一般用*表示,因为带EXISTS的子查询只返回真或假值,给出列名无实际意义。【例42】在“teaching”库中查询所有选修了C004号课程的学生姓名。USEteachingSELECTsnameFROMstudentWHEREnotEXISTS(SELECT*FROMscWHEREsno=student.snoANDcno=C004)8.5.2相关子查询使用子查询时要注意以下几点:1)子查询需要用括号()括起来。2)子查询可以嵌套。3)子查询的SELECT语句中不能使用image、text和ntext数据类型。4)子查询返回的结果的数据类型必须匹配外围查询WHERE语句的数据类型。5)子查询中不能使用ORDERBY子句。8.5子查询8.6.1集合查询1.UNION联合查询(并)联合查询是指将两个或两个以上的SELECT语句通过UNION运算符连接起来的查询,可以将两个或更多查询的结果组合为单个结果集,该结果集包含联合查询中所有查询的全部行。使用UNION组合查询的两个基本规则是:所有查询中的列数和列的顺序必须相同;数据类型必须兼容。8.6其他查询【例43】查询选修了课程C001或课程C004的学生的姓名。USEteachingSELECTsnameFROMsc,studentWHEREcno=C001andsc.sno=student.snoUNIONSELECTsnameFROMsc,studentWHEREcno=C004andsc.sno=student.sno又例:查询所有学生的学号、姓名和所有教师编号、姓名。8.6.1集合查询2.EXCEPT(差)和INTERSECT查询(交)【例44】查询计算机专业没有选修操作系统课程的学生的学号和姓名。SELECTsno,snameFROMstudentWHEREspecialty=计算机EXCEPTSELECTsc.sno,snameFROMsc,studentWHEREsc.sno=student.snoANDspecialty=计算机ANDcnoIN(SELECTcnoFROMcourseWHEREcname=操作系统)8.6.1集合查询2.EXCEPT(差)和INTERSECT查询(交)【例45】查询既选修了C001又选修了C004课程的学生的学号。SELECTsnoFROMscWHEREcno=C001INTERSECTSELECTsnoFROMscWHEREcno=C0048.6.1集合查询排序是指按照指定的列或其他表达式对结果集进行排列顺序的方式。SELECT语句中的ORDERBY子句负责完成排序操作,一般位于整个语句的最末尾。所以,子查询的SELECT语句不能使用ORDERBY子句,ORDERBY子句只能对最终查询结果排序。8.6.2对查询结果排序【例46】查询“teaching”库中“女”学生的姓名和专业,并按姓名升序排列。USEteachingSELECTsname,specialtyFROMstudentWHEREssex=女ORDERBYsnameASC8.6.2对查询结果排序【例48】查询“sc”中学生的成绩和学号,并按成绩(降序)排列,若成绩相同按学号(升序)排列。USEteachingSELECTsno,scoreFROMscORDERBYscoreDESC,snoASC【例49】使用TOP关键字查询平均成绩最高的前三名。USEteachingSELECTTOP3sno,AVG(score)平均成绩FROMscGROUPBYsnoORDERBYAVG(score)DESC8.6.2对查询结果排序通过在SELECT语句中使用INTO子句,可以创建一个新表并将查询结果中的行添加到该表中。语法格式:SELECTselect_listINTOnew_tableFROM

显示全部
相似文档