数据库基础SQL语言.ppt
《数据库基础SQL语言.ppt》由会员分享,可在线阅读,更多相关《数据库基础SQL语言.ppt(110页珍藏版)》请在三一办公上搜索。
1、数 据 库 基 础第三章 SQL语言,主讲人:范昭赋中山大学计算机科学系声明:本课件在汤娜老师课件基础上改编,3.1 SQL语言概况3.2 SQL数据定义语言3.3 SQL数据查询语言3.3.1 单表查询3.3.2 连接查询3.3.3 嵌套查询3.3.4 select的一般格式3.3.5 总结,3.1 SQL语言概况,SQL简介结构化查询语言SQL(Structured Query Language)是一种介于关系代数与关系演算之间的语言,其功能包括查询、操纵、定义和控制四个方面,是一个通用的、功能极强的关系数据库语言。目前已成为关系数据库的标准语言。SQL语言的版本包括:SQL-89,SQL
2、-92,SQL3。SQL特点SQL语言之所以能够为用户和业界所接受,成为国际标准,是因为它是一个综合的、通用的、功能极强同时又简洁易学的语言。SQL语言集数据查询(data query)、数据操纵(data manipulation)、数据定义(data definition)和数据控制(data control)功能于一体,充分体现了关系数据语言的特点和优点。,3.1 SQL语言概况,SQL的基本概念SQL语言支持关系数据库三级模式结构。其中外模式对应于视图(View),模式对应于基本表,内模式对应于存储文件。基本表是本身独立存在的表,在SQL中一个关系就对应一个表。一些基本表对应一个存储文
3、件,一个表可以带若干索引,索引也存放在存储文件中。存储文件的逻辑结构组成了关系数据库的内模式。存储文件的物理文件结构是任意的。视图是从基本表或其他视图中导出的表,它本身不独立存储在数据库中,也就是说数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中,因此视图是一个虚表。用户可以用SQL语言对视图和基本表进行查询。在用户眼中,视图和基本表都是关系,而存储文件对用户是透明的。,3.1 SQL语言概况,SQL的基本功能(1)数据定义功能 基本表的建立、取消与更改。索引的建立与取消。视图的创建与取消。(2)数据查询功能(包括数据表和视图)(3)数据更新功能数据插入、删除
4、、修改功能。(4)数据控制功能数据库保护功能(安全性和完整性保护)。事务管理功能(数据库故障恢复和并发事务处理)。,SQL的其他一些功能:与主语言的接口:SQL提供4条游标语句(见3.7节)用于解决SQL与主语言之间因数据不匹配所引起的接口问题。存储过程:SQL还提供远程调用功能,在远程方式下客户机中的应用可通过网络调用服务器数据库中的存储过程。存储过程是一个由SQL语句所组成的过程,该过程在被应用程序调用后就执行SQL的语句系列,最后将结果返回应用。存储过程可为多个应用所共享。,3.1 SQL语言概况,3.2 SQL数据定义语言,3.2 SQL数据定义语言,定义基本表 一般格式如下:CREA
5、TE TABLE(列级完整性约束条件,列级完整性约束条件.),;其中是所要定义的基本表的名字,它可以由一个或多个属性(列)组成。建表的同时通常还可以定义与该表有关的完整性约束条件,这些完整性约束条件被存入系统的数据字典中,当用户操作表中数据时由DBMS自动检查该操作是否违背这些完整性约束条件。如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。,3.2 SQL数据定义语言,定义基本表(续)下面我们以一个“学生课程”数据库为例说明Sql语句的各种用法。“学生课程”数据库中包括三个表:“学生”表Student由学号(Sno)、姓名(Sname)、性别
6、(Ssex)、年龄(Sage)、所在系(Sdept)五个属性组成,可记为:Student(Sno,Sname,Ssex,Sage,Sdept)Sno“课程”表Course由课程号(Cno)、课程名(Cname)、先修课号(Cpno)、老师(Teacher)四个属性组成,可记为:Course(Cno,Cname,Cpno,teacher)Cno“学生选课”表SC由学号(Sno)、课程号(Cno)、成绩(Grade)三个属性组成,可记为:SC(Sno,Cno,Grade)(SNO,CNO),3.2 SQL数据定义语言,定义基本表(续)例1:建立一个“学生”表Student,它由学号Sno、姓名Sn
7、ame、性别Ssex、年龄Sage、所在系Sdept五个属性组成,其中学号属性不能为空,并且其值是唯一的。CREATETABLE Student(Sno CHAR(5)NOT NULL UNIQUE,Sname CHAR(20),Ssex CHAR(1),Sage INT,Sdept CHAR(15);,3.2 SQL数据定义语言,定义基本表(续)定义表的各个属性时需要指明其数据类型及长度。不同的数据库系统支持的数据类型不完全相同,例如IBM DB2 SQL主要支持以下数据类型:SMALLINT 半字长二进制整数。INTEGER或INT 全字长二进制整数。DECIMAL(p,q)或DEC(p,
8、q)压缩十进制数,共p位,其中小 数点后有q位。0qp15,q=0时可以省略。FLOAT 双字长浮点数。CHARTER(n)或CHAR(n)长度为n的定长字符串。VARCHAR(n)最大长度为n的变长字符串。GRAPHIC(n)长度为n的定长图形字符串。VARGRAPHIC(n)最大长度为n的变长图形字符串。DATE 日期型,格式为YYYY-MM-DD。TIME 时间型,格式为。DATETIME 日期加时间。TIMESTAMP 时间戳。,3.2 SQL数据定义语言,修改基本表一般格式为:ALTER TABLE ADD 完整性约束DROP CONSTRAINT MODIFY;其中指定需要修改的基
9、本表,ADD子句用于增加新列和新的完整性约束条件,DROP 子句用于删除指定的完整性约束条件,MODIFY子句用于修改原有的列定义。,3.2 SQL数据定义语言,修改基本表(续)例2 向Student表增加“入学时间”列,其数据类型为日期型 ALTER TABLE Student ADD Scome DATE;不论基本表中原来是否已有数据,新增加的列一律为空值。例3 将年龄的数据类型改为半字长整数 ALTER TABLE Student MODIFY Sage SMALLINT;修改原有的列定义有可能会破坏已有数据。例4 删除关于学号必须取唯一值的约束 ALTER TABLE Student
10、DROP UNIQUE(Sno);说明:SQL没有提供删除属性列的语句,用户只能间接实现这一功能,即先原表中要保留的列及其内容复制到一个新表中,然后删除原表,并将新表重命名为原表名。但sql server2000提供了删除列,3.2 SQL数据定义语言,删除基本表一般格式为:DROP TABLE 例5 删除Student表 DROP TABLEStudent 基本表定义一旦删除,表中的数据、在此表上建立的索引都将自动被删除掉,而建立在此表上的视图虽仍然保留,但已无法引用。因此执行删除操作一定要格外小心。,3.2 SQL数据定义语言,建立索引一般格式为:CREATE UNIQUE CLUSTER
11、 INDEX ON(,.);其中,指定要建索引的基本表的名字。索引可以建在该表的一列或多列上,各列名之间用逗号分隔。每个后面还可以用指定索引值的排列次序,包括ASC(升序)和DESC(降序)两种,缺省值为ASC。,3.2 SQL数据定义语言,建立索引(续)例6 为学生-课程数据库中的Student、Course、SC三个表建立索引。其中Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,Sno、Cno表按学号升序和课程号降序建唯一索引。CREATE UNIQUE INDEX Stusno ON Student(Sno);CREATE UNIQUE INDEX Coucn
12、o ON Course(Cno);CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);删除索引一般格式 DROP INDEX,3.3 SQL数据查询语言,SELECT语句一般格式为:SELECT ALL|DISTINCT,.FROM,WHERE GROUP BY HAVING ORDER BY ASC|DESC;整个SELECT语句的含义是将FROM子句指定的基本表或视图做笛卡尔集,再根据WHERE子句的条件表达式,从中找出满足条件的元组;如果有GROUP子句,则将结果按的值进行分组,该属性列值相等的元组为一个组,每个组产生结果表中的一条记录。如果
13、GROUP子句带HAVING短语,则只有满足指定条件的组才予输出。再根据SELECT子句中的目标列表达式形成结果表。如果有ORDER子句,则结果表还要按的值的升序或降序排序。Select语句的强大体现在where子句中。,3.3 SQL数据查询语言(1)(单表查询),一、选择表中的若干列 1).查询指定列例1:查询全体学生的学号与姓名 SELECT Sno,Sname FROM Student;说明:中各个列的先后顺序可以与表中的顺序不一致。也就是说,用户在查询时可以根据应用的需要改变列的显示顺序。例2:查询全体学生的姓名、学号、所在系 SELECT Sname,Sno,Sdept FROM
14、Student;说明:这时结果表中的列的顺序与基表中不同,是按查询要求,先列出姓名属性,然后再列学号属性和所在系属性。,3.3 SQL数据查询语言(1)单表查询(续),2).查询全部列例3:查询全体学生的详细记录 SELECT*FROM Student;说明:该SELECT语句实际上是无条件地把Student表的全部信息都查询出来,所以也称为全表查询,这是最简单的一种查询。也可以不用*用列名来改变列的顺序3).查询经过计算的值 SELECT子句的不仅可以是表中的属性列,也可以是有关表达式,即可以将查询出来的属性列经过一定的计算后列出结果。,3.3 SQL数据查询语言(1)单表查询(续),例4:
15、查全体学生的姓名及其出生年份 SELECT Sname,2004-Sage FROM Student;说明:本例中,中第二项不是通常的列名,而是一个计算表达式,是用当前的年份(假设为2004年)减去学生的年龄,这样,所得的即是学生的出生年份。输出的结果为:Sname 2004-Sage 李勇 1976 刘晨 1977 王名 1978 张立 1978不仅可以是算术表达式,还可以是字符串常量、函数等,3.3 SQL数据查询语言(1)单表查询(续),例5:查全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名 SELECT Sname,Year of Birth:,2004-Sage,ISL
16、OWER(Sdept)FROM Student结果为:Sname Year of Birth:2004-Sage ISLOWER(Sdept)李勇 Year of Birth:1976 cs 刘晨 Year of Birth:1977 if 王名 Year of Birth:1978 ma 张立 Year of Birth:1978 if,3.3 SQL数据查询语言(1)单表查询(续),用户可以通过指定别名来改变查询结果的列标题,这对于含算术表达式、常量、函数名的目标列表达式尤为有用。例如对于上例,可以如下定义列别名 SELECT Sname NAME,Year of Birth:BIRTH,
17、2004-Sage BIRTHDAY,ISLOWER(Sdept)DEPARTMENT FROM Student;结果为:Sname BIRTH BIRTHDAY DEPARTMENT 李勇 Year of Birth:1976 cs 刘晨 Year of Birth:1977 if 王名 Year of Birth:1978 ma 张立 Year of Birth:1978 if,3.3 SQL数据查询语言(1)单表查询(续),二、选择表中的若干元组 1).消除取值重复的行例6:查所有选修过课的学生的学号 SELECT Sno FROM SC;假设SC表中有下列数据 Sno Cno Grad
18、e-95001 1 92 95001 2 85 95001 3 88 95002 2 90 95002 3 80,3.3 SQL数据查询语言(1)单表查询(续),例6:(续)执行上面的SELECT语句后,结果为:Sno-95001 9500195001 95002 95002 该查询结果里包含了许多重复的行。如果想去掉结果表中的重复行,必须指定DISTINCT短语:SELECT DISTINCT Sno FROM SC;执行结果为:Sno-95001 95002,3.3 SQL数据查询语言(1)单表查询(续),2).查询满足条件的元组 查询满足指定条件的元组可以通过WHERE子句实现。WHER
19、E子句常用的查询条件如表3-3所示。表3-3 常用的查询条件 查询条件 谓 词-比较 上述比较运算符 确定范围 BETWEEN AND,NOT BETWEEN AND 确定集合 IN,NOT IN 字符匹配 LIKE,NOT LIKE 空值 IS NULL,IS NOT NULL 多重条件 NOT,AND,OR,3.3 SQL数据查询语言(1)单表查询(续),(a)比较例7:查计算机系全体学生的名单 SELECT Sname FROM Student WHERE Sdept=CS;例8:查所有年龄在20岁以下的学生姓名及其年龄 SELECT Sname,Sage FROM Student WH
20、ERE Sage=20;,3.3 SQL数据查询语言(1)单表查询(续),例9:查考试成绩有不及格的学生的学号 SELECT DISTINCT Sno FROM SC WHERE Grade 60;这里使用了DISTINCT短语,当一个学生有多门课程不及格,他的学号也只列一次。,3.3 SQL数据查询语言(1)单表查询(续),(b)确定范围例10:查询年龄在20至23岁之间的学生的姓名、系别、和年龄 SELECT Sname,Sdept,SageFROM Student WHERE Sage BETWEEN 20 AND 23;与BETWEEN.AND.相对的谓词是NOT BETWEEN.AN
21、D.。例11:查询年龄不在20至23岁之间的学生姓名、系别和年龄。SELECT Sname,Sdept,Sage FROM StudentWHERE Sage NOT BETWEEN 20 AND 23;,3.3 SQL数据查询语言(1)单表查询(续),(c)确定集合例12:查信息系(IS)、数学系(MA)和计算机科学系(CS)的学生的姓名和性别 SELECT Sname,Ssex FROM Student WHERE Sdept IN(IS,MA,CS)与IN相对的谓词是NOT IN,用于查找属性值不属于指定集合的元组。例13:查既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别 S
22、ELECT Sname,Ssex FROM Student WHERE Sdept NOT IN(IS,MA,CS),3.3 SQL数据查询语言(1)单表查询(续),(d)字符匹配 谓词LIKE可以用来进行字符串的匹配。其一般语法格式如下:NOT LIKE ESCAPE 其含义是查找指定的属性列值与相匹配的元组。可以是一个完整的字符串,也可以含有通配符%和_。%(百分号)代表任意长度(长度可以为0)的字符串。_(下横线)代表任意单个字符。例14:查所有姓刘的学生的姓名、学号和性别 SELECT Sname,Sno,SsexFROM Student WHERE Sname LIKE 刘%;,3.
23、3 SQL数据查询语言(1)单表查询(续),例15:查姓“欧阳”且全名为三个汉字的学生的姓名 SELECT Sname FROM Student WHERE Sname LIKE 欧阳_ _;注意,由于一个汉字占两个字符的位置,所以匹配串欧阳后面需要跟个_。例16:查名字中第二字为“阳”字的学生的姓名和学号 SELECT Sname,Sno FROM Student WHERE Sname LIKE _阳%;例17:查所不姓刘的学生姓名 SELECT Sname,Sno,Ssex FROM Student WHERE Sname NOT LIKE 刘%;,3.3 SQL数据查询语言(1)单表查
24、询(续),如果用户要查询的匹配字符串本身就含有%或_,比如要查名字DB_Design的课程的学分,应如何实现呢?这时就要使用ESCAPE 短语对通配符进行转义了。例18:查DB_Design课程的课程号和任课老师 SELECT Cno,teacher FROM Course WHERE Cname LIKE DB_Design ESCAPE 说明:ESCAPE 短语表示为换码字符,这样匹配串中紧跟在后面的字符”_”不再具有通配符的含义,而是取其本身含义,被转义为普通的”_”字符。,3.3 SQL数据查询语言(1)单表查询(续),例19:查以”DB_”开头,且倒数第三个字符为i的课程的详细情况
25、SELECT*FROM Course WHERE Cname LIKE DB_%i_ _ ESCAPE;说明:注意这里的匹配字符串DB_%i_ _ _。第一个_前面有换码字符,所以它被转义为普通的_字符。而%、第二个_和第三个_前面均没有换码字符,所以它们仍作为通配符。其执行结果为:Cno Cname teacher-8 DB_Design 王诚10 DB_Programing 何名名13 DB_DBMS Design 李桑,3.3 SQL数据查询语言(1)单表查询(续),(e)涉及空值的查询例20:某些学生选修某门课程后没有参加考试,所以有选课记录,但没有考试成绩,下面我们来查一下缺少成绩的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 基础 SQL 语言
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5985558.html