第3章 单表查询

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

SQL的数据查询操作数据查询语句是SQL的核心,是SQL数据操纵功能的重要组成部分。SQL的查询语句使用非常灵活,功能十分强大,可以实现:简单查询连接查询嵌套查询查询语句的一般形式查询语句的一般形式是:SELECT目标列FROM基本表名或视图名[WHERE条件表达式][GROUPBY列名1[HAVING条件表达式]][ORDERBY列名2[次序]]SELECT子句指明要查询的项目FROM子句指明被查询的基本表或视图WHERE子句指明查询的条件GROUPBY子句指明如何将查询结果进行分组ORDERBY子句指明查询结果如何排序3.4.1单表查询简单查询:实现在单个基本表上的投影、选择和经过计算等的查询,暂不涉及多个基本表的连接查询和嵌套查询等复杂的情况。查询指定列〖例1〗在基本表S中查询全体学生的学号与姓名。〖例2〗查询全体学生的姓名、学号、所在系SELECTSno,SnameFROMStudentSELECTSname,Sno,SdeptFROMStudent;注:目标列表达式中各个列的先后顺序可以与表中的顺序不一致。可以根据需要去改变列的显示顺序简单查询—选择表中的列(续)查询全部列在基本表S中查询全体学生的详细信息。①SELECT*FROMStudent由于是查询S表的全部属性,所以在SELECT的后面使用符号“*”。该查询语句等价于:②SELECTSno,Sname,Ssex,Sage,SdeptFROMStudent简单查询—选择表中的列(续)3.查询经过计算的值例4查全体学生的姓名及其出生年份selectSname,2011-SagefromStudentSname2011-Sage李勇1991刘晨1992王敏1993张立1992简单查询—选择表中的列(续)例5查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名。Sname‘YearofBirth:’李勇YearofBirth:1991cs刘晨YearofBirth:1992is王敏YearofBirth:1993ma张立YearofBirth:1992isselectSname,'YearofBirth:',2011-Sage,LOWER(sdept)fromStudent简单查询—选择表中的列(续)用户可以通过指定别名来改变查询结果的列标题。NAMEBIRTHBIRTHDAYDEPARTMENT李勇YearofBirth:1985cs刘晨YearofBirth:1986is王敏YearofBirth:1987ma张立YearofBirth:1986isselectSnameNAME,'YearofBirth:'BIRTH,2005-SageBIRTHDAY,LOWER(sdept)DEPARTMENTfromStudent;选择表中的若干元组例6查询选修了课程的学生学号结果消除重复的行=默认为all选择表中的若干元组2查询满足条件的元组常用的查询条件查询条件谓词比较(比较运算符)=、、=、、=、(!=)、NOT确定范围BETWEENAND,NOTBETWEENAND确定集合IN,NOTIN字符匹配LIKE,NOTLIKE空值ISNULL,ISNOTNULL多重条件AND,OR选择表中的若干元组一比较大小例7查询计算机系全体学生的名单SelectSnamefromstudentwhereSdept='CS';例9查询考试成绩有不及格的学生的学号SelectdistinctSnofromCoursewhereGrade60;例8查询所有年龄在20岁以下的学生姓名及其年龄SelectSname,SagefromstudentwhereSage20;选择表中的若干元组二确定范围谓词:between…and…和notbetween…and…selectSname,Sdept,SagefromStudentwhereSagenotbetween20and23;例11查询年龄不在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄selectSname,Sdept,SagefromStudentwhereSagebetween20and23;例10查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄等价形式选择表中的若干元组三确定集合谓词in用来查找属性值属于指定集合的元组例12查询信息系(IS)、数学系(MA)和计算机系(CS)学生的姓名和性别。SelectSname,SsexfromStudentwhereSdeptin('IS','MA','CS')例13查询既不是信息系(IS)、数学系(MA)也不是计算机系(CS)学生的姓名和性别。SelectSname,SsexfromStudentwhereSdeptnotin('IS','MA','CS')选择表中的若干元组四字符匹配谓词like可以用来进行字符串的匹配。语法格式如下:[not]like‘匹配串’[escape‘换码字符’]含义:查找指定的属性列值与匹配串相匹配的元组。匹配串可以是一个完整的字符串,也可以含有通配符%和_。其中:%代表任意长度(长度可以为0)的字符串。例如a%b表示以a开头,以b为结尾的任意长度的字符串。_(下划线)代表任意单个字符。选择表中的若干元组例14查询学号为200215121的学生的详细情况select*fromstudentwhereSnolike'200215121';等价于select*fromstudentwhereSno='200215121';例15查询所有姓刘的学生的姓名、学号和性别selectSname,Sno,SsexfromStudentwhereSnamelike'刘%'例16查询姓“欧阳”且全名为三个汉字的学生的姓名selectSnamefromStudentwhereSnamelike‘欧阳_’;选择表中的若干元组例17查询名字中第2个字为“阳”字的学生的姓名和学号例18查询所有不姓刘的学生姓名例19查询DB_Design课程的课程号和学分例20查询以“DB_”开头,且倒数第3个字符为i的课程的详细情况selectSname,SnofromStudentwhereSnamelike'_阳%';selectSname,Sno,SsexfromstudentwhereSnameNOTLIKE'刘%'selectCno,CcreditfromCoursewhereCnameLIKE'DB\_design'escape'\'Select*fromCoursewhereCnamelike'DB\_%i__'escape'\'选择表中的若干元组五涉及空值的查询例21某些学生选修课程后没有参加考试,所有有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。selectSno,CnofromSCwhereGradeISNULL例22查询所有有成绩的学生学号和课程号selectSno,CnofromSCwhereGradeisnotnull“is”不能用“=”来表示选择表中的若干元组六多重条件查询用逻辑运算符and和or可用来联结多个查询条件,但and的优先级要高于or,可以用括号来改变优先级例23查询计算机系年龄在20岁以下的学生姓名selectSnamefromStudentwhereSdept='CS'ANDSage20;对查询结果进行排序关键词:orderby可以用orderby对查询结果按照一个或多个属性列的升序ASC或降序DESC排序,缺省值为ASC例24查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列selectSno,GradefromSCwhereCno='3'orderbyGradeDESC注:对于空值,若按升序排,含空值的元组将最前显示。若按降序排,空值的元组将最后显示例25查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。select*fromStudentorderbySdept,SageDESC;四、使用集函数5类主要集函数计数COUNT([DISTINCT|ALL]*)COUNT([DISTINCT|ALL]列名)计算总和SUM([DISTINCT|ALL]列名)计算平均值AVG([DISTINCT|ALL]列名)使用集函数(续)求最大值MAX([DISTINCT|ALL]列名)求最小值MIN([DISTINCT|ALL]列名)DISTINCT短语:在计算时要取消指定列中的重复值ALL短语:不取消重复值ALL为缺省值使用集函数(续)[例26]查询学生总人数。[例27]查询选修了课程的学生人数。用DISTINCT以避免重复计算学生人数使用集函数(续)[例28]计算1号课程的学生平均成绩。[例29]查询选修1号课程的学生最高分数。五、对查询结果分组使用GROUPBY子句分组细化集函数的作用对象未对查询结果分组,集函数将作用于整个查询结果对查询结果分组后,集函数将分别作用于每个组使用GROUPBY子句分组[例30]求各个课程号及相应的选课人数。对查询结果分组(续)GROUPBY子句的作用对象是查询的中间结果表分组方法:按指定的一列或多列值分组,值相等的为一组使用GROUPBY子句后,SELECT子句的列名列表中只能出现分组属性和集函数使用HAVING短语筛选最终输出结果[例31]查询选修了3门以上课程的学生学号。例题[例32]查询有3门以上课程是90分以上的学生的学号及(90分以上的)课程数使用HAVING短语筛选最终输出结果只有满足HAVING短语指定条件的组才输出HAVING短语与WHERE子句的区别:作用对象不同WHERE子句作用于基表或视图,从中选择满足条件的元组。HAVING短语作用于组,从中选择满足条件的组。题目:公司员工上班,来一天有一天的记录,请写出查询公司员工最后一天来的记录.Worker(Wno,Wname,Wdate)SelectWno,max(wdate)fromworkergroupbyWno

1 / 30
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功