SQL结构查询语言.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《SQL结构查询语言.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 结构 查询 语言
- 资源描述:
-
1、SQL结构查询语言 SQL是一种非过程化的语言,它与通常的高级语言不同,使用SQL时,只要说明做什么,不需要说明怎么做,具体的操作全部由DBMS自动完成。例如,要查询所有女同学的姓名,只要写出SQL语句:SELECT 姓名 FROM 学生 WHERE 性别=女 SQL语言按用途可划分为三个组成部分:数据定义语言(DDL):在数据库系统中,数据库、表、视图、索引等都是对象,用于定义这些对象的SQL语句称为DDL。数据处理语言(DML):用于插入、修改、删除和查询数据的SQL语句称为DML。数据控制语言(DCL):用于实现数据完整性、安全性、一致性等控制的SQL语句称为DCL。本章将结合下面一组关
2、系模式和样本数据说明SQL语言的应用实例。关系和样本数据如图1所示。系(系编号,系名称)教工(教工号,姓名,性别,职称,工资,系编号)学生(学号,姓名,性别,出生年月,专业,家庭地址,系编号)课程(课程编号,课程名称,学时,系编号)成绩(学号,课程编号,分数)系课程图1 一组关系模式和样本数据(a)系编号系名称101数学102计算机103外语104经济课程号 课程名学时系编号C1数学681C2英语853C3计算机682C4经济学514 图1 一组关系模式和样本数据(b)教工号姓 名性别职称工 资系编号2101葛小平女教授3420.001012203李长江男副教授3190.001022405姜立
3、伟男副教授3140.001042104张丽丽女讲师224001012302康立华女教授3740.001032205王伟平男讲师2130.00102教工 学 号课程编号分数1022C1881022C2672124C1772124C2952124C3454021C4874021C2784021C3671223C1661223C2893012C2933012C384成绩 图1 一组关系模式和样本数据(c)图1 一组关系模式和样本数据(d)学 号姓 名性别出生年月系编号1022田平平女08/05/19801012124郭黎明男03/04/19811024021何明慧女04/12/19821041223
4、姜明明男12/05/19801013012何漓江男10/05/19791032104康纪平女03/04/19811024125康嘉家男07/05/19801041134包立琪女03/14/19811014115王海洋男04/13/19821041354王立平女12/05/1981101学生 说明:本书选用SQL Server2000系统作为上机实验平台,所有例题和上机操作实验案例都在SQL Server2000查询分析器中运行通过,并且所选用的题目尽量符合SQL的标准格式,如果读者选用其他数据库管理系统作为实验环境,可能有微小的区别。绝 大 多 数 关 系 D B M S,使 用CREATE
5、DATABASE命令建立数据库,其语法格式:CREATE DATABASE 例例1 1 根据图1给出的实例,用SQL语言创建一个教学数据库。CREATE DATABASE 教学 当进入SQL_Server2000系统的查询分析器后,如图2所示,在查询窗口中输入命令:CREATE DATABASE 教学,然后,点击绿色的 按钮执行命令,在窗格中显示运行的结果,创建了教学数据库。图2 用SQL语句创建数据库 在SQL语言中,利用CREATE TABLE语句创建表,其基本语法格式是:CREATE TABLE (,PRIMARY KEY(),FOREIGN KEY()REFERENCES 表名())注
6、:PRIMARY KEY子句定义主码,实现实体完整性定义;FOREIGN KEY子句定义外码,实现参照完整性定义。表1 常见的数据类型 数据类型说明范例CHAR(N)固定长度的字符串CHAR(8):长度是8个字节INT整数类型SMALLINT短整型数类型NUMERIC(P,D)共P位,其中小数位占d位NUMERIC(8,2):整数6位,小数2位DATE日期型,包括年(4位)月日 2001/10/13:2001年10月13日举例说明CREATE TABLE语句的使用方法。例例2 2 创建一个简单的表,该表的关系模式是:系(系编号,系名称)。CREATE TABLE 系 (系编号 SMALLINT
7、,系名称系名称 CHAR(12)例例3 3 在创建系表的定义中包括实体完整性定义。CREATE TABLE 系 (系编号 SMALLINT NOT NULL,系名称 CHAR(12),PRIMARY KEY(系编号)说明:在SQL-89中,规定PRIMARY KEY子句定义主码,NOT NULL关键词定义属性非空,所以,要用这两个定义来实现实体完整性规则。在SQL-92中,规定PRIMARY KEY子句定义主码且主码非空,所以,用一个子句就可以定义实体完整性。例例4 4 在创建教工表的定义中包括实体完整性和参照完整性的定义。CREATE TABLE 教工 (教工号 SMALLINT NOT N
8、ULL,姓名 CHAR(8)NOT NULL,性别 CHAR(2),职称 CHAR(8),工资 NUMERIC(8,2),系编号 SMALLINT,PRIMARY KEY (教工号),FOREIGN KEY(系编号)REFERENCES 系(系编号)例例5 5 创建成绩表,包括实体完整性和参照完整性的定义。CREATE TABLE 成绩 (学号 CHAR(6)NOT NULL,课程编号 CHAR(8)NOT NULL,分数 NUMERIC(4,1),PRIMARY KEY(学号,课程编号),FOREIGN KEY(学号)REFERENCES 学生(学号),FOREIGN KEY(课程编号)RE
9、FERENCES 课程(课程编号)注意:在上机操作时,创建表的顺序是先创建被参照关系,再创建参照关系,即“先父后子”。如果要反复练习创建表的过程,需要删除已经建立的表时,删除的顺序与创建表的顺序正相反,即“先子后父”。用SQL语言的ALTER TABLE 语句可以修改表的结构。下面结合实例说明ALTER TABLE 语句的使用方法。1.增加新的属性,所有元组在这个新属性上都将赋值NULL。语句格式是:ALTER TABLE ADD 例6 在系表中添加一个电话号码属性。ALTER TABLE 系 ADD 电话号码 CHAR(8)2.2.修改属性的性质,语句格式是:ALTER TABLE MODI
10、FY 注意:在SQL SERVER 2000系统中规定修改属性的性质,语句格式为:ALTER TABLE ALTER COLUMN 例例7 7 修改系表中电话号码属性的宽度。ALTER TABLE 系 ALTER COLUMN 电话号码 CHAR(13)删除一个属性,语句格式是:ALTER TABLE DROP 注意:在SQL SERVER 2000系统中应该写成:ALTER TABLE DROP COLUMN 例例8 8 删除系表中电话号码属性。SQL 语句是:ALTER TABLE 系 DROP COLUMN 电话号码 SQL语言中,删除表的语句格式是:DROP TABLE 例例9 9 删
11、除教工表。DROP TABLE 教工 注意:系统不允许删除已由REFERENCES子句定义的被参照表。假设在教工表中定义外码参照系表,若要删除系表,就必须先删除教工表,否则系统拒绝删除操作。例例10 10 假设在教学数据库中创建了系、教工、学生、课程、成绩5个表,并且定义了参照完整性规则。如果要删除学生表,则必须先删除成绩表。DROP TABLE 成绩 DROP TABLE 学生 同理,要删除系表,必须先删除参照系表的其他表。即先删除成绩表,再删除学生、教工和课程表(这三个表之间的删除顺序无关紧要),最后删除系表。DROP TABLE 成绩 DROP TABLE 学生 DROP TABLE 教
12、工 DROP TABLE 课程 DROP TABLE 系 在表的属性项上创建索引,可以加快查询速度。SQL语言中,创建索引的语句格式:CREATE INDEX ON()例例11 对教授表的教工号属性建立一个名为SCODEX的索引。CREATE INDEX SCODEX ON 教授(教工号)SQL语言允许建立唯一性索引。对侯选码建立唯一性索引,可以防止输入重复的数据。例例12 12 对学生表的学号属性建立唯一性索引。CREATE UNIQUE INDEX SCODEX ON 学生(学号)说明:建立了唯一性索引之后,若输入一个重复的学号时,系统将产生错误提示:duplicate value in
13、index.本节将介绍SQL语言的数据操作功能,包括插入、更新和删除数据的操作命令。在SQL 语言中,数据插入语句有三种格式。第一种格式是在表中插入一个元组,语法格式是:INSERT INTO VALUES(,.,)例例13 13 在系表中插入一行数据。INSERT INTO 系 VALUES(102,管理科学)显示所插入的数据:SELECT*FROM 系 显示结果:系编号系名称102管理科学 例例14 14 向教工表中插入一行数据。INSERT INTO 教工 VALUES(2001,葛小平,女,教授,3420.00,102)显示所插入的数据:SELECT*FROM 教工 显示结果:教工号姓
14、名性别 职称工资系编号2001葛小平女教授 3420.00102说明:这种格式适合向表中插入一整行数据。值得注意的是所列值的顺序必须与属性的顺序和类型一致。第二种格式用于在表中插入部分属性的值,语法格式是:INSERT INTO INSERT INTO ()VALUES(VALUES()例例15 15 向教工表中插入一个教工号、姓名和工资。INSERT INTO 教工(教工号,姓名,工资)VALUES(2109,田新民,2650)显示所插入的数据:SELECT*FROM 教工 显示结果:教工号姓名性别 职称工资系编号2001葛小平女教授 3420.001022109田新民2650.00 说明:
15、这种格式适合在表的部分属性上插入数据。应注意的是值的顺序应该与所列属性的顺序和类型相一致。第三种格式是将VALUES子句换成一个查询语句,语法格式是:INSERT INTO()SELECT 一个查询语句 FROM 例例16 将教工表的姓名和工资拷贝到一个酬金表中。(1)创建一个酬金表。CREATE TABLE 酬金 (教工姓名 CHAR(8),工资 NUMERIC(8,2)(2)将教工表中姓名和工资两列数据拷贝到酬金表中。INSERT INTO 酬金(教工姓名,工资)SELECT 姓名,工资 FROM 教工 (3)显示操作的结果:SELECT*FROM 酬金 显示结果:教工姓名工资葛小平342
16、0.00田新民2650.00 SQL语言的数据更新语句的格式是:UPDATE SET=,=,WHERE 例例17 17 将教工表中职称为“教授”的工资增加10%。UPDATE 教工 SET 工资=工资*1.1 WHERE 职称=教授 只修改职称为教授的元组的工资属性值。例例18 18 将教工表中所有人的工资增加5%。UPDATE 教工 SET 工资=工资*1.05 修改所有元组的工资属性的值。SQL语言中,删除数据语句的格式是:DELETE FROM WHERE 例例19 19 从教工表中删除教工号为2001的教工。DELETE FROM 教工 WHERE 教工号=2001 查看删除的结果:S
17、ELECT*FROM 教工 显示结果:教工号姓名性别职称工资系编号2109田新民2650.00 例例20 20 删除酬金表的所有数据。DELETE FROM 酬金 查看删除的结果:SELECT*FROM 酬金 显示结果:说明:这个语句只删除酬金表的数据,不删除表的结构,此时,酬金表是一个空表。教工姓名工资 本节将介绍SQL语言的数据查询的基本功能。其中包括查询语句的基本结构、更名运算、元组变量、字符串操作、排序操作和分组操作。SQL查询语句的一般格式:SELECT ,FROM ,WHERE 查询语句的三个子句分别实现关系代数的一种运算:1.SELECT子句对应关系代数中的投影运算,列出查询结果
18、中的属性。2.FROM子句对应关系代数中的笛卡儿积,列出查询需要搜索的关系。3.WHERE子句对应关系代数中的选择运算,条件表达式中所涉及的属性将属于FROM子句所列的关系。查询语句等价于关系代数表达式:A1,A2,.An(p(R1R2Rm)其中:Ai表示属性i,Rj表示关系j,P表示选择条件。这个表达式的含义是:首先计算R1、R2到Rm的笛卡儿乘积,然后,选择满足条件P的元组,最后对选择的结果进行投影。从查询语句等价的关系代数表达式,可以分析SQL查询语句的执行过程:1.构造FROM子句中关系的笛卡儿积。2.根据WHERE子句中的条件表达式,进行选择操作。3.根据SELECT子句给出的列名进
19、行投影操作。假设有关系R、S和一个SQL查询语句,如图3所示。分析SQL查询语句与关系代数运算的对应关系。R S 图3 关系R、S和一个SQL查询语句 A B C a1 b1 c2 a2 b2 c2 a3 b1 c4 A D E a1 d1 e2 a2 d2 e3查询语句:SELECT R.A,B,D,E FROM R,SWHERE R.A=S.A分析这个查询语句执行的过程:1.先计算 RS ABCADEa1b1c2a1d1e2a1b1c2a2d2e3a2b2c2a1d1e2a2b2c2a2d2e3a3b1c4a1d1e2a3b1c4a2d2e3 2.依据条件 进行选择操作 ABCADEa1b
20、1c2a1d1e2A2b2c2a2d2e3 进行投影操作 R.ABDEa1b1d1e2a2b2d2e3 说明:实际上,SQL不一定完全按照这个步骤进行操作。通常是采取某种等价的算法,例如,先选择,再做笛卡儿乘积,最后投影,用减少笛卡儿乘积次数的方法,来提高查询效率。SQL查询语句的运算结果仍然是一个关系,这个关系的属性由SELECT子句的列名表给出。SELECT子句的参数有多种形式。1.指定某个或某一些属性。指定某个或某一些属性。例例21 21 列出所有教授的姓名。SELECT 姓名 FROM 教工 WHERE 职称=教授 查询结果:姓名葛小平康立华 例例22 22 列出所有教授的姓名和工资:
21、SELECT 姓名,工资 FROM 教工 WHERE 职称=教授 查询结果:姓名工资葛小平3420.00康立华3740.00 2.指定指定FROM子句中所有关系的属性都将出现在查询结果中。子句中所有关系的属性都将出现在查询结果中。例例23 23 列出教授的所有信息。SELECT *FROM 教工 WHERE 职称=教授 查询结果:教工号姓名性别职称工资系编号2001葛小平女教授3420.001022302康立华女教授3740.00103 利用关键词利用关键词DISTINCT消除重复出现的元组。消除重复出现的元组。例例24 24 列出教工表中的系编号。(注意有重复的系编号)SELECT 系编号
22、FROM 教工 查询结果:系编号101102104101103102 例例25 25 列出教工表中的系编号并消除重复的元组。SELECT DISTINCT 系编号 FROM 教工 查询结果:系编号101102104103 4.在在SELECT子句中还可以对输出的属性重命名。子句中还可以对输出的属性重命名。例例26 26 已知学分=学时/17,计算每一门课程的学分数。SELECT 课程名,学时/17 AS 学分 FROM 课程 查询结果:课程名学分数学4英语5计算机6经济学3 5.SELECT子句中可以包含表达式 例例27 27 显示教授的工资和提高10%的工资额。SELECT 姓名,工资,工资
23、*1.1 AS 工资*1.1FROM 教工 WHERE 职称=教授 查询结果:姓名工资工资*1.1葛小平3420.003762.00康立华3740.002915.00 例例28 28 显示田平平同学出生100天的日期。SELECT 姓名,出生年月+100 AS 出生年月+100 FROM 学生 WHERE 姓名=田平平 查询结果:姓名出生年月出生年月+100田平平08/05/198011/13/1980 在后面的章节还会介绍SELECT子句的一些用法,例如,SELECT子句的参数还可以是算术函数。WHERE子句中将给出查询语句的选择条件,条件表达式中可使用逻辑运算符、比较运算符和算术运算符。W
24、HERE子句中使用的运算符如下:1.比较运算符、=、=、,用于字符串表达式、算术表达式,以及特殊的类型(如日期类型)的比较。比较表达式运算的结果是逻辑值真(T)或假(F),即表达式成立为真,否则为假。例例29 29 列出教工表中工资在3000元以上的名单。SELECT 姓名 FROM 教工 WHERE 工资=3000 例例30 30 列出学生表中1980年1月1日之后出生的学生名单。SELECT 姓名 FROM 学生 WHERE 出生年月=1980-1-1 注意:进行比较的数据类型必须一致。2.逻辑运算符AND(逻辑与)、OR(逻辑或)、NOT(逻辑非),可将多个比较表达式连接起来,构成复杂的
25、逻辑表达式,表示复杂的条件。逻辑表达式运算的结果仍是逻辑值真(T)或假(F)。例例31 31 列出学生表中在1980年1月1日之后出生的男同学名单。SELECT 姓名 FROM 学生 WHERE 出生年月=1980-1-1 AND 性别=男 例例32 32 列出教工表中教授或副教授中工资低于3000元的名单。SELECT 姓名 FROM 教工 WHERE(职称=教授 OR 职称=副教授)AND 工资=1000 AND 工资=2000 在SQL的查询语句中,可以利用ORDER BY子句,对查询结果进行排序。ORDER BY子句是查询语句的可选项,语法格式是:SELECT ,FROM ,WHERE
展开阅读全文