第十八课SQL语言教案docx.docx
- 文档编号:4441019
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:11
- 大小:23.01KB
第十八课SQL语言教案docx.docx
《第十八课SQL语言教案docx.docx》由会员分享,可在线阅读,更多相关《第十八课SQL语言教案docx.docx(11页珍藏版)》请在冰豆网上搜索。
第十八课SQL语言教案docx
第十八课SQL语言
[课题]SQL语言
[课型]新课
[授课课时]
[教学冃标]
掌握数据库的建立,数据库表的建立,SELECT,INSERT,UPDATE,DELETE语旬的使用[教学重点]
SELECT的使用
[教学难点]
数据库表的建立,SELECT的使川
[教学过程]
结构化查询语言SQL(StructuredQueryLanguage)是一种介于关系代数与关系演算Z间的语言,其功能包括查询、操纵、定义和控制四个方面,是一个通用的、功能极强的关系数据库语言。
冃前已成为关系数据库的标准语言。
SQL语言的版本包括:
SQL-89,SQL-92,SQL99。
3.1基本概念
SQL语言Z所以能够为用户和业界所接受,成为国际标准,是因为它是一个综合的、通用的、功能极强同时乂简洁易学的语言。
SQL语言集数据查询(dataquery)、数据操纵(datamanipulation)、数据定义(datadefinition)和数据控制(datacontrol)功能于一休,充分休现了关系数据语言的特点和优点。
其主要特点包払•体化、高度非过程化、简洁、能以多种方式使川、面向集合的操作方式
1.一体化
SQL语言集数据定义语言DDL、数据操纵语言DMI,、数据控制语言DCL的功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动,包括定义关系模式、录入数据以建立数据库、查询、更新、维护、数据库璽构、数据库安全性控制等一系列操作要求,这就为数据库应用系统开发捉供了良好的环境,例如用户在数据库投入运行后,还可根据需要随时地逐步地修改模式,并不影响数据库的运行,从而使系统具冇良好的可扩充性。
2.高度非过程化
非关系数据模型的数据操纵语言是面向过程的语言,用具完成某项请求,必须指定存取路径。
而川SQL语言进行数据操作,用户只需提出“做什么”,而不必指明“怎么做”,因此用户无需了解存取路径,存取路径的选择以及SQL语句的操作过程由系统自动完成。
这不但人大减轻了用户负担,而且有利于捉高数据独立性。
3.简洁
SQL语言功能极强,但由于设计巧妙,语言十分简洁,完成数据定义、数据操纵、数据控制的核心功能只用了9个动词:
CREATE、DROP、SELECT.INSERT.UPDATE.DELETE.GRANT、REVOKE,如表3-1所示。
而H.SQL语言语法简单,接近英语口语,因此容易学习,容易使用。
4.能以多种方式使用
•SQL语言既是自含式语言,又是嵌入式语言。
•作为自含式语言,它能够独立地用于联机交互的使用方式,用户可以在终端键盘上直接键入SQL命令对数据库进行操作。
作为嵌入式语言,SQL语句能够嵌入到高级语言(例如C、PB)程序中,供程序员设计程序时使用。
而在两种不同的使用方式下,SQL语言的语法结构基本上是一致的。
这种以统一的语法结构提供两种不同的使用方式的作法,为用户提供了极大的灵活性与方便性。
5.面向集合的操作方式(补充)
•SQL语言采用集合操作方式,不仅查找结果可以是元组的集合,而H.—次插入、删除、更新操作的对彖也町以是元组的集合。
•非关系数据模型采用的是面向记录的操作方式,任何一个操作其对彖都是一条记录。
例如查询所冇平均成绩在80分以上的学生姓名,川户必须说明完成该请求的具体处理过程,即如何用循环结构按照某条路径一条一条地把满足条件的学生记录读出來。
3.1.3SQL语言功能概述
SQL的功能分成四部分:
数据定义、数据控制、数据操纵、数据查询
SQL语言的动词
SQL功能
动词
数据查询
SELECT
数据定义
CREATE,DROP,ALTER
数据操纵
INSERT,UPDATE,DELETE
数据控制
GRANT,REVOKE
[课题]SQL语言
[课型]新课
[授课课时]
[教学目标]
掌握数据库的建立,数据库表的建立,SELECT,INSERT,UPDATE,DELETE语句的使用
[教学重点]
SELECT的使用
[教学难点]
数据库表的建立,SELECT的使川
[教学过程]
表是数据库中非常重要的对彖,它用于存储用户的数据。
创建表就是定义表所包含的列的结构,其中包括列的名称、约束等。
3.3.1基本表的定义和删除
1.定义基本表
一般格式如b:
CreateTable〈表名〉(〈列名〉〈数据类型〉[列级完整性约束条件]
[,〈列名〉〈数据类型〉[列级完整性约束条件]••・]
[,〈表级完整性约束条件>]);
其中:
〈表名〉是所要定义的基本表的名字,最好能表达表的应用语义
〈列名〉是由一个或多个属性(列)组成。
建表的同时通常还町以定义与该表冇关的完整性约束条件,这些完整性约束条件被存入系统的数据字典中,当用户操作表中数据时由dbms自动检查该操作是否违背这些完整性约束条件。
如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。
下面我们以一个“学牛一课程”数据库为例说明create语句的各种川法。
学牛一课程”数据库中包括三个表:
(1)“学生”表student由学号(Sno)>姓名(Sname)、性别(Ssex)>年龄(Sage)、所在系(Sdept)五个属性组成,可记为:
Student(Sno,Sname,Ssex,Sage,Sdept)
(2)"课程"表course由课程号(Cno)>课程名(Cname)、学期(Semster)、学分(Ccredit)、学时(Period)五个属性组成,可记为:
Course(Cno,Cname,Semster,Ccredit,Period)
(3)“学生选课”表sc由学号(Sno)、课程号(Cno)、成绩(Grade)三个属性组成,可记为:
Sc(Sno,Cno,Grade)
例1:
建立一个"学主”表student,它由学号sno、姓名sname>性别ssex、年龄sage.所在系sdept五个屈性纽成,其中学号属性不能为空,并且具值是唯一的。
CreateTableStudent
(SnoChar(5)PrimaryKey,
SnameChar(20)NotNul1,
SsexChar
(1)Check(Ssex='男'OrSsex='女'),
SageTinyintCheck(Sage>=15AndSage<=45),SdeptChar(20)Defalut'计算机系');
例2:
建立课程表
CreateTableCourse
(CnoChar(10)NotNull,
CnameChar(20)NotNul1,
CcreditTinyintCheck(Ccredit>0)
SemesterTinyintCheck(Semester>0),
PeriodTntCheck(Period>0),
PrimaryKey(Cno));
3.4数据查询功能
查询功能是SQL语言的核心功能,是数据库屮使川得最多的操作,也是最复杂的一个语句。
3.4.1查询语句的基本结构
一般格式为:
SELECT[ALL|DISTINCT]<目标列表达式>[,<B标列表达式〉]・・・
FROM<表名或视图名>[,〈表名或视图名〉]・・・
[WHERE<条件表达式>]
[GROUPBY<分组依据列>]
[HAVING〈条件表达式〉]
[ORDERBY<排序依据列〉[ASC|DESC]];
整个SELECT语句的含义是:
根据WHERE子句的条件表达式,从FROM子句指定的基本表或视图中找出满足条件的元组,再按SELECT子句屮的口标列表达式,选出元纽屮的屈性值形成结果表。
如果有GROUP子句,则将结果按〈分组依据列>的值进行分纽,该属性列值相等的元组为一个组,每个组产生结果表中的一条记录。
通常会在每组中作用集函数。
如果GROUP了句带HAVING短语,则只冇满足指定条件的组才予输出。
如果冇ORDER了句,则结果表还要按〈排序依据列〉的值的升序或降序排序。
3.4.2简单查询
•选择表中的若干列
(1)查询指定列
•查询全体学生的学号与姓名
SELECTSno,SnameFROMStudent;
5标列表达式〉中各个列的先后顺序可以与表中的顺序不一致。
也就是说,用户在查询时口J以根据应川的需要改变列的显示顺序。
例6:
查询全体学生的姓名、学号、所在系
SELECTSname,Sno,SdeptFROMStudent;
结果表中的列的顺序与基表屮不同,是按查询要求,先列出姓名属性,然后再列学号属性和所在系属性。
(2)查询全部列
例7:
查询全休学牛的详细记录
SELECT*FROMStudent;
该SELECT语句实际上是无条件地把Student表的全部信息都查询出來,所以也称为全表查询,这是最简单的一种查询。
(3)查询经过计算的值
SELECT了句的〈冃标列表达式〉不仅可以是表中的属性列,也可以是冇关表达式,即可以将查询出来的属性列经过一定的计算后列出结果。
[课题]SQL语言
[课型]新课
[授课课时]
[教学目标]
掌握数据库的建立,数据库表的建立,SELECT,INSERT,UPDATE,DELETE语旬的使用
[教学重点]
SELECT的使用
[教学难点]
数据库表的建立,SELECT的使川
[教学过程]
例8:
查询全体学生的姓名及其出生年份
SELECTSname,2004SageFROMStudent;
木例中,〈冃标列表达式〉中第二项不是通常的列名,而是一个计算表达式,是川当前的年份(假设为2004年)减去学生的年龄,这样,所得的即是学生的出身年份。
输出的结
果为:
Sname
1976
刘晨
1977
王名
1978
张立
1978
不仅口J以是算术表达式,还口J以是字符串常量、函数等。
例9:
查询全体学生的姓名、出生年份和所有系
SELECTSname,'YearofBirth:
',2004-Sage出生年份FROMStudent;
结果为:
Sname
出生年份
YearofBirth:
1976
刘忌
YearofBirth:
1977
王名
YearofBirth:
1978
张立
YearofBirth:
1978
川户町以通过指定别名來改变查询结果的列标题,这对于含算术表达式、常量、函数名的冃标列表达式尤为冇用。
2.选择表中的若干元组
(1)消除取值重复的行
例10:
查询所冇选修过课的学生的学号
SELECTSnoFROMSC;
假设sc表中冇下列数据
Sno
Cno
Grade
95001
1
92
95001
2
85
95001
3
88
95002
2
90
95002
3
80
执行上面的SELECT语句后,结果为:
Sno
95001
95001
95001
95002
95002
该查询结果里包含了许多重复的行。
如果想去掉结果表中的重复行,必须指
定DISTINCT短语:
SELECTDISTINCTSnoFROMSC;
执行结果为:
Sno
95001
95002
(2)查询满足条件的元组
查询满足指定条件的元组可以通过WHERE了句实现。
WHERE了句常川的查询条件
如表33所示。
常用的查询条件
查询条件谓词
比较(比较运算符)
确定范围
确定集合
字符匹配
空值
多重条件
①比较大小
=、>、>二、〈、〈二、◊(!
=)、NOT
BETWEENAND,NOTBETWEENAND
IN,NOTTN
LTKE,NOTLIKE
TSNULL,TSNOTNULL
AND,OR
例11:
查询计算机系全体学生的名单SELECTSnameFROMStudentWHERESdept='计算机系';
例12:
查询所有年龄在20岁以卜的学牛姓名及其年龄
SELECTSname,SageFROMStudentWHERESage<20;或SELECTSname,SageFROMStudentWHERENOTSage>=20;
例13:
查询考试成绩有不及格的学生的学号
SELECTDTSTTNCTSnoFROMCourseWHEREGrade<60;
这里使用了DTSTTNCT短语,当一个学生冇多门课程不及格,他的学号也只列一次。
2确定范围
例14:
查询年龄在20至23岁Z间的学生的姓名、系别、和年龄
AND23;
与BETWEEN…AND…相对的谓词是NOTBETWEEN…AND…。
例15:
查询年龄不在20至23岁Z间的学生姓名、系别和年龄
SELECTSname,Sdept,SageFROMStudentWHERESageNOTBETWEEN20AND23;
3确定集合
例16:
查询信息系、数学系和计算机系的学生的姓名和性别
SELECTSname,SsexFROMStudentWHERESdeptIN('信息系',‘数学系',’计算机系');
与1N相对的谓词是NOTIN,用于查找属性值不属于指定集合的元纽。
例17:
查询既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别
SELECTSname,SsexFROMStudentWHERESdeptNOTTN('信息系',’数学系',’计算机系');
4字符匹配
谓词HKE可以用來进行字符串的匹配。
其一般语法格式如下:
[NOT]LIKE'〈匹配串>'其含义是查找指定的属性列值与〈匹配串〉相匹配的元组。
〈匹配串〉可以是一个完整的字符串,也可以含有以下通配符。
%(百分号)代表任意长度(长度可以为0)的字符串。
_(下横线)代表任意单个字符。
[1:
匹配[]中的任意一个字符。
「]:
不匹配[]中的任意一个7符。
例18:
查所冇姓刘的学生的姓名、学号和性别
SELECTSname,Sno,SsexFROMStudentWHERESnameLIKE'刘%';
例19:
查名字中第二字为“大”或“小”的学生的姓名和学号
SELECTSname,SnoFROMStudentWHERESnameLIKE[大小]%';
例20:
查询所不姓刘的学生姓名
SELECTSname,Sno,SsexFROMStudentWHERESnameNOTLIKE'刘%';
例21:
查询学号中最后一位不是2、3、5的学生情况
SELECT*FROMStudentWHERESnoLIKE'%「235]‘;
5涉及空值的查询
例23:
某些学生选修某门课程后没冇参加考试,所以冇选课记录,但没冇考试成绩,下面我们來查一下缺少成绩的学生的学号和相应的课程号
SELECTSno,CnoFROMSCWHEREGradeTSNULL;
注意这里的’TS'不能用等号(’=)代替。
例24:
查所冇冇成绩的记录的学生学号和课程号
SELECTSno,CnoFROMSCWHEREGradeTSNOTNUIX;
6多重条件查询
逻辑运算符AND和ORnJ用來联结多个查询条件。
如果这两个运算符同时出现在同一个WHERE条件了句中,则AND的优先级高于OR,但用户可以用括号改变优先级。
例25:
查询计算机系年龄在20岁以下的学生姓名
SELECTSnameFROMStudentWIIERESdept=计算机系'ANDSage<20;
例12中的TN谓词实际上是多个0R运算符的缩写,因此例12中的查询也可以用OR运算符写成如下等价形式:
SELECTSname,SsexFROMStudentWHERESdept二'信息系'ORSdept二'数学系’ORSdept」计算机系’;
3.对查询结果排序
如果没有指定查询结果的显示顺序,DBMS将按具最方便的顺序(通常是元纽在表屮的先后顺序)输出查询结果。
用户也可以用ORDERBY了旬指定按照一个或多个属性列的升序(ASC)或降序(DESC)重新排列查询结果,其中升序ASC为缺省值。
例26:
查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列SELECTSno,GradeFROMSCWIIERECno='3'ORDERBYGradeDESC;
前面己经提到,可能冇些学生选修了3号课程后没冇参加考试,即成绩列为空值。
川ORDERBY了旬对查询结果按成绩排序时,若按升序排,成绩为空值的元组将授后显示,若按降序排,成绩为空值的元组将最先显示。
例27:
查询全体学牛情况,查询结果按所在系升序排列,对同一系屮的学生按年龄降序排列
SELECT*FROMStudentORDERBYSdept,SageDESC;
[课题]SQL语言
[课型]新课
[授课课时]
[教学目标]
掌握数据库的建立,数据库表的建立,SELECT,INSERT,UPDATE,DELETE语句的使用
[教学重点]
SELECT的使用
[教学难点]
数据库表的建立,SELECT的使川
[教学过程]
3.5.1数据插入
1.插入单个元组
插入单个元组的INSERT语句的格式为:
INSERTINTO〈表名〉[(〈属性列1>[,<属性列2>...])VALUES(<常量1>[,<常量2>]...)
(1)如果某些属性列在INTO了句中没冇出现,则新记录在这些列上将取空值。
但必须注意
的是,在表定义时说明了NOTNUI丄的属性列不能取空值。
否则会出错。
⑵如果INTO了句中没冇指明任何列名,贝IJ新插入的记录必须在每个属性列上均冇值。
例1将一个新学生记录(学号:
9521105;姓名:
陈冬;性别:
男;所在系:
信息系;年龄:
18岁)插入Student表中
INSERTINTOStudentVALUES('95020','陈冬',’男',’信息系',18);
例2插入一条选课记录('95020','1')
INSERTINTOSC(Sno,Cno)VALUES('95020','1');
新插入的记录在Grade列上取空值。
补充:
2.插入子查询结果
子查询不仅可以嵌套在SELECT语句屮,川以构造父查询的条件,也可以嵌套在INSERT语句屮,用以牛成要插入的数据。
插入了查询结果的TNSERT语旬的格式为:
INSERTINTO<表名〉[(<属性列1>[,〈属性列2>...])
其功能是以批量插入,一次将了查询的结果全部插入指定表中。
例3对每一个系,求学生的平均年龄,并把结果存入数据库
对于这道题,首先要在数据库中建立一个有两个属性列的新表,其中一列存放系名,另一列存放相应系的学生平均年龄。
CREATETABLEDeptage
(SdeptCHAR(15)
AvgageSMALLINT);
然后对数据库的Student表按系分纽求平均年龄,再把系名和平均年龄存入新表屮。
INSERTINTODeptage(Sdept,Avgage)
SELECTSdept,AVG(Sage)
FROMStudentGROUPBYSdept;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第十八 SQL 语言 教案 docx