您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > sqlserver中数据查询与修改
第6章数据查询与修改6.1数据查询6.2数据修改6.1数据查询6.1.1SQL查询语句的基本结构6.1.2简单查询6.1.3多表连接查询6.1.4合并多个结果集6.1.5SELECTINTO6.1.6使用TOP限制结果集6.1.7子查询6.1.1SQL查询语句的基本结构SELECT目标列名序列FROM数据源[WHERE检索条件表达式][GROUPBY分组依据列][HAVING分组提取条件][ORDERBY排序依据列]简单地说:SELECT目标列名序列(需要哪些列)FROM表名序列(从哪些表)WHERE查询条件(根据什么条件)6.1.2简单查询(单表查询)一.选择表中若干列1.查询指定列查询表中用户感兴趣的部分属性列选择表中若干列在SELECT子句的目标列名序列中指定要查询的属性例1.查询全体学生的学号与姓名SELECTSno,SnameFROMStudent例2.查询全体学生的姓名、学号、所在系SELECTSname,Sno,SdeptFROMStudent2.查询全部列例3.查询全体学生的详细记录选择表中若干列SELECTSno,Sname,Ssex,Sage,SdeptFROMStudent等价于:SELECT*FROMStudent3.查询经过计算的列SELECT子句中的目标列名序列可以是表中存在的属性列,也可以是表达式的结果。选择表中若干列例4.查询全体学生的姓名及其出生年份SELECTSname,2001-SageFROMStudent目标列是算术表达式,字符串常量、函数等。例5.查询全体学生的姓名、出生年份和所在系,要求用小写字母表示所在系名。SELECTSname,2001-Sage,LOWER(Sdept)FROMStudent可以指定别名来改变查询结果的列标题,这对于含算术表达式、常量、函数名的目标列尤为有用SELECTSnameNAME,2001-SageBIRTH,LOWER(Sdept)DEPARTFROMStudent6.1.2简单查询(单表查询)二.选择表中的若干元组1.消除取值相同的行例6.查询选修了课程的学生的学号SELECTSnoFROMSC有重复行!要去掉结果表中的重复行,可用DISTINCT实现SELECTDISTINCTSnoFROMSCSno9812019812029821032.查询满足条件的元组查询满足条件的元组可通过WHERE子句实现常用的查询条件查询条件谓词比较运算符=,,=,=,,,!=,!,!NOT+上述比较运算符确定范围BETWEENAND,NOTBETWEENAND确定集合IN,NOTIN字符匹配LIKE,NOTLIKE空值ISNULL,ISNOTNULL多重条件AND,OR(1)比较大小(,,=,=,=,)例7.查询计算机系全体学生SELECTSnameFROMStudentWHERESdept=’CS’Sname李勇刘晨王敏例8.查询所有年龄在20岁以下的学生姓名及其年龄SELECTSname,SageFROMStudentWHERESage20或:SELECTSname,SageFROMStudentWHERENOTSage=20SnameSage李勇19例9.查询考试成绩有不及格的学生的学号SELECTDISTINCTSnoFROMSCWHEREGrade60(2)确定范围(BETWEEN…AND)BETWEEN…AND…NOTBETWEEN…AND…作用:查找属性值在或不在指定范围内的元组说明:BETWEEN后是范围的下限(低值)AND后是范围的上限(高值)例10.查询年龄在20~23岁之间的学生的姓名、所在系和年龄SELECTSname,Sdept,SageFROMStudentWHERESageBETWEEN20AND23等价于:SELECTSname,Sdept,SageFROMStudentWHERESage=20ANDSage=23例11.查询年龄不在20~23之间的学生姓名、所在系和年龄SELECTSname,Sdept,SageFROMStudentWHERESageNOTBETWEEN20AND23等价于:SELECTSname,Sdept,SageFROMStudentWHERESage20ORSage23(3)确定集合(IN)作用:用来查找属性值属于指定集合的元组。格式:列名[NOT]IN(常量[,…])例12.查询信息系(IS)、数学系(MA)和计算机系(CS)学生的姓名和性别。SELECTSname,SsexFROMStudentWHERESdeptIN(‘IS’,‘CS’,‘MA’)等价于:SELECTSname,SsexFROMStudentWHERESdept=‘IS’ORSdept=‘MA’ORSdept=‘CS’例13.查询既不是信息系、数学系,也不是计算机系学生的姓名和性别SELECTSname,SsexFROMStudentWHERESdeptNOTIN(‘IS’,‘MA’,‘CS’)等价于:SELECTSname,SsexFROMStudentWHERESdept!=‘IS’ANDSdept!=‘MA’ANDSdept!=‘CS’(4)字符匹配(LIKE)一般形式为:列名[NOT]LIKE匹配串作用:查找指定列名与匹配串常量匹配的元组。匹配串类型:匹配串可以是字符串常量,也可以含有通配符。通配符种类:%(百分号):匹配0个或多个字符。_(下划线):匹配一个字符。[]:匹配括号中的字符[^]:不匹配括号中的字符例14.查询姓‘张’的学生的详细信息SELECT*FROMStudentWHERESnameLIKE‘张%’例15.查询98级计算机系所有班中学号(学号为98***01)排第1的学生的详细信息SELECT*FROMStudentWHERESnoLIKE‘98___01’ANDSdept=‘CS’例16.查询名字中第2个字为“海”字的学生的姓名和学号SELECTSname,SnoFROMStudentWHERESnameLIKE‘_海%’例17.查询所有不姓“刘”的学生SELECTSnameFROMStudentWHERESnameNOTLIKE‘刘%’例18:查询以a,b,c开始的产品名称UsenorthwindSELECTproductNameFROMproductsWHEREproductNameLIKE'[a-c]%'转义字符如果要查找的字符串正好含有通配符的符号,则需要用一个特殊的子句。ESCAPE转义字符任何有效的字符都可以作为转义字符,表明此字符后边的字符是普通字符而不是通配符。查询pubs数据库titles表中notes列中包含字符串“50%”的数据SELECTnotesFROMtitlesWHEREnotesLIKE‘%50*%%’ESCAPE‘*’或者:SELECTnotesFROMtitlesWHEREnotesLIKE‘%50[%]%’(5)涉及空值的查询空值是未确定的值或其值尚不知道例如,学生选课,在开学初学生只有选课记录,没有修课成绩,这时成绩一项的值就是空值。不能用=或,只能用ISNULL或ISNOTNULL例19.查询无成绩的学生的学号和相应的课程号SELECTSno,CnoFROMSCWHEREGradeISNULL例20.查询所有有成绩的学生的学号和课程号SELECTSno,CnoFROMSCWHEREGradeISNOTNULL注意:空值不是一个确定的值,所以不可以用等于或不等于来比较或衡量;空值只能说是空值(ISNULL)或不是空值(ISNOTNULL)。(6)多重条件查询用逻辑运算符AND和OR组成多条件查询。例21.查询计算机系年龄在20岁以下的学生姓名。SELECTSnameFROMStudentWHERESdept=‘CS’ANDSage20例:查询计算机系和信息系年龄大于等于20的学生的详细信息SELECT*FROMStudentWHERESdeptIN(‘计算机系’,‘信息系’)ANDSage=20OR:SELECT*FROMStudentWHERE(Sdept=‘计算机系’ORSdept=‘信息系’)ANDSage=206.1.2简单查询(单表查询)三.对查询结果排序三.对查询结果排序可对查询结果进行排序排序子句为:ORDERBY列名[ASC|DESC][,列名…]说明:按列名进行升序(ASC)或降序(DESC)排序。例22:将学生按年龄升序排序SELECT*FROMStudentORDERBYSage例23.查询选修了1号课程的学生的学号及其成绩,查询结果按成绩降序排列SELECTSno,GradeFROMSCWHERECno=’1’ORDERBYGradeDESCSnoGrade981202909821038598120180例24.查询全体学生情况,查询结果按所在系的系名升序排列,同一系的学生按年龄降序排列SELECT*FROMStudentORDERBYSdept,SageDESC例25.查询‘c01’课程的考试情况,如果成绩大于90则显示‘优’;成绩在80到89间则显示‘良’;成绩在70到79间则显示‘中’;成绩在60到69间则显示‘及格’;成绩小于60则显示‘不及格’;对成绩为null的显示‘未考’selectsno,casewhengrade90then'优'whengradebetween80and89then'良'whengradebetween70and79then'中'whengradebetween60and69then'及格'whengrade60then'不及格'whengradeisnullthen'未考'endfromscwherecno=‘c01’6.1.2简单查询(单表查询)四.使用计算函数进行查询SQL提供的计算函数COUNT(*):统计表中元组个数COUNT(列名):统计本列非空列值个数SUM(列名):计算列值总和(必须是数值型列)AVG(列名):计算列值平均值(必须是数值型列)MAX(列名):求列值最大值MIN(列名):求列值最小值例25.查询学生总人数SELECTCOUNT(*)FROMStudent例26.查询选修了课程的学生的人数SELECTCOUNT(DISTINCTSno)FROMSC例27.计算1号课程学生的修课总成绩SELECTSUM(Grade)FROMSCWhereCno=‘1’例28.计算1号课程的学生的平均成绩SELECTAVG(Grade)FROMSCWHERECno=’1’例29.查询选修了1号课程的学生的最高分和最低分SELECTMAX(Grade),MIN(Grade)FROMSCWHERECno=’1’6.1.2简单查询(单表查询)五.对查询结果分组五.对查询结果分组作用:可以控制计算的级别:对全表还是对一组。目的:细化计算函数的作用对象。分组语句的一般形式:[WHERE条件][GROUPBY分组条件][HAVING组过滤条件]1.GROUPBY例1.统计每门课程的选课人数,列出课程号和人数SELECTCno,COUNT(Sno)FROMSCGROUPBYCno对查询结果按Cno的值分组,所有具有相同Cno值的元组为一组,然后再对每一组使用COUNT计算,求得每组的学生人数。SnoCnoGrade981201180981201278981202190982103288982103185982103391982103474CnoCount(Sno)13223141SnoCnoGrade981201180981202190982103185981201278982103288982103391982103474例2查询每名学生的选课门数和平均成绩SELECTSno,COUNT(
本文标题:sqlserver中数据查询与修改
链接地址:https://www.777doc.com/doc-4405806 .html