您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > SQL查询教学PPT
查询数据查询语句格式SELECT[ALL|DISTINCT]目标列表达式[,目标列表达式]…FROM表名或视图名[,表名或视图名]…[WHERE条件表达式][GROUPBY列名1[HAVING条件表达式]][ORDERBY列名2[ASC|DESC]];单表查询查询仅涉及一个表:一、选择表中的若干列二、选择表中的若干元组三、ORDERBY子句四、聚集函数五、GROUPBY子句1、选择表中的若干列查询指定列查询全体学生的学号与姓名。SELECTSno,SnameFROMStudent;查询全体学生的姓名、学号、所在系。SELECTSname,Sno,SdeptFROMStudent;2.查询全部列选出所有属性列:在SELECT关键字后面列出所有列名将目标列表达式指定为*查询全体学生的详细记录。SELECTSno,Sname,Ssex,Sage,SdeptFROMStudent;或SELECT*FROMStudent;3.查询经过计算的值SELECT子句的目标列表达式可以为:–算术表达式–字符串常量–函数–列别名查全体学生的姓名及其出生年份。SELECTSname,2004-Sage/*假定当年的年份为2004年*/FROMStudent;输出结果:Sname2004-Sage李勇1984刘晨1985王敏1986张立1985查询经过计算的值(续)查询经过计算的值(续)查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名SELECTSname,‘YearofBirth:',2004-Sage,LOWER(Sdept)FROMStudent;输出结果:Sname'YearofBirth:'2004-SageISLOWER(Sdept)李勇YearofBirth:1984cs刘晨YearofBirth:1985is王敏YearofBirth:1986ma张立YearofBirth:1985is查询经过计算的值(续)使用列别名改变查询结果的列标题:SELECTSnameNAME,'YearofBirth:’BIRTH,2000-SageBIRTHDAY,LOWER(Sdept)DEPARTMENTFROMStudent;输出结果:NAMEBIRTHBIRTHDAYDEPARTMENT------------------------------------------------------李勇YearofBirth:1984cs刘晨YearofBirth:1985is王敏YearofBirth:1986ma张立YearofBirth:1985is单表查询查询仅涉及一个表:一、选择表中的若干列二、选择表中的若干元组三、ORDERBY子句四、聚集函数五、GROUPBY子句选择表中的若干元组1.消除取值重复的行如果没有指定DISTINCT关键词,则缺省为ALL查询选修了课程的学生学号。SELECTSnoFROMSC;等价于:SELECTALLSnoFROMSC;执行上面的SELECT语句后,结果为:Sno200215121200215121200215121200215122200215122消除取值重复的行(续)指定DISTINCT关键词,去掉表中重复的行SELECTDISTINCTSnoFROMSC;执行结果:Sno2002151212002151222.查询满足条件的元组查询条件谓词比较=,,,=,=,!=,,!,!;NOT+上述比较运算符确定范围BETWEENAND,NOTBETWEENAND确定集合IN,NOTIN字符匹配LIKE,NOTLIKE空值ISNULL,ISNOTNULL多重条件(逻辑运算)AND,OR,NOT表3.4常用的查询条件(1)比较大小查询计算机科学系全体学生的名单。SELECTSnameFROMStudentWHERESdept=‘CS’;查询所有年龄在20岁以下的学生姓名及其年龄。SELECTSname,SageFROMStudentWHERESage20;查询考试成绩有不及格的学生的学号。SELECTDISTINCTSnoFROMSCWHEREGrade60;(2)确定范围谓词:BETWEEN…AND…NOTBETWEEN…AND…查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄SELECTSname,Sdept,SageFROMStudentWHERESageBETWEEN20AND23;查询年龄不在20~23岁之间的学生姓名、系别和年龄SELECTSname,Sdept,SageFROMStudentWHERESageNOTBETWEEN20AND23;(3)确定集合谓词:IN值表,NOTIN值表查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。SELECTSname,SsexFROMStudentWHERESdeptIN('IS','MA','CS');查询既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别。SELECTSname,SsexFROMStudentWHERESdeptNOTIN('IS','MA','CS');(4)字符匹配谓词:[NOT]LIKE‘匹配串’[ESCAPE‘换码字符’]1)匹配串为固定字符串查询学号为200215121的学生的详细情况。SELECT*FROMStudentWHERESnoLIKE‘200215121';等价于:SELECT*FROMStudentWHERESno='200215121';字符匹配(续)2)匹配串为含通配符的字符串,SQLServer提供了四种通配符:%代表任意多个字符,_(下划线)代表单个字符,[]代表指定范围内的单个字符,[^]代表不在指定范围内的单个字符。查询所有姓刘学生的姓名、学号和性别。SELECTSname,Sno,SsexFROMStudentWHERESnameLIKE‘刘%’;查询姓欧阳且全名为三个汉字的学生的姓名。SELECTSnameFROMStudentWHERESnameLIKE'欧阳__';字符匹配(续)查询名字中第2个字为阳字的学生的姓名和学号。SELECTSname,SnoFROMStudentWHERESnameLIKE‘__阳%’;查询所有不姓刘的学生姓名。SELECTSname,Sno,SsexFROMStudentWHERESnameNOTLIKE'刘%';字符匹配(续)3)使用换码字符将通配符转义为普通字符查询DB_Design课程的课程号和学分。SELECTCno,CcreditFROMCourseWHERECnameLIKE'DB\_Design'ESCAPE'\‘;查询以DB_开头,且倒数第3个字符为i的课程的详细情况。SELECT*FROMCourseWHERECnameLIKE'DB\_%i__'ESCAPE'\‘;ESCAPE'\'表示“\”为换码字符(5)涉及空值的查询谓词:ISNULL或ISNOTNULL“IS”不能用“=”代替某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。SELECTSno,CnoFROMSCWHEREGradeISNULL查所有有成绩的学生学号和课程号。SELECTSno,CnoFROMSCWHEREGradeISNOTNULL;(6)多重条件查询逻辑运算符:AND和OR来联结多个查询条件AND的优先级高于OR可以用括号改变优先级可用来实现多种其他谓词[NOT]IN[NOT]BETWEEN…AND…多重条件查询(续)查询计算机系年龄在20岁以下的学生姓名。SELECTSnameFROMStudentWHERESdept='CS'ANDSage20;多重条件查询(续)改写查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。SELECTSname,SsexFROMStudentWHERESdeptIN('IS','MA','CS')可改写为:SELECTSname,SsexFROMStudentWHERESdept='IS'ORSdept='MA'ORSdept='CS';单表查询查询仅涉及一个表:一、选择表中的若干列二、选择表中的若干元组三、ORDERBY子句四、聚集函数五、GROUPBY子句ORDERBY子句ORDERBY子句可以按一个或多个属性列排序升序:ASC;降序:DESC;缺省值为升序当排序列含空值时ASC:排序列为空值的元组最后显示DESC:排序列为空值的元组最先显示ORDERBY子句(续)查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。SELECTSno,GradeFROMSCWHERECno='3'ORDERBYGradeDESC;查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。SELECT*FROMStudentORDERBYSdept,SageDESC;嵌套查询嵌套查询概述–一个SELECT-FROM-WHERE语句称为一个查询块–将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询嵌套查询(续)SELECTSname/*外层查询/父查询*/FROMStudentWHERESnoIN(SELECTSno/*内层查询/子查询*/FROMSCWHERECno='2');插入插入数据两种插入数据方式1.插入元组2.插入子查询结果可以一次插入多个元组一、插入元组语句格式INSERTINTO表名[(属性列1[,属性列2…)]VALUES(常量1[,常量2]…)功能将新元组插入指定表中插入元组(续)INTO子句属性列的顺序可与表定义中的顺序不一致没有指定属性列指定部分属性列VALUES子句提供的值必须与INTO子句匹配值的个数值的类型插入元组(续)[例1]将一个新学生元组(学号:200215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。INSERTINTOStudent(Sno,Sname,Ssex,Sdept,Sage)VALUES('200215128','陈冬','男','IS',18);插入元组(续)[例2]将学生张成民的信息插入到Student表中。INSERTINTOStudentVALUES(‘200215126’,‘张成民’,‘男’,18,'CS');插入元组(续)[例3]插入一条选课记录('200215128','1')。INSERTINTOSC(Sno,Cno)VALUES(‘200215128’,‘1’);RDBMS将在新插入记录的Grade列上自动地赋空值。或者:INSERTINTOSCVALUES('200215128','1',NULL);二、插入子查询结果语句格式INSERTINTO表名[(属性列1[,属性列2…)]子查询;功能将子查询结果插入指定表中插入子查询结果(续)INTO子句(与插入元组类似)子查询SELECT子句目标列必须与INTO子句匹配值的个数值的类型插入子查询结果(续)[例4]对每一个系,求学生的平均年龄,并把结果存入数据库。第一步:建表CREATETABLEDept_age(SdeptCHAR(15)/*系名*/Avg_ageSMALLINT);/*学生平均年龄*/插入子查询结果(续)第二步:插入数据INSERTINTODept_age(Sdept,Avg_age)SELECTSdept,AVG(Sage)FROMStudentGROUPBYSdept;插入子查询结果(续)RDBMS在执行插入语句时会检查所插元组是否破坏表上已定义的完整性规则–实体完整性–参照完整性–用户定义的完整性NOTNUL
本文标题:SQL查询教学PPT
链接地址:https://www.777doc.com/doc-4154722 .html