《第4章结构化查询语言SQL20101.ppt》由会员分享,可在线阅读,更多相关《第4章结构化查询语言SQL20101.ppt(89页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1第四章 结构化查询语言SQL2本章主要内容o4.1数据查询o4.2 数据操作o4.3 数据定义3SQL语言的基本概述语言的基本概述SQLSQLSQLSQL:Structured Query Language Structured Query Language Structured Query Language Structured Query Language 缩写缩写缩写缩写 结构化查询语言,介于关系代数与关系演算之间。目结构化查询语言,介于关系代数与关系演算之间。目结构化查询语言,介于关系代数与关系演算之间。目结构化查询语言,介于关系代数与关系演算之间。目前关系型数据库的通用语言。前关系
2、型数据库的通用语言。前关系型数据库的通用语言。前关系型数据库的通用语言。SQLSQLSQLSQL的发展的发展的发展的发展1974197419741974年,由年,由年,由年,由BoyceBoyceBoyceBoyce和和和和ChamberlinChamberlinChamberlinChamberlin提出提出提出提出19751979197519791975197919751979,IBM San Jose Research LabIBM San Jose Research LabIBM San Jose Research LabIBM San Jose Research Lab的关系数据库管
3、的关系数据库管的关系数据库管的关系数据库管理系统原型理系统原型理系统原型理系统原型System RSystem RSystem RSystem R实施了这种语言实施了这种语言实施了这种语言实施了这种语言SQL-86SQL-86SQL-86SQL-86是第一个是第一个是第一个是第一个SQLSQLSQLSQL标准标准标准标准 (ANSIANSIANSIANSI)SQL-89SQL-89SQL-89SQL-89、SQL-92(SQL2)SQL-92(SQL2)SQL-92(SQL2)SQL-92(SQL2)、SQL-99(SQL3)SQL-99(SQL3)SQL-99(SQL3)SQL-99(SQL
4、3)(ANSIANSIANSIANSI)现状现状现状现状:大部分大部分大部分大部分DBMSDBMSDBMSDBMS产品都支持产品都支持产品都支持产品都支持SQLSQLSQLSQL,成为操作数据库的标,成为操作数据库的标,成为操作数据库的标,成为操作数据库的标准语言准语言准语言准语言4SQL语言的特点:P118 1综合统一 集数据定义(DDL)、数据操纵(DML)、数据管理(DCL)的功能于一体 2高度非过程化 用户只需提出“做什么?”,不必提出“怎么做?”3语言简洁,易学易用 4以同一种语法结构提供两种使用方式 自含式或嵌入式 即:交互式SQL或嵌入式SQL5表表4-1 SQL语言的语言的9个
5、命令动词个命令动词 P119SQLSQL功能功能命令命令动词动词数据数据查询查询SelectSelect数据操作数据操作插入插入记录记录InsertInsert更新更新记录记录UpdateUpdate删删除除记录记录DeleteDelete数据定数据定义义定定义义基本表或索引基本表或索引CreateCreate删删除基本表或索引除基本表或索引DropDrop修改基本表或索引修改基本表或索引AlterAlter数据控制数据控制授授权权GrantGrant收回收回权权限限RevokeRevoke6SQL的功能的功能:oo数据定义(数据定义(数据定义(数据定义(DDLDDL)n n 定义、删除、修改
6、关系模式定义、删除、修改关系模式定义、删除、修改关系模式定义、删除、修改关系模式 (基本表(基本表(基本表(基本表CREATECREATE、ALTERALTER)n n 定义、删除视图(定义、删除视图(定义、删除视图(定义、删除视图(ViewView)n n 定义、删除索引(定义、删除索引(定义、删除索引(定义、删除索引(IndexIndex)oo 数据操纵(数据操纵(数据操纵(数据操纵(DMLDML)n n 数据查询数据查询数据查询数据查询(SELECTSELECT命令命令命令命令)n n 数据增、删、改(数据增、删、改(数据增、删、改(数据增、删、改(INSERTINSERT、DELETE
7、DELETE、UPDATEUPDATE命令)命令)命令)命令)oo数据控制(数据控制(数据控制(数据控制(DCLDCL)n n用户访问权限的授予、收回(用户访问权限的授予、收回(用户访问权限的授予、收回(用户访问权限的授予、收回(GRANTGRANT、REVOKEREVOKE)7SQL语言的基本概念语言的基本概念ooSQL语言语言支持支持关系型数据库的关系型数据库的三级模式结构。三级模式结构。外模式外模式-视图(视图(View)和部分基本表)和部分基本表 模式模式-基本表,基本表,内模式内模式-存储文件。存储文件。oo基本表基本表:独立存在的表,在独立存在的表,在SQL语言中一个关语言中一个关
8、系。系。oo存储文件的逻辑结构组成了关系型数据库的存储文件的逻辑结构组成了关系型数据库的内内模式模式。而存储文件的物理文件结构是任意的。而存储文件的物理文件结构是任意的。oo视图视图:从基本表或其他视图中导出的表,数据:从基本表或其他视图中导出的表,数据库只存放在视图的定义而不存放视图对应的数库只存放在视图的定义而不存放视图对应的数据,因此视图据,因此视图是一个虚表是一个虚表。84.1 数据查询 P119本节主要内容本节主要内容1、基本查询、基本查询2、排序查询、排序查询3、带特殊运算符的条件查询、带特殊运算符的条件查询4、计算与分组查询、计算与分组查询5、嵌套查询、嵌套查询6、利用空值查询、
9、利用空值查询7、查询中的特殊选项、查询中的特殊选项9SELECT语句的格式:P119SELECT*|ALL|DISTINCT TOP表达式表达式 别名别名 Select表达式表达式 AS列名列名,别名别名 Select表达式表达式 AS列名列名 FORM 数据库名数据库名!表名表名ASLocal_AliasINNER|LEFT OUTER|RIGHT OUTER|FULL OUTERJOIN 数据库名数据库名!表名表名 ASLocal_AliasON联接条件联接条件INTO 查询结果查询结果|TO FILE 文件名文件名 ADDITIVE|TO PRINTER PROMPT|TO SCREEN
10、PREFERENCE PreferenceNameNOCONSOLEPLAINNOWAITWHERE联接条件联接条件1AND联接条件联接条件2AND|OR 筛选条件筛选条件GROUP BY 组表达式组表达式,组表达式组表达式HAVING 筛选条件筛选条件 UNION ALL SELECT命令命令 ORDER BY 关键字表达式关键字表达式 ASC|DESC,关键字表达式关键字表达式ASC|DESC 包括包括三个基本子句三个基本子句:SELECT子句、子句、FROM子句、子句、WHERE子句,包括子句,包括操作子句操作子句:ORDER子句、子句、GROUP子句、子句、UNION子句以及子句以及其
11、他一些选项其他一些选项。10o单表查询单表查询n单表无条件查询单表无条件查询n单表有条件查询单表有条件查询o多表连接查询多表连接查询n多表无条件的连接查询多表无条件的连接查询n多表有条件连接查询多表有条件连接查询 selectfromwhere字段名字段名表名表名查询条件查询条件一、一、基本查询基本查询 p121111 1、无条件查询:、无条件查询:SELECT SELECT FROM FROM P121P121【格式格式格式格式】SELECTSELECT ALL|DISTINCT ALL|DISTINCT FROMFROM 【功能功能功能功能】无条件查询。无条件查询。无条件查询。无条件查询。
12、(命令执行后,注意命令执行后,注意命令执行后,注意命令执行后,注意LISTLIST显示的内容,可显示的内容,可显示的内容,可显示的内容,可能不全能不全能不全能不全)例例1:将:将STUDENT表中的专业信息检索出来。表中的专业信息检索出来。例例2:将:将STUDENT表中的专业信息检索出来,并表中的专业信息检索出来,并去掉重复元组去掉重复元组。例例3:从:从STUDENT表中检索出学生的学号、姓名、专业信息。表中检索出学生的学号、姓名、专业信息。例例4:查询:查询SCORE表中的所有信息。表中的所有信息。o方法一:方法一:o方法二:方法二:SELECT 专业名称专业名称 FROM STUDEN
13、T SELECT DISTINCT 专业专业名称名称 FROM STUDENTSELECT 学号学号,姓名姓名,专业专业名称名称 FROM STUDENTSELECT*FROM SCORESELECT 学号学号,课程编号课程编号,成绩成绩 FROM SCORE12注意注意:去掉重复元组去掉重复元组DISTINCT所有属性所有属性*,SELECT后多字段名之间后多字段名之间【格式格式格式格式】SELECTSELECT ALL|DISTINCT ALL|DISTINCT FROMFROM ALLALL:表示显示全部查询记录,包括重复记录。表示显示全部查询记录,包括重复记录。表示显示全部查询记录,包
14、括重复记录。表示显示全部查询记录,包括重复记录。DISTINCTDISTINCT:表示显示无重复结果的记录。表示显示无重复结果的记录。表示显示无重复结果的记录。表示显示无重复结果的记录。:*是通配符,表示所有的字段。是通配符,表示所有的字段。是通配符,表示所有的字段。是通配符,表示所有的字段。13注意注意:例5:SELECTSELECT 姓名,姓名,姓名,姓名,YEAR(DATE()-YEAR(YEAR(DATE()-YEAR(出生日期出生日期出生日期出生日期)FROMFROM STUDENT STUDENT&可采用可采用可采用可采用 表达式表达式表达式表达式 AS AS 名字名字名字名字例例
15、例例6 6:SELECTSELECT 姓名,姓名,姓名,姓名,YEAR(DATE()-YEAR(YEAR(DATE()-YEAR(出生日期出生日期出生日期出生日期)AS AS 年龄年龄年龄年龄 FROM FROM STUDENT STUDENT例例例例7 7:显示:显示:显示:显示SCORESCORE(课程成绩表)中的所有记录,并将(课程成绩表)中的所有记录,并将(课程成绩表)中的所有记录,并将(课程成绩表)中的所有记录,并将成绩一项乘以成绩一项乘以成绩一项乘以成绩一项乘以0.70.7。SELECTSELECT 学号,课程编号,学号,课程编号,学号,课程编号,学号,课程编号,成绩成绩成绩成绩*
16、0.70.7 ASAS 成绩成绩成绩成绩FROMFROM SCORE SCORE TO SCREENTO SCREEN14查询去向查询去向 P139TO SCREENTO SCREEN:将查询结果保在屏幕上显示。将查询结果保在屏幕上显示。将查询结果保在屏幕上显示。将查询结果保在屏幕上显示。INTO ARRAY INTO ARRAY 数组名数组名数组名数组名:将查询结果保存到一个数组中。:将查询结果保存到一个数组中。:将查询结果保存到一个数组中。:将查询结果保存到一个数组中。INTO DBFINTO DBF|TABLETABLE :将查询结果保存到一个永久表中:将查询结果保存到一个永久表中:将查
17、询结果保存到一个永久表中:将查询结果保存到一个永久表中INTO CURSOR INTO CURSOR:将查询结果保存到一个临时表中。:将查询结果保存到一个临时表中。:将查询结果保存到一个临时表中。:将查询结果保存到一个临时表中。TO TO FILEFILEADDITIVEADDITIVE:将将将将查查查查询询询询结结结结果果果果保保保保存存存存到到到到文文文文本本本本文文文文件件件件中中中中。如如如如果果果果带带带带“ADDITIVE”ADDITIVE”关关关关键键键键字字字字,查查查查询询询询结结结结果果果果以以以以追追追追加加加加方方方方式式式式添添添添加加加加到到到到 指指指指定定定定的
18、的的的文文文文件件件件,否否否否则则则则,以以以以新新新新建建建建或或或或覆覆覆覆盖盖盖盖方方方方式式式式添添添添加加加加到到到到 指指指指定定定定的的的的文文文文件。件。件。件。TO PRINTERTO PRINTER:将查询结果送打印机打印。将查询结果送打印机打印。将查询结果送打印机打印。将查询结果送打印机打印。15无条件查询小结:无条件查询小结:1 1)投影查询,)投影查询,)投影查询,)投影查询,SELECTSELECT子句指定获取部分列。子句指定获取部分列。子句指定获取部分列。子句指定获取部分列。【例例例例】查询学生的学号、姓名、性别。查询学生的学号、姓名、性别。查询学生的学号、姓名
19、、性别。查询学生的学号、姓名、性别。2)2)查询结果去掉重复列,用查询结果去掉重复列,用查询结果去掉重复列,用查询结果去掉重复列,用DISTINCTDISTINCT子句在查询结果中剔除重子句在查询结果中剔除重子句在查询结果中剔除重子句在查询结果中剔除重复的行复的行复的行复的行,DISTINCT,DISTINCT与与与与ALL(ALL(默认默认默认默认)对应。对应。对应。对应。【例例例例】查询学生选修课的课程编号,去掉重复列。查询学生选修课的课程编号,去掉重复列。查询学生选修课的课程编号,去掉重复列。查询学生选修课的课程编号,去掉重复列。3 3)查询全部列:)查询全部列:)查询全部列:)查询全部
20、列:SELECT*SELECT*表示查询结果中包括全部列的信息。表示查询结果中包括全部列的信息。表示查询结果中包括全部列的信息。表示查询结果中包括全部列的信息。【例例例例】查询全体学生的详细记录查询全体学生的详细记录查询全体学生的详细记录查询全体学生的详细记录4 4)查询经过计算的值)查询经过计算的值)查询经过计算的值)查询经过计算的值 【例例例例】查询全体学生的年龄。查询全体学生的年龄。查询全体学生的年龄。查询全体学生的年龄。5 5)查询结果使用别名)查询结果使用别名)查询结果使用别名)查询结果使用别名 【例例例例】查询全体学生的年龄,并使用别名。查询全体学生的年龄,并使用别名。查询全体学生
21、的年龄,并使用别名。查询全体学生的年龄,并使用别名。6 6)结果排序结果排序结果排序结果排序 【例例例例】查询显示查询显示查询显示查询显示COURSECOURSE表中的所有信息,并按学分升序排序。表中的所有信息,并按学分升序排序。表中的所有信息,并按学分升序排序。表中的所有信息,并按学分升序排序。SELECT *FROM COURSE SELECT *FROM COURSE ORDER BYORDER BY 学分学分学分学分 162 2、条件查询、条件查询-SELECT SELECT FROM WHERE FROM WHERE P123P123【格式格式格式格式】SELECTSELECT AL
22、L|DISTINCT ALL|DISTINCT FROMFROM WHEREWHERE 【功能功能功能功能】从从从从SCORE表中查询满足条件的数据。表中查询满足条件的数据。表中查询满足条件的数据。表中查询满足条件的数据。例例1:查询成绩大于:查询成绩大于80分的学号。分的学号。例例2:从:从SCORE表中检索出选修了课程编号为表中检索出选修了课程编号为“10002101”的,并且成绩大于的,并且成绩大于80分的成绩信息。分的成绩信息。SELECT DISTINCT 学号学号 FROM SCORE;WHERE 成绩成绩80SELECT*FROM SCORE;WHERE 课程编号课程编号=100
23、02101 AND 成绩成绩8017例例3:检索出选修了课程编号为:检索出选修了课程编号为“10002101”或或“10002107”的,并且成绩大于的,并且成绩大于80分的成绩信息。分的成绩信息。SELECT*FROM SCORE;WHERE(课程编号课程编号=10002101.OR.课程编号课程编号=10002107).AND.成绩成绩8018例例4:从:从STUDENT表中检索出性别为表中检索出性别为“男男”且入学时且入学时间为间为1996年年9月月7日的学生的日的学生的学号、姓名、性别、专学号、姓名、性别、专业名称和年龄业名称和年龄信息。信息。SELECT 学号学号,姓名姓名,性别性别
24、,专业名称专业名称,;YEAR(DATE()-YEAR(出生日期出生日期)AS 年龄年龄;FROM STUDENT;WHERE 入学时间入学时间=1996-09-07 AND 性别性别=“男男”19单表条件查询:单表条件查询:P123P123(1 1)条件中,涉及到字符型字段值,加定界符)条件中,涉及到字符型字段值,加定界符(“”)(“”)(2 2)多个条件之间用)多个条件之间用and/orand/or相连相连(3 3)一行书写不下,除最后一行,各行结尾加)一行书写不下,除最后一行,各行结尾加分号(分号(;)注注意意20注意注意:的选用的选用(1 1 1 1)222。(2 2 2 2)。(3
25、3 3 3)ALLALLALLALL()(4 4 4 4)ANY|SOME ANY|SOME ANY|SOME ANY|SOME()(5 5 5 5)NOTBETWEEN NOTBETWEEN NOTBETWEEN NOTBETWEEN AND AND AND AND (6 6 6 6)NOT EXISTS NOT EXISTS NOT EXISTS NOT EXISTS ()(7 7 7 7)NOT IN NOT IN NOT IN NOT IN()(8 8 8 8)NOT IN NOT IN NOT IN NOT IN ()(9 9 9 9)NOT LINK NOT LINK NOT LI
26、NK NOT LINK 213 3、多表联接查询(连接查询):、多表联接查询(连接查询):P124 2.P124 2.【格式格式格式格式】SELECTSELECT ALL|DISTINCT ALL|DISTINCT FROMFROM 1,表,表,表,表2.2.WHEREWHERE .=.连接条件连接条件22例例1:1:检索选修了课程的学生信息。检索选修了课程的学生信息。例例2:检索出成绩大于检索出成绩大于80分的学号、姓名、性别和成绩分的学号、姓名、性别和成绩。SELECT DISTINCT STUDENT.*;FROM STUDENT,SCORE;WHERE STUDENT.学号学号=SCO
27、RE.学号学号SELECT STUDENT.学号学号,姓名姓名,性别性别,成绩成绩;FROM STUDENT,SCORE;WHERE 成绩成绩80 AND STUDENT.学号学号=SCORE.学号学号23DBMS执行连接操作的过程STUDENTSCORE条件【例例例例】查询并显示各个学生的学号,姓名,课程编号及成查询并显示各个学生的学号,姓名,课程编号及成查询并显示各个学生的学号,姓名,课程编号及成查询并显示各个学生的学号,姓名,课程编号及成绩。(涉及绩。(涉及绩。(涉及绩。(涉及2 2 2 2个表个表个表个表STUDENT STUDENT STUDENT STUDENT、SCORE SCO
28、RE SCORE SCORE)SELECT SELECT SELECT SELECT STUDENT.STUDENT.STUDENT.STUDENT.学号学号学号学号,STUDENT.,STUDENT.,STUDENT.,STUDENT.姓名姓名姓名姓名,SCORE.SCORE.SCORE.SCORE.课程编号课程编号课程编号课程编号,SCORE.,SCORE.,SCORE.,SCORE.成绩成绩成绩成绩 FROM STUDENT,SCOREFROM STUDENT,SCOREFROM STUDENT,SCOREFROM STUDENT,SCORE WHERE WHERE WHERE WHER
29、E STUDENT.STUDENT.STUDENT.STUDENT.学号学号学号学号=SCORE.=SCORE.=SCORE.=SCORE.学号学号学号学号 TO SCREENTO SCREENTO SCREENTO SCREEN或:或:或:或:SELECT SELECT SELECT SELECT a.a.a.a.学号学号学号学号,a.a.a.a.姓名,姓名,姓名,姓名,b.b.b.b.课程编号课程编号课程编号课程编号,b.,b.,b.,b.成绩成绩成绩成绩 FROM FROM FROM FROM STUDENT aSTUDENT aSTUDENT aSTUDENT a,SCORE bSCO
30、RE bSCORE bSCORE b WHERE WHERE WHERE WHERE a.a.a.a.学号学号学号学号=b.=b.=b.=b.学号学号学号学号 TO SCREENTO SCREENTO SCREENTO SCREEN24例例3:3:检索学号为检索学号为“42000401”的学生姓名以及所的学生姓名以及所选修的课程名称和授课教师姓名。选修的课程名称和授课教师姓名。SELECTSELECT 姓名姓名姓名姓名,课程名称课程名称课程名称课程名称,教师姓名教师姓名教师姓名教师姓名;FROMFROM STUDENT,COURSE,SCORE,TEACHER;STUDENT,COURSE,S
31、CORE,TEACHER;WHEREWHERE STUDENT.STUDENT.学号学号学号学号=SCORE.=SCORE.学号学号学号学号 AND ;AND ;COURSE.COURSE.课程编号课程编号课程编号课程编号=SCORE.=SCORE.课程编号课程编号课程编号课程编号 AND;AND;COURSE.COURSE.教师编号教师编号教师编号教师编号=TEACHER.=TEACHER.教师编号教师编号教师编号教师编号 AND;AND;STUDENT.STUDENT.学号学号学号学号=42000401=4200040125 说明说明说明说明1 1:FromFrom短语:后面接多个表时,两
32、个表之间用逗号隔开。短语:后面接多个表时,两个表之间用逗号隔开。短语:后面接多个表时,两个表之间用逗号隔开。短语:后面接多个表时,两个表之间用逗号隔开。联接条件:两个表进行联接查询的前提是一定有联接条件:两个表进行联接查询的前提是一定有联接条件:两个表进行联接查询的前提是一定有联接条件:两个表进行联接查询的前提是一定有“相同相同相同相同”的字段名。的字段名。的字段名。的字段名。联接的方法:联接的方法:联接的方法:联接的方法:表名表名表名表名1.1.字段名字段名字段名字段名=表名表名表名表名2.2.字段名字段名字段名字段名 如:如:如:如:“student.student.学号学号学号学号=sc
33、ore.=score.学号学号学号学号”查询条件:成绩查询条件:成绩查询条件:成绩查询条件:成绩80”80”为查询条件为查询条件为查询条件为查询条件 联接条件和查询条件用联接条件和查询条件用联接条件和查询条件用联接条件和查询条件用ANDAND联接,并且都放在联接,并且都放在联接,并且都放在联接,并且都放在wherewhere短语中。短语中。短语中。短语中。SelectsSelects查询项,若为多个表的公共字段,则指明来源的表。查询项,若为多个表的公共字段,则指明来源的表。查询项,若为多个表的公共字段,则指明来源的表。查询项,若为多个表的公共字段,则指明来源的表。格式为:格式为:格式为:格式为
34、:表名表名表名表名.字段名字段名字段名字段名SELECT STUDENT.学号学号,姓名姓名,性别性别,成绩成绩;FROM STUDENT,SCORE;WHERE 成绩成绩80 AND STUDENT.学号学号=SCORE.学号学号26 说明说明2(注:多表连接用注:多表连接用WHERE为好为好):P137超链接查询超链接查询内部连接:内部连接:内部连接:内部连接:JOIN JOIN 或或或或 INNER JOININNER JOIN 普通的连接普通的连接普通的连接普通的连接左连接:左连接:左连接:左连接:LEFT JOINLEFT JOIN 除满足连接条件的记录出现在查询除满足连接条件的记录
35、出现在查询除满足连接条件的记录出现在查询除满足连接条件的记录出现在查询 结果中外,第一个表中不满足连接条件的也出现。结果中外,第一个表中不满足连接条件的也出现。结果中外,第一个表中不满足连接条件的也出现。结果中外,第一个表中不满足连接条件的也出现。右连接:右连接:右连接:右连接:RIGHT JOINRIGHT JOIN .,.,第第第第2 2个表中不满足的也出现。个表中不满足的也出现。个表中不满足的也出现。个表中不满足的也出现。全连接:全连接:全连接:全连接:FULL JOINFULL JOIN .,.,两表中不满足的也出现。两表中不满足的也出现。两表中不满足的也出现。两表中不满足的也出现。S
36、ELECT SCSELECT SCSELECT SCSELECT SCOREOREOREORE.学号,学号,学号,学号,COURSE.COURSE.COURSE.COURSE.课程名称,课程名称,课程名称,课程名称,SCSCSCSCOREOREOREORE.成绩成绩成绩成绩 FROM SCOREFROM SCOREFROM SCOREFROM SCORE,COURSE COURSE COURSE COURSE WHERE SC WHERE SC WHERE SC WHERE SCOREOREOREORE.课程编号课程编号课程编号课程编号=COURSE.=COURSE.=COURSE.=COUR
37、SE.课程编号课程编号课程编号课程编号例例4 4:查询并显示各个学生的学号,所学课程:查询并显示各个学生的学号,所学课程名称及课程成绩。名称及课程成绩。(涉及涉及涉及涉及2 2 2 2个表个表个表个表COURSE COURSE COURSE COURSE、SCORE)SCORE)SCORE)SCORE)SELECT SCORE.SELECT SCORE.SELECT SCORE.SELECT SCORE.学号,学号,学号,学号,COURSE.COURSE.COURSE.COURSE.课程名称,课程名称,课程名称,课程名称,SCORE.SCORE.SCORE.SCORE.成绩成绩成绩成绩 FRO
38、M SCORE FROM SCORE FROM SCORE FROM SCORE JOINJOINJOINJOIN COURSE COURSE COURSE COURSE ONONONON SC SC SC SCOREOREOREORE.课程编号课程编号课程编号课程编号=COURSE.=COURSE.=COURSE.=COURSE.课程编号课程编号课程编号课程编号27说明说明3:特殊的连接:特殊的连接-自身连接自身连接P135自身连接是指使用同一个表的相同列进行比较连接。这自身连接是指使用同一个表的相同列进行比较连接。这时,对于同一个表应给出不同的别名。时,对于同一个表应给出不同的别名。例例5
39、:查询所有比:查询所有比“张华张华”大的学生姓名和出生日期大的学生姓名和出生日期SELECT X.姓名姓名,X.出生日期出生日期 FROM Student X,Student Y WHERE X.出生出生日期日期Y.出生出生日期日期 AND Y.姓名姓名=张华张华28o格式:格式:ORDER BY ASC|DESC,ASC|DESCSELECTFROM WHEREORDER BY 字段名字段名1 ASC|DESC,字段名字段名2ASC|DESC二、排序查询:二、排序查询:P12629例例1:按学生的出生日期升序检索出全部学生信息。:按学生的出生日期升序检索出全部学生信息。例例2:检索学生信息,
40、按学生的性别升序排序,如果性:检索学生信息,按学生的性别升序排序,如果性别相同则按学生的出生日期降序进行排序。别相同则按学生的出生日期降序进行排序。SELECT*FROM STUDENT ORDER BY出生日期出生日期SELECT*FROM STUDENT;ORDER BY 性别性别 ASC,出生日期出生日期 DESC301)ORDER BY对最终结果进行排序,位对最终结果进行排序,位置在最后置在最后2)ASC/DESC在排序的字段名后,默认在排序的字段名后,默认为升序为升序3)按多列排序时,各字段名之间用)按多列排序时,各字段名之间用“,”相隔相隔注注意意311、确定范围、确定范围BETW
41、EENAND 2、确定集合、确定集合IN3、部分匹配查询、部分匹配查询LIKE 字符串匹配运算字符串匹配运算4、不等于、不等于!=用在用在WHERE子句中子句中三、带特殊运算符的条件查询三、带特殊运算符的条件查询 P130321、确定范围、确定范围格式:格式:BETWEENAND 表示在表示在和和之间之间包含界值包含界值NOT BETWEENAND 表示表示不不在在和和之间之间注注意意331、确定范围、确定范围 P130例例1:查询入学时间在:查询入学时间在1997年年1月月1日至日至1999年年12月月30日之间的学生的信息。日之间的学生的信息。SELECT*FROM STUDENT WHE
42、RE;入学时间入学时间 BETWEEN 1997-01-01 AND1999-12-30SELECT*FROM STUDENT WHERE;入学时间入学时间=1997-01-01 AND 入学时间入学时间=80 35例例2:查询没有选修课程编号为:查询没有选修课程编号为“10002101”或或“10002103”并且成绩不及格的学生的学号、并且成绩不及格的学生的学号、课程编号和成绩。课程编号和成绩。SELECT*FROM SCORE;WHERE 课程编号课程编号 NOT IN(10002101,10002103)AND 成绩成绩60 363、部分匹配查询、部分匹配查询 P131格式:格式:字段
43、名字段名 like 字符串常量字符串常量 通配符:通配符:%:0个或多个字符个或多个字符 _:一个字符:一个字符37例例1:查询所有姓:查询所有姓“张张”的学生的学号、姓名、性别、专业的学生的学号、姓名、性别、专业。例例2:查询姓名第二个字是:查询姓名第二个字是“春春”的学生的学号、姓名、性的学生的学号、姓名、性别、专业。别、专业。SELECT 学号学号,姓名姓名,性别性别,专业名称专业名称 FROM STUDENT;WHERE 姓名姓名 LIKE 张张%SELECT 学号学号,姓名姓名,性别性别,专业专业名称名称FROM STUDENT;WHERE 姓名姓名 LIKE _ _春春%384、不
44、等于(、不等于(!=)P131例例1:查询家庭住址在哈尔滨并且不是语种不查询家庭住址在哈尔滨并且不是语种不是俄语的学生的信息。是俄语的学生的信息。SELECT*FROM STUDENT;WHERE 家庭住址家庭住址=哈尔滨哈尔滨 AND 语种语种!=俄语俄语391、简单的计算查询简单的计算查询(用在用在SELECTSELECT中,对查询结果中中,对查询结果中数值型数值型字段值字段值进行计算进行计算 )P127)P127注注:AS AS 新字段名新字段名:给结果指定字段别名给结果指定字段别名(1)COUNT(DISTINCT 字段名字段名):统计数目:统计数目 COUNT():统计元组个数统计元
45、组个数(2)SUM(字段名字段名):求总和:求总和(3)AVG(字段名字段名):求平均值:求平均值(4)MAX(字段名字段名):求最大值:求最大值(5)MIN(字段名字段名):求最小值:求最小值四、计算与分组查询四、计算与分组查询 P12740例例1:统计授课教师的数目。:统计授课教师的数目。例例2:统计:统计STUDENT表中有多少个学生记录。表中有多少个学生记录。SELECT COUNT(DISTINCT 教师编号教师编号)AS 人数人数 FROM COURSESELECT COUNT(*)AS 人数人数 FROM STUDENT41例例3:求学号为:求学号为420000502的学生平均成
46、绩。的学生平均成绩。例例4:求:求SCORE表中的最高分和最低分。表中的最高分和最低分。SELECT MAX(成绩成绩)AS 最高分最高分,MIN(成绩成绩)AS 最低分最低分;FROM SCORESELECT AVG(成绩成绩)AS 平均分平均分 FROM SCORE;WHERE 学号学号=42000050242用在用在SELECT后后COUNT(*):计算关系中所含元组个数:计算关系中所含元组个数AS 新字段名:给计算结果指定字段名新字段名:给计算结果指定字段名注注意意432、分组与计算查询、分组与计算查询 P128格式:格式:GROUP BY HAVING 例例1:检索出:检索出每个每个
47、学生的学号、总分、平均分、最高分和学生的学号、总分、平均分、最高分和最低分。最低分。SELECT 学号学号,SUM(成绩成绩)AS 总分总分,;AVG(成绩成绩)AS 平均分平均分,;MAX(成绩成绩)AS 最高分最高分,;MIN(成绩成绩)AS 最低分最低分;FROM SCORE;GROUP BY 学号学号 44学号学号课课程程编编号号成成绩绩XS0401C00296XS0402C00884XS0401C00367XS0403C01055XS0402C00782XS0402C00365XS0402C00989XS0401C00775学号学号课课程程编编号号成成绩绩XS0401C00296XS
48、0401C00367XS0401C00775XS0402C00884XS0402C00782XS0402C00365XS0402C00989XS0403C01055学号学号总总分分平均分平均分最高分最高分最低分最低分XS040116381.29667XS0402320808965XS04035555555545例例2:检索出:检索出“计算机科学与技术系计算机科学与技术系”的每个学生的学的每个学生的学号、姓名、总分、平均分、最高分和最低分。号、姓名、总分、平均分、最高分和最低分。SELECT STUDENT.学号学号,姓名姓名,;SUM(成绩成绩)AS 总分总分,;AVG(成绩成绩)AS 平均分
49、平均分,;MAX(成绩成绩)AS 最高分最高分,;MIN(成绩成绩)AS 最低分最低分;FROM STUDENT,SCORE;WHERE STUDENT.学号学号=SCORE.学号学号 AND;专业名称专业名称=“计算机科学与技术计算机科学与技术”;GROUP BY STUDENT.学号学号46学号学号课课程程编编号号成成绩绩XS0401C00296XS0402C00884XS0401C00367XS0403C01055XS0402C00782XS0402C00365XS0402C00989XS0401C00775例例3:检检索索选选修修课课程程在在3门门以以上上(含含3门门)的的每每个个学学
50、生生的学号和平均成绩,并按平均成绩升序排序的学号和平均成绩,并按平均成绩升序排序注注意意:ORDER BY后后只只能能接接字字段段名名,不不能能接接函数函数SELECT 学号学号,AVG(成绩成绩)AS 平均成绩平均成绩 FROM SCORE;GROUP BY 学号学号 HAVING COUNT(*)=3;ORDER BY 平均成绩平均成绩分组条件分组条件47学号学号课课程程编编号号成成绩绩XS0401C00296XS0401C00367XS0401C00775XS0402C00884XS0402C00782XS0402C00365XS0402C00989XS0403C01055学号学号平均成