《数据库原理查询语句 典型例题.docx》由会员分享,可在线阅读,更多相关《数据库原理查询语句 典型例题.docx(12页珍藏版)》请在三一办公上搜索。
1、第6章-数据库原理查询语句典型例题MEU基本的SELECT查询2条件查询2排序查询5分组查询6筛选查询7联结查询7嵌套查询10综合实例11基本的SELECT查询例1在数据库teachingData中查询TchInfo表中教师的TID、TName和Title, 要求将列名分别显示为工号、姓名和职称。USE teachingData;SELECT TID AS 工号,TName AS 姓名,Title AS 职称 FROM TchInfo;例2在数据库teachingData中查询TchInfo表中教师的全部信息。USE teachingData;SELECT * FROM TchInfo;例3
2、在数据库teachingData中查询TchInfo表的前6行。USE teachingData;SELECT TOP 6 * FROM TchInfo;例4 在数据库teachingData中查询TchInfo表中前50%的数据USE teachingData;SELECT TOP 50 PERCENT * FROM TchInfo;例5在数据库teachingData中查询TchInfo表所有教师的Title (职称)信息(要 求重复信息只出现一次)。USE teachingData;SELECT DISTINCT Title FROM TchInfo;DISTINCT指定在结果集显示唯一
3、行,空值被认为相等,用于消除取值重复的行。条件查询1)比较查询例6查询StuInfo表中的Grade (年级)为“05级”、Major (专业)为“计算机科学” 专业的学生信息。USE teachingDATA;SELECT * FROM StuInfo;WHERE Major=计算机科学5AND Grade=05 级,;例6+修改上述信息为:USE teachingData;SELECT SName AS 姓名,Sex AS 性别,Dept AS 院系,FROM StuInfo;WHERE Major=计算机科学5AND Grade=05 级,;2)范围查询例7查询StuInfo中Birth
4、day (生日)介于1984年9月1日到1985年8月31日 的学生信息。USE teachingData;SELECT * FROM StuInfo;WHERE Birthday BETWEEN41984-9-1 AND1985-8-31;例8查询StuInfo中Birthday (生日)早于1984年9月1日和晚于1985年8月31日的学生信息。USE teachingData;SELECT * FROM StuInfo;WHERE Birthday NOT BETWEEN1984-9-1 AND1985-8-31;例9查询Title (职称)为“副教授”或“教授”的教师信息。USE te
5、achingData;SELECT * FROM TchInfo;WHERE Title IN (副教授,教授);例10查询Title不是“教授”或“副教授”的老师信息USE teachingData;SELECT * FROM TchInfo;WHERE Title NOT IN (,教授,副教授,);3)模糊查询通配符含义%表示0n个任意字符表示单个的任意字符表示方括号中列出的任意字符A表示任意 个没有在方括号里列出的字符例11查询StuInfo表中所有姓“李”的学生。USE teachingData;SELECT * FROM StuInfoWHERE SName LIKE 李例12查询
6、所有SID (学号)以“05”开头,最后一位是“1”的学生信息。USE teachingData;SELECT * FROM StuInfoWHERE SID LIKE 05%1 ;例13查询所有SID (学号)以“05”开头,第四位是“0”或“1”的学生信息。USE teachingDataSELECT * FROM StuInfoWHERE SID LIKE 05_0,1% ;例14查询所有SID (学号)以“05”开头,最后一位不是“0”或“1”的学生 信息。USE teachingDataSELECT * FROM StuInfoWHERE SID LIKE 05%人0,1 ;如果搜索
7、的字符串中包含真正的这些通配符,就需要将这些特殊字符标识出来。 有两种方法。(1)使用ESCAPE关键字定义转义字符例15假设Scoreinfo表中某些成绩含有“ ”,要查询以“ ”结尾的字符串。USE teachingDataSELECT * FROM ScoreinfoWHERE Score LIKE %a% /*将a定义为转义字符,则a后面的一个被解释为普通字符。前一个为通配字符。*/ESCAPE a;(2)使用方括号来将通配符指定为普通字符。例15+USE teachingDataSELECT * FROM ScoreInfoWHERE Score LIKE %;/*将指定为普通字符*
8、/4)空值判断查询例16查询CourseInfo表中所有CProperty为空的课程信息。USE teachingDataSELECT * FROM CourseInfoWHERE CProperty IS NULL;5)使用逻辑运算查询例17查询表ScoreInfo中Score (成绩)位于7090分的记录信息。USE teachingDataSELECT * FROM ScoreInfoWHERE Score =70 AND Score 76;联结查询1) 等值于非等值联结查询例23查询每个教师的信息及主讲课程的信息USE teachingData;SELECT DISTINCT TchI
9、nfo.*, ScoreInfo.*FROM TchInfo, ScoreInfoWHERE TchInfo.TID=ScoreInfo.TID;/*将TchInfo和ScoreInfo中同一教师的元组联结起来。*/例24用自然联结实现上例USE TchInfo.TID, Tname, Sex, Birthday, Title, Dept, CID, SID, Score, Schyear, Term FROM TchInfo, ScoreInfoWHERE TchInfo.TID=ScoreInfo.TID;2)符合条件联结 对两个以上的表进行联结查询例25查询每门课成绩在70分以上的所有学
10、生的Sname (姓名),CID (课程编号),Score (成绩)USE teachingDataSELECT StuInfo.Sname, ScoreInfo.CID, ScoreInfo.ScoreFROM StuInfo,ScoreInfoWHERE StuInfo.CID=ScroeInfo.CID AND ScoreInfo.Score 70;例26查询了选修了高等数学课程且成绩在70分以上的所有学生的成绩及姓名。USE teachingDataSELECT StuInfo.Sname, ScoreInfo.ScoreFROM StuInfo, ScroeInfoWHERE Stu
11、Info.CID=ScoreInfo.CID AND ScoreInfo.Score 70 ANDStuInfo.SID=Score.SID AND CoureInfo.Cname=高等数学; 使用JOIN和ON的联结查询在FROM子句中,使用JOIN联结不同的表,使用ON给出两个表之间的连接 条件。例27使用JOIN和ON的联结查询,查询每门课成绩在70分以上的所有学生的Sname (姓名),CID (课程号),Score (成绩)。USE teachingDataSELECT StuInfo.Sname, ScoreInfo.CID, ScoreInfo.ScoreFROM StuInfo
12、 JOIN ScoreInfo ON StuInfo.SID=ScoreInfo.SIDWHERE ScoreInfo.Score 70;例28利用JOIN和ON命令查询选修了高等数学课程且成绩在70分以上的所 有学生姓名成绩。USE teachingDataSELECT StuInfo.Sname, ScoreInfo.Socre FROM StuInfoJOIN Scoreinfo On StuInfo.SID=ScoreInfo.SIDWHERE ScoreInfo.Score 70 AND SID IN(SELECT SID FROM CourseInfo WHERE CName=高等
13、数学)/*使用了嵌套查询*/3)自身联结(两个同样的表)例29在ScoreInfo中,查询具有相同Score(成绩)的课程信息,给出SID(学 号),CID(课程号),Score(成绩)。在查询中,需要维保ScoreInfo指定两个 别名si和s2。USE teachingDataSELECT DISTINCT si.SID, si.CID, s2.ScoreFROM ScoreInfo si JOIN ScoreInfo s2 ON si.Score=s2.Score /* 这一行说明 */WHERE si.CID s2.CID4)外联结 左外联结例30查询学生信息表StuInfo中的所有记
14、录,并将与成绩信息表ScoreInfo中学 号字段SID可以匹配的记录输出到结果集。USE teachingDataSELECT *FROM StuInfo LEFT OUTER JOIN ScoreInfo ON ScoreInfo.SID=TchInfo.SID; 右外联结例3i查询成绩信息表ScoreInfo中的所有记录,并将与教师信息表TchInfo中 工号字段TID可以匹配的记录输出到结果集。USE teachingDataSELECT *FROM ScoreInfo RIGHT OUTER JOIN TchInfo ON ScoreInfo.TID=TchInfo.TID;嵌套查询
15、嵌套查询是指在一个外层查询中包含有另一个内层查询,其中外层查询成为主查 询,内层查询称为子查询。例32查询选修了 001课程的学生姓名USE teachingDataSELECT Sname FROM StuInfoWHERE SID IN(SELECT SID FROM ScoreInfoWHERE CID= 001 );例33查询没有选修课程001的学生姓名。USE teachingDataSELECT Sname FROM StuInfoWHERE SID NOT IN(SELECT SID FROM ScoreInfoWHERE CID = 001 );例34查询与王晓红老师职称相同的
16、老师工号TID,姓名TName和职称Title。USE teachingDataSELECT TID, TName, Title FROM TchInfoWHERE Title= /*能否换成 IN? */(SELECT Title FROM TchInfoWHERE TName=王晓红);例35查询Score成绩比“0503”号同学的所有成绩都高的同学的学号和成绩。USE teachingDataSELECT SID, Score FROM ScorInfoWHERE SCORE ALL(SELECT Score FROM ScoreInfoWHERE SID = 0503 );例36查询讲
17、授CID (课程号)为001的教师姓名USE teachingDataSELECT TName FROM TchInfoWHERE TID =ANY(SELECT TID FROM ScoreInfo /*ANY 什么意思? */WHERE CID = 001 );综合实例例37现有数据库teachingData,查询有不合格课程的学生学号,姓名,课程名。USE teachingDataSELECT StuInfo.SID, StuInfo.SName, CourseInfo.CNameFROM StuInfo, ScoreInfo, CourseInfoWHERE StuInfo.CID=CourseInfo.CID ANDScoreInfo.Score 60 ANDStuInfo.SID = ScoreInfo.SID;