关系数据库标准语言SQL语言.ppt
《关系数据库标准语言SQL语言.ppt》由会员分享,可在线阅读,更多相关《关系数据库标准语言SQL语言.ppt(117页珍藏版)》请在三一办公上搜索。
1、第四章 关系数据库标准语言SQL,4.1 SQL概述4.2 数据定义4.3 数据查询4.4 数据更新4.5 视图,第四章 关系数据库标准语言SQL,4.1 SQL 概述 SQL(Structed Query Language),即结构化查询语言,是关系数据库的标准语言,SQL是一个通用的、功能极强的关系数据库语言。,4.1.1 SQL的产生与发展,SQL是在1974年由Boycee和Chamberlin提出的,并在IBM公司研制的关系数据库管理系统原型System R上实现。由于SQL简单易学,功能丰富,深受用户及计算机工业界欢迎,因此被数据库厂商所采用。经各公司的不断修改、扩充和完善,SQL
2、得到业界的认可。1986年10月美国国家标准局的数据库委员会X3H2批准了SQL作为关系数据库语言的美国标准。同年公布了SQL标准文本。1987年国际标准化组织也通过了这一标准。SQL标准从1986年公布以来随着数据库技术的发展不断发展,不断丰富。,4.1.2 SQL的特点,一、综合统一SQL集数据定义语言DDL、数据操纵语言DML、数据控制语言DCL的功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动。二、高度非过程化SQL进行数据操作,只要提出“做什么”,而无需指明“怎么做”,因此无需了解存取路径。存取路径的选择以及SQL的操作过程由系统自动完成。,4.1.2 SQL的特点,
3、三、面向集合的操作方式SQL采用面向集合的操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。四、以同一种语法结构提供多种使用方式作为独立语言,它能够独立地用于联机交互的使用方式,用户可以在终端键盘上直接键入SQL命令对数据库进行操作;作为嵌入式语言,SQL语句能够嵌入到高级语言(例如C,C+,Java)程序中,供程序员设计程序时使用。,4.1.2 SQL的特点,五、语言简洁易学 SQL功能极强,但由于设计巧妙,语言十分简洁,完成核心功能只用了9个动词。SQL接近英语口语,因此容易学习,容易使用。,4.2数据定义,基本表的定义、删除、与修改一
4、、定义基本表CREATE TABLE(列级完整性约束条件,列级完整性约束条件,);,4.2数据定义,例:建立一个“学生”表Student。create table Student(sno char(9)primary key,sname char(20)unique,ssex char(2),sage smallint,sdept char(20);,4.2数据定义,例:建立一个“课程”表Course。create table Course(cno char(4)primary key,cname char(40),cpno char(4),ccredit smallint,foreign k
5、ey(cpno)references Course(cno);,4.2数据定义,例:建立学生选课表SC。create table SC(sno char(9),cno char(4),grade smallint,foreign key(sno)references student(sno),foreign key(cno)references course(cno),4.2数据定义,修改基本表ALTER TABLE ADD 完整性约束DROP ALTER COLUMN;,4.2数据定义,例:向Student表增加“入学时间”列,其数据类型为日期型。alter table Student ad
6、d s_entrance datetime;例:将年龄的数据类型由smallint改为int。alter table Student alter column sage int;,4.2数据定义,例:增加课程名必须取唯一值的约束。alter table course add unique(cname);,4.2数据定义,删除基本表DROP TABLE RESTRICT|CASCADERESTRICT:该表的删除是有限制条件的。欲删除的基本表不能被其他表的约束所引用(如CHECK,FOREIGN KEY等约束),不能有视图,不能有触发器,不能有存储过程或函数等。如果存在这些依赖该表的对象,则此表
7、不能被删除。CASCADE:该表的删除没有限制条件。在删除基本表的同时,相关的依赖对象,例如视图,都将被一起删除。(SQL Server 2000中不支持RESTRICT|CASCADE),4.2数据定义,索引的建立与删除建立索引是加快查询速度的有效手段。用户可以根据应用环境的需要,在基本表上建立一个或多个索引,以提供多种存取路径,加快查找速度。建立与删除索引有数据库管理员DBA或表的属主,负责完成。,4.2数据定义,索引的建立与删除一、建立索引CREATE UNIQUECLUSTER INDEX ON(,)索引的排列次序,可选ASC或DESC,缺省值为ASC。UNIQUE表明此索引的每一个索
8、引值只对应唯一的数据记录。CLUSTER表示要建立的索引是聚簇索引。所谓聚簇索引是指索引项的顺序与表中记录的物理顺序一致的索引组织。,4.2数据定义,二、删除索引DROP INDEX 例:索引示例。create table abc(a int,b int);create unique index abcindex on abc(a desc);drop index abc.abcindex;create clustered index abcindex on abc(a desc);,4.3数据查询,SELECT ALL|DISTINCT,FROM,WHERE GROUP BY HAVINGO
9、RDER BY ASC|DESC;,单表查询,单表查询是指仅涉及一个表的查询。一、选择表中的若干列1.查询指定列例1.查询全体学生的学号和姓名。select sno,sname from student;例2.查询全体学生的姓名、学号、所在系。select sname,sno,sdept from student;,单表查询,2.查询全部列例3.查询全体学生的详细记录。select*from student;3.查询经过计算的值例4.查询全体学生的姓名及其出生年份。select sname,2012-sage from student;例5.查询全体学生的姓名、出生年份和所在的院系,要求用小写
10、字母表示所有系名。select sname,year of birth:,2012-sage,lower(sdept)from student;,单表查询,二、选择表中的若干元组1.消除取值重复的行例6.查询选修了课程的学生学号。select sno from sc;select distinct sno from sc;2.查询满足条件的元组(1)比较大小例7.查询计算机科学系全体学生的名单。select sname from student where sdept=CS;,单表查询,例8.查询所有年龄在20岁以下的学生姓名及其年龄。select sname,sage from studen
11、t where sage20;例9.查询考试成绩有不及格的学生的学号。select distinct sno from sc where grade60;,单表查询,(2)确定范围例10.查询年龄在20-23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。select sname,sdept,sage from student where sage between 20 and 23;例11.查询年龄不在20-23岁之间的学生姓名、系别和年龄。select sname,sdept,sage from student where sage not between 20 and 23;,单表
12、查询,(3)确定集合例12.查询计算机科学系(CS)、数学系(MA)和信息系(IS)学生的姓名和性别。select sname,ssex from student where sdept in(CS,MA,IS);例13.查询既不是计算机科学系、数学系,也不是信息系的学生的姓名和性别。select sname,ssex from student where sdept not in(CS,MA,IS);,单表查询,(4)字符匹配谓词LIKE可以用来进行字符串的匹配。NOT LIKE ESCAPE%代表任意长度的字符串(长度可以为0);-(下横线)代表任意单个字符。,单表查询,例14.查询学号为
13、200215121的学生的详细情况。select*from student where sno like 200215121;例15.查询所有姓刘的学生的姓名、学号和性别。select*from student where sname like 刘%;例16.查询姓“欧阳”且全名为3个汉字的学生的姓名。select sname from student where sname like 欧阳_;,单表查询,例17.查询名字中第2个字为“阳”字的学生的姓名和学号。select sname,sno from student where sname like _阳%;例18.查询所有不姓刘的学生姓名
14、。select sname from student where sname not like 刘%;,单表查询,例19.查询DB_Design课程的课程号和学分。select cno,ccredit from course where cname like DB_Design escape;例20.查询以“DB_”开头,且倒数第3个字符为i的课程的详细情况。select*from course where cname like DB_%i_ escape;,单表查询,(5)涉及空值的查询例21.查询缺少成绩的学生的学号和相应的课程号。select sno,cno from sc where
15、grade is null;例22.查所有有成绩的学生学号和课程号。select sno,cno from sc where grade is not null;,单表查询,(6)多重条件查询例23.查询计算机科学系年龄在20岁以下的学生姓名。select sname from student where sdept=CS and sage20;,单表查询,三、ORDER BY子句例24.查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列。select sno,grade from sc where cno=3 order by grade desc;例25.查询全体学生情况,查
16、询结果按所在系的系号升序排列,统一系中的学生按年龄降序排列。select*from student order by sdept,sage desc;,单表查询,四、聚集函数count(列名)max(列名)min(列名)sum(列名)avg(列名),单表查询,例26.查询学生总人数。select count(*)from student;例27.查询选修了课程的学生人数。select count(distinct sno)from sc;例28.计算1号课程的学生平均成绩。select avg(grade)from sc where cno=1;,单表查询,五、GROUP BY子句GROUP
17、BY子句将查询结果按某一列或多列的值分组,值相等的为一组。例31.求各个课程号及相应的选课人数。select cno,count(sno)from scgroup by cno;,单表查询,例32.查询选修了3门以上课程的学生学号。select snofrom scgroup by snohaving count(*)3;,4.3.2 连接查询,若一个查询同时涉及两个以上的表,则称之为连接查询。一、等值与非等值连接查询连接查询的WHERE子句用来连接两个表的条件称为连接条件或连接谓词。.其中比较运算符主要有:=、=、)等。此外连接谓词还可以使用下面形式:.BETWEEN.AND.,4.3.2
18、连接查询,当连接运算为=时,称为等值连接。使用其他运算符称为非等值连接。连接谓词中的列名称为连接字段。连接条件中的各连接字段类型必须是可比的,但名字不必相同。例33.查询每个学生及其选修课程的情况。select student.*,sc.*from student,scwhere student.sno=sc.sno;,4.3.2 连接查询,例34.对例33用自然连接完成。select student.sno,sname,ssex,sage,sdept,cno,gradefrom student,scwhere student.sno=sc.sno;,4.3.2 连接查询,二、自身连接连接操作
19、不仅可以在两个表之间进行,也可以是一个表与自己进行连接,称为表的自身连接。select o,second.cpnofrom course first,course secondwhere first.cpno=o;,4.3.2 连接查询,例36.以student为主体列出每个学生的基本情况及其选课情况。select student.sno,sname,ssex,sage,sdept,cno,gradefrom student left outer join sc on student.sno=sc.sno,4.3.2 连接查询,四、复合条件连接例37.查询选修2号课程且成绩在90分以上的所有学
20、生。select student.sno,snamefrom student,scwhere student.sno=sc.sno and o=2 and sc.grade90;,4.3.2 连接查询,四、复合条件连接例38.查询每个学生的学号、姓名、选修的课程名及成绩。select student.sno,sname,cname,gradefrom student,sc,coursewhere student.sno=sc.sno and o=o;,嵌套查询,在SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING
21、短语的条件中的查询称为嵌套查询。select snamefrom studentwhere sno in(select sno from sc where cno=2);,嵌套查询,一、带有IN谓词的子查询。例39.查询与“刘晨”在同一个系学习的学生。select sno,sname,sdeptfrom studentwhere sdept in(select sdept from student where sname=刘晨);,嵌套查询,例40.查询选修了课程名为“信息系统”的学生学号和姓名。select sno,snamefrom studentwhere sno in(select s
22、no from sc where cno in(select cno from course where cname=信息系统);,嵌套查询,子查询的查询条件不依赖于父查询,这类子查询叫作不相关子查询。子查询的查询条件依赖于父查询,这类子查询称为相关子查询。,嵌套查询,二、带有比较运算符的子查询例41.找出每个学生超过他选修课程平均成绩的课程号。select sno,cnofrom sc xwhere grade(select avg(grade)from sc y where y.sno=x.sno),嵌套查询,三、带有any或all谓词的子查询子查询返回单值时可以用比较运算符,但返回多值时
23、要用ANY或ALL谓词修饰符。而使用ANY或ALL谓词时则必须同时使用比较运算符。例42.查询其他系中比计算机科学系某一学生年龄小的学生姓名和年龄。select sname,sagefrom studentwhere sage CS,嵌套查询,例43.查询其他系中比计算机科学系所有学生年龄都小的学生姓名及年龄。select sname,sagefrom studentwhere sage CS,嵌套查询,例45.查询没有选修1号课程的学生姓名。select snamefrom studentwhere not exists(select*from sc where sno=student.sn
24、o and cno=1),嵌套查询,例46 查询选修了全部课程的学生姓名。可将题目的意思转换成等价的用存在量词的形式:查询这样的学生,没有一门课程是他不选修的。,嵌套查询,select snamefrom studentwhere not exists(select*from course where not exists(select*from sc where sc.sno=student.sno and o=o),嵌套查询,例47.查询至少选修了学生200215122选修的全部课程的学生号码。本查询可以用逻辑蕴含来表达:查询学号为x的学生,对所有的课程y,只要200215122学生选修了
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关系 数据库 标准 语言 SQL
链接地址:https://www.31ppt.com/p-5928570.html