标准语言SQL11-12-2.ppt_第1页
标准语言SQL11-12-2.ppt_第2页
标准语言SQL11-12-2.ppt_第3页
标准语言SQL11-12-2.ppt_第4页
标准语言SQL11-12-2.ppt_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,3.1 SQL概述(了解) 3.2 SQL数据定义(掌握) 3.3 SQL数据查询(掌握 重点) 3.4 SQL数据更新(掌握) 3.5 SQL视图(掌握),第三章 关系数据库 标准语言SQL,2,一、SQL 的发展 SQL是 Structured Query Language的缩写,即 结构化查询语言,是关系数据库的标准语言。 1974年 Boyce &Chambarlin提出,在IBM的System R上 首先实现,1979年 Oracle 1982年 IBM的DB2 1984年 Sybase,采用SQL作为数据库语言,3.1 SQL概述,3,(5)语言简捷,易学易用,4,说明:视图是从基本表导出的虚表,索引依赖于基本表,SQL没有修改视图和索引的操作,可通过先删除,再创建达此目的。,3.2 SQL数据定义,5,一、基本表的定义和修改 1、定义基本表 CREATE TABLE 表名(列名1 类型 列级完整性约束 ,列名2 类型 列级完整性约束) , );,:所要定义的基本表的名字 :组成该表的各个属性(列) :涉及相应属性列的完整性约束条件 :涉及一个或多个属性列的完整性约束条件,6,SQL中的数据类型,二进制数据类型 Binary (N) 字符数据类型 Char (N) 定长字符数据 Varchar(N) 变长字符数据 Text 文本型 日期和时间数据类型 Datetime 数字数据类型 Float(N) Real Int Smallint Tinyint 货币数据 Money Smallmoney 图片数据 Image,7,SQL中的数据完整性约束,Primary key、Unique、NOT NULL,8,例: 建立一个“学生”表Student,它由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成。其中学号不能为空,值是唯一的,并且姓名取值也唯一。,CREATE TABLE Student (Sno CHAR(5) NOT NULL UNIQUE, Sname CHAR(20) UNIQUE, Ssex CHAR(1) , Sage INT, Sdept CHAR(15);,9,2、修改基本表 (1)增加列: ALTER TABLE 表名 ADD 列名 类型 完整性约束; (2)修改列类型: ALTER TABLE 表名 ALTER COLUMN 列名 类型; (3)删除完整性约束: ALTER TABLE 表名 DROP 完整性约束名;,如 ALTER TABLE S ALTER COLUMN SD CHAR(20),如 ALTER TABLE S ADD SD INT/UNIQUE(SN);,在定义基本表时要考虑充分,10,3、删除基本表 DROP TABLE 表名 CASCADE|RESTRICT ;,注意:删除基本表时,表中的数据、建立在表上的索引和视图将一并被删除,因此应格外小心。,11,查询是数据库的核心操作。SQL仅提供了唯一的语句SELECT,其使用方式灵活,功能非常丰富。,3.3 SQL数据查询,单表查询 连接查询 嵌套查询 集合查询,12,一般格式,SELECT ALL | DISTINCT * | 目标列 FROM 基本表(或视图) WHERE 条件表达式 GROUP BY 列名1 HAVING 内部函数表达式 ORDER BY 列名2 ;,3.3 SQL数据查询,13,SELECT子句:指定要显示的属性列 FROM子句:指定查询对象(基本表或视图) WHERE子句:指定查询条件 GROUP BY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用集函数。 HAVING短语:筛选出只有满足指定条件的组 ORDER BY子句:对查询结果表按指定列值的升序或降序排序,14,单表查询仅涉及一个表,是一种最简单的查询操作,有以下五种形式: 1、选择表中的若干列(相当于投影运算) 2、选择表中的若干元组(相当于选择运算) 3、对查询结果排序(运算结果的处理) 4、使用集函数(运算结果的处理) 5、对查询结果分组 (运算结果的处理),一、单表查询,15,1、选择表中的若干列,查询单列 查询多列、全部列 查询经过计算的值,16,查询指定列(投影),例: 查询全体学生的姓名、学号、所在系。 SELECT Sname,Sno,Sdept FROM Student;,查询全部列,例: 查询全体学生的详细记录。 SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student; 或 SELECT * FROM Student;,17,查询经过计算的值,SELECT子句的可以为算术表达式、字符串常量、函数、列别名、其他,例:查全体学生的姓名及其出生年份。 SELECT Sname,2010-Sage FROM Student;,18,消除取值重复的行,相当于投影运算用DISTINCT 查询满足条件的元组,相当于选择运算,2、选择表中的若干元组,19,消除取值重复的行,例:假设SC表中有下列数据 Sno Cno Grade - - - 95001 1 92 95001 2 85 95001 3 88 95002 2 90 95002 3 80,(1) SELECT Sno FROM SC; 结果: Sno - 95001 95001 95001 95002 95002,(2) SELECT DISTINCT Sno FROM SC; 结果: Sno - 95001 95002,在SELECT子句中使用DISTINCT短语,20,查询满足条件的元组,WHERE子句常用的查询条件,常用的查询条件,21,(1) 比较大小,在WHERE子句的中使用比较运算符 =,=,!,!= 20;,22,(2) 确定范围,使用谓词 BETWEEN AND NOT BETWEEN AND 例: 查询年龄在2023岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。 SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23;,23,(3) 确定集合,使用谓词 IN , NOT IN :用逗号分隔的一组取值 例12查询信息系(IS)、数学系(MA)和计 算机科学系(CS)学生的姓名和性别。 SELECT Sname,Ssex FROM Student WHERE Sdept IN ( IS,MA,CS );,24,(4) 字符串匹配,使用谓词 NOT LIKE ESCAPE :指定匹配模板 匹配模板:固定字符串或含通配符的字符串 当匹配模板为固定字符串时:可以用 = 运算符取代 LIKE 谓词,用 != 或 运算符取代 NOT LIKE 谓词。,25,通配符,% (百分号) 代表任意长度(长度可以为0)的字符串 例:a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab 等都满足该匹配串。 _ (下横线) 代表任意单个字符 例:a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串,26,ESCAPE 短语:,当用户要查询的字符串本身就含有 % 或 _ 时,要使用ESCAPE 短语对通配符进行转义。,27,例: 查询所有姓刘学生的姓名、学号和性别。 SELECT Sname,Sno,Ssex FROM Student WHERE Sname LIKE 刘%;,例: 查询姓“欧阳“且全名为三个汉字的学生的姓名。 SELECT Sname FROM Student WHERE Sname LIKE 欧阳_;,28,3、对查询结果排序,使用ORDER BY子句 可以按一个或多个属性列排序 升序:ASC;降序:DESC;缺省值为升序 当排序列含空值时 ASC:排序列为空值的元组最后显示 DESC:排序列为空值的元组最先显示,29,例:查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。 SELECT Sno,Grade FROM SC WHERE Cno= 3 ORDER BY Grade DESC;,结果: Sno Grade - - 95010 95024 95007 92 95003 82 95010 82 95009 75 95014 61 95002 55,30,4、使用集函数,六类主要集函数,COUNT 统计一列中的(NOT NULL)值的个数 COUNT(*) 统计元组个数 SUM 对一列求和(数值型) AVG 对一列求平均值(数值型) MAX 对一列求最大值 MIN 对一列求最小值,31,例: 查询学生总人数。 SELECT COUNT(*) FROM Student; 例: 查询选修了课程的学生人数。 SELECT COUNT(DISTINCT Sno) FROM SC; 注:用DISTINCT以避免重复计算学生人数。,32,例: 计算1号课程的学生平均成绩。 SELECT AVG(Grade) FROM SC WHERE Cno= 1 ; 例: 查询选修1号课程的学生最高分数。 SELECT MAX(Grade) FROM SC WHER Cno= 1 ;,33,5、对查询结果分组,使用GROUP BY子句分组 细化集函数的作用对象 未对查询结果分组,集函数将作用于整个查询结果 对查询结果分组后,集函数将分别作用于每个组,34,例: 求各个课程号及相应的选课人数。 SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno; 结果可能为: Cno COUNT(Sno) 1 22 2 34 3 44 4 33 5 48,35,说明: GROUP BY子句的作用对象是查询的中间结果表 分组方法:按指定的一列或多列值分组,值相等的为一组 使用GROUP BY子句后,SELECT子句的列名列表中只能出现分组属性和集函数,36,使用HAVING短语筛选最终输出结果,例: 查询选修了3门以上课程的学生学号。 SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) 3;,对于SC中每个Sno的统计值,37,例: 查询有3门以上课程是90分以上的 学生的学号及(90分以上的)课程数 SELECT Sno, COUNT(*) FROM SC WHERE Grade=90 GROUP BY Sno HAVING COUNT(*)=3;,作用范围是整个SC表,作用范围是分组后的统计值,38,只有满足HAVING短语指定条件的组才输出 HAVING是选择分组的条件且必须和GROUP BY一起使用 库函数只能作用于HAVING和目标列,而不能用于WHERE。 HAVING短语与WHERE子句的区别:作用对象不同 WHERE子句作用于基本表或视图,从中选择满足条件的元组。 HAVING短语作用于组,从中选择满足条件的组。,39,一、插入数据 两种插入数据方式 1、插入元组 2、插入子查询结果,3.4 SQL数据更新,40,1、插入单个元组 格式: INSERT INTO 表名 (字段名1 , 字段名2 ) VALUES ( 常量1 , 常量2 ) ; 功能: 将新元组插入指定表中。,INTO子句 指定要插入数据的表名及属性列 属性列的顺序可与表定义中的顺序不一致 没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义中的顺序一致 指定部分属性列:插入的元组在其余属性列上取空值 VALUES子句 提供的值必须与INTO子句匹配 值的个数 值的类型,41,例:插入一条选课记录(S1 , C5)。 INSERT INTO SC(S# , C#) VALUES(S1 , C5);,42,二、修改数据 格式: UPDATE 表名 SET 列名1 = 表达式1 , 列名2 = 表达式2 WHERE 条件; 功能:修改指定表中满足WHERE子句条件的元组,说明: 当省略WHERE子句时,修改表中所有记录,否则仅修改满足条件的记录; 条件也可以使用子查询。,三种修改方式 1、修改某一个元组的值 2、修改多个元组的值 3、带子查询的修改语句,43,1、 修改某一个元组的值,例:将学生95001的年龄改为22岁。 UPDATE Student SET Sage=22 WHERE Sno= 95001 ;,44,2 、修改多个元组的值,例:将所有学生的年龄增加1岁。 UPDATE Student SET Sage= Sage+1; 例:将信息系所有学生的年龄增加1岁。 UPDATE Student SET Sage= Sage+1 WHERE Sdept= IS ;,45,三、删除数据:,DELETE FROM 表名 WHERE 条件 ;,注意:只能删除表记录,不删除表结

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论