第4章数据操作语句(SQL server2005数据库系统概论PPT)_第1页
第4章数据操作语句(SQL server2005数据库系统概论PPT)_第2页
第4章数据操作语句(SQL server2005数据库系统概论PPT)_第3页
第4章数据操作语句(SQL server2005数据库系统概论PPT)_第4页
第4章数据操作语句(SQL server2005数据库系统概论PPT)_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据库原理和应用教程,国家“十一五”计划教材,第四章数据操作,4.1数据查询功能4.2数据更改功能,4.1数据查询功能,4.1.1查询句的基本结构4.1.2简单查询4.1.3多表连接查询4.1.4子查询, 查询语句的基本格式SELECT-必要的列FROM-从哪个表WHERE-根据哪个条件执行GROUPBYHAVINGORDERBY,4.1.2简单查询,1 .选择表中的多个列,1 .指定的列/查全体学生的学号和名字。 SELECTSno,SnameFROMStudent,例2 .全体学生的名字,学号,所属系,SELECTSname,Sno,SdeptFROMStudent,例3全体学生的记录SE

2、LECTSno,Sname,Ssex,Sage,SDE SELECTSname,2010-SageFROMStudent,定数列,例5查找所有学生的名字和出生日期的系统,并在出生日期列前添加列。 此列各行的数据为“出生年月日”常数值。 selectsyname,出生年月日:2010-sagefromstudent,更改列标题,语法:列名|公式AS列标题或:列标题列名|公式示例: selectsyname名,YearofBirth出生年月日,2010-s 4.1.2简单搜索2 .在表中选择几个元组,1 .删除同一值的行,例6查询选择了学生的学号,SELECTSnoFROMSC,有重复行! 要从结

3、果表中删除重复行,请查询满足DISTINCT,SELECTDISTINCTSnoFROMSC,2 .条件的元组,比较大小,示例7查询所有计算机系学生的名字。 selectssnamemfromstudentwheredept=计算机系统示例调查8年龄在20岁以下的学生的名字和年龄。 SELECTSname,SageFROMStudentWHERESage20例9考试成绩不及格的学生的学号selectdisconntsnofromscwhywregrade 60确定了范围,BETWEENAND和NOTBETWEENAND是逻辑范围的下限在BETWEEN之后指定,范围的上限在AND之后指定。 BE

4、TWEENAND的形式如下。 如果列名|表达式NOTBETWEEN下限值AND上限值列或表达式的值超出下限值和上限值范围,则结果为True,表示此记录满足查询条件。 例如,调查10年龄2023岁的学生的名字、所属系、年龄。 调查不在SELECTSname、Sdept、sagefromstudentwhenresagebetween 20 and 23例11年龄2023之间的学生的名字、所属系和年龄。 决定SELECTSname、Sdept、sagefromstudentwhenresagentbetween 20 and 23,集合,使用IN运算符。 查找属性值属于指定集合的元组。 格式为:列

5、名NOTIN (常数1、常数2、常数n )如果列的值等于IN的常数值,则结果为True;如果NOTIN :列的值等于常数值,则结果为False,表示此记录是满足查询条件的记录例12询问信息系、数学系、计算机系学生的名字和性别。 SELECTSname、SsexFROMStudentWHERESdeptIN (信息系、数学系、计算机系)例13查询不是信息系、数学系、计算机系学生的名字和性别。 使用SELECTSname,ssexfromstudentwhenresdeptnotin (信息系统,数学系统,计算机系统),字符匹配,LIKE运算符的一般形式可以包含以下四种通配符: _ :匹配任何字符

6、; % :匹配0个以上字符:匹配中的任何字符如果与连续字符匹配,例如abcd匹配,则可以简称为a-d :不匹配的字符之一。 14询问姓张的学生的详细情况。 select * fromstudentwheelresnamelike张%例15调查学生表中姓张、李、刘的学生情况。 select * fromstudentwheelresnamelike张李刘%例查16名中第二个单词小或大的学生的名字和学号。SELECTSname,snofromstudentwhresnamelike _ size %,示例(续)示例17查找不称为“王”或“张”的所有学生的名字。 例18也称为“王”,在搜索名字为2个

7、字母的学生的名字。 selectssnamemfromstudentwhresnamelike王_,例(续),例19查询姓王,名字为3个字符的学生名selectssnamemfromstudentwhresnamelike王_,注意:后续空格的处理。 selectssnamemfromstudentwheretrim (sname ) like王_、空值查询和空值(NULL )表示数据库中不确定的值。 例如,学生上课后,如果还没有考试,这些学生有上课记录,但没有考试成绩,所以考试成绩为空值。 不能使用常规比较运算符,因为它确定某个值是否为空值。 被判断为值为空的句子的格式,被判断为列名ISNU

8、LL值不为空的句子的格式,查询列名ISNOTNULL,例如,例20没有考试成绩的学生的学号和对应的课程编号。 SELECTSno,CnoFROMSCWHEREGradeISNULL查询所有考试成绩的学生的学号和课程编号。 SELECTSno,CnoFROMSCWHEREGradeISNOTNULL,多条件查询可以在WHERE子句中使用逻辑运算符AND和OR来配置多条件查询。 用AND连接的条件表示必须满足所有条件的结果为True。用OR连接的条件表示满足任一条件的结果为True。 例21调查计算机系年龄在20岁以下的学生的名字。 selectssnamemfromstudentwheelres

9、dept=计算机系ANDSage20,例(续),例23调查计算机系和信息系年龄在20岁以上的学生的名字、所属系和年龄。 selectsyname,Sdept,SageFROMStudentWHERE(Sdept=计算机系统ORSdept=信息系统) ANDSage=20或: selectsyname,Sdept,sagefromstudentwheresdep 排序子句按顺序按说明:升序(ASC )或降序(desc )进行排序。 例22按年龄对学生进行排序。 select * fromstudentorderedbysage示例23查询选择c02号课程的学生的学号及其成绩,查询结果按成绩降序排

10、列。 SELECTSno,gradefromscwheelreceno=c 02 orderedgradedesc例24查询所有学生的信息,查询结果按所属系的学部名的升序,同系的学生按年龄的降序排列。 select * fromstudentorderedbysdept、SageDESC、4.1.2简单查询、4 .使用计算函数来聚合数据,使用计算函数来聚合数据,SQL提供的计算函数是COUNT(* ) :统计表中的元组数; COUNT(DISTINCT ) :计算此列中值的数量SUM(DISTINCT ) :计算列值的总和AVG(DISTINCT ) :计算列值的平均值MAX(DISTINCT

11、 ) :计算列值的最大值MIN(DISTINCT ) :计算列值的最小值在上述函数中,COUNT(* )以外的函数在计算时会忽略NULL值。 例25统计学生总数。 统计学习SELECTCOUNT(*)FROMStudent示例26课程的学生人数。 选择计数(distincts no ) fromsc例27计算9512101号学生考试总成绩之和。 计算selectsum (grade ) fromscwheelresno=9512101,例(续),例28c01号课程学生的考试平均成绩。 select avg (grade ) fromscwheelrecno=c01例29查询了修c01号课程的学

12、生的最高点和最低点。 SELECTMAX(Grade ),MIN(Grade)FROMSCWHERECno=C01注意:计算函数不出现在WHERE子句中,4.1.2简单查询,5 .对查询结果进行分组计算,对查询结果进行分组计算的作用: 目的:细化计算函数的作用对象。 群句的一般形式:使用GROUPBYHAVING、GROUPBY,统计例30各课程的选项人数,列出课程编号和人数。 按Cno值对SELECTCnoas课程编号、COUNT(Sno)as选择项人数FROMSCGROUPBYCno查询结果进行分组,对具有相同Cno值的所有组进行分组,按组使用COUNT计算,求出每组的学生人数查询、例31

13、学生每人的选课数和平均成绩。 使用SELECTSnoas学号、COUNT(*)as选择项数、AVG(Grade)as平均成绩FROMSCGROUPBYSno、2.having来限制组本身,与WHERE子句相似,但用于组而不是单个记录。 查询完成323门以上课程的学生的班级编号selectssnofromscgroupbysnohavingucount (* ) 3。 例如查询33科的平均成绩和选拔科目数在4科以上的学生。 SELECTSno,AVG(Grade )平均成绩,COUNT(* )结业科目数fromscgroupbysnohavingrcount (* )=4,4.1.3多表连接查询

14、。 如果一个查询包含两个或多个表,则称为连接查询。 连接查询是关系数据库中最重要的查询连接查询,包括内连接、外连接、交叉连接等。 连接的基础知识,连接查询中连接两个表的条件称为连接条件或连接谓词。 典型形式为:必须可比较、内连接、SQL-92内连接语法如下: selectfromtable名INNERJOIN根据连接表on连接条件执行连接操作的步骤:首先取表1的第一个元组一个接一个地查找满足连接条件的元组,一旦找到,将表1的第一个元组与该元组连接起来,从而形成结果表中的一个元组。 表2的所有搜索完成后,提取表1的第二个元组,从头扫描表2,然后重复此过程,直到表1的所有元组都被处理。 例36 .

15、要求查询计算机系学生的课程状况,列出学生的名字和课程号码和成绩。 SELECTSname,Cno,gradefromstudentjoinsconstudent.SnO=sc.snow 修改SELECTSname,Cname,gradefromstudentjoinscons.SnO= o=owheresdept=信息系统ANDCname=VB,示例38VB课程SELECTSname,sdeptfromstudentjoinscons.SnO= o=owherecname=VB,

16、自连接和特殊内部连接互连的表在物理上是同一表为了在逻辑上成为两个表,必须给两个表加上别名。 调查和刘晨在同一学部学习的学生的名字和所属的学部。 SELECTS2.Sname,S2.sdeptfromstudents1join students2ons1. sdept=S2.sdept wheels1. sname=刘晨和S2.sname!=只有刘晨、外连接和一个表中的数据必须满足连接条件,而另一个表中的数据可能不满足连接条件。 ANSI方法的外连接的语法形式是FROM表1LEFT|RIGHTOUTERJOIN表2on theta方法的外连接的语法形式是左外连接: FROM表1、表2WHERE表

17、1 .列名()表2 .列名右外连接: FROM表1、表2WHERE表SELECTStudent.Sno、Sname、Cno、gradefromstudentleftouterrjoinsconstrudent.SnO=sc.SnO,4.1.4子查询SQL语言中的SELECTFROMWHERE语句子查询是一个SELECT查询,嵌套在SELECT、INSERT、UPDATE、DELETE语句的WHERE子句或HAVING子句中,或者其他子查询的SELECT查询总是用括号括起来。 使用子查询进行基于集合的测试,使用子查询进行基于集合的测试的语句的一般形式是列名NOTIN (子查询),例如,示例41 .查询与刘晨是同一系的学生。 SELECTSno,Sname,sdeptfromstudentwhenresdeptin (selectd

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论