关系数据库标准语言SQL.pdf
《关系数据库标准语言SQL.pdf》由会员分享,可在线阅读,更多相关《关系数据库标准语言SQL.pdf(110页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2013年4月24日2013年4月24日1 1关系数据库标准语言SQL2013年4月24日2013年4月24日2 2要点SQL 语言简介SQL 语言及其使用方式独立式 SQL嵌入式 SQL2013年4月24日2013年4月24日3 33.1 SQL 概述Structured Query Language,1974 年被提出关系数据库的国际标准语言:大多数数据库均用SQL 作为共同的数据存取语言和标准接口,实现不同数据库系统之间的互操作目前仍被不断扩充介于关系代数和关系演算之间,三者可相互转换2013年4月24日2013年4月24日4 4SQL 的特点综合统一:集 DDL、DML、DCL 功能于
2、一体,可独立完成数据库生命周期中的全部活动,语言风格统一高度非过程化:用户只需提出“做什么”,而无需指明“怎么做”面向集合的操作方式:操作对象、查询结果、更新数据均可以是元组的集合提供两种使用方式:自含式、嵌入式语言简捷,易学易用SQL 功能关键动词数据查询SELECT数据定义CREATE,DROP,ALTER数据操纵INSERT,UPDATE,DELETE数据控制GRANT,REVOKE2013年4月24日2013年4月24日5 5SQL 语言的基本概念SQL 支持关系数据库的三级模式结构 存储文件:组成关系数据库的内模式,对用户透明 基表(Base Table):组成关系数据库的模式,一个
3、关系对应一个基表,一或多个基表对应一个存储文件 视图(View):组成关系数据库的外模式,从一个或多个基表中导出,不独立存储在数据库中SQL视图 1视图 2基本表 1基本表 2基本表 3基本表 4存储文件 1存储文件 2外模式模式内模式2013年4月24日2013年4月24日6 63.2 数据定义SQL 的数据定义语言(DDL)操作对象操作方式创建删除修改基表CREATE TABLEDROP TABLEALTER TABLE视图CREATE VIEWDROP VIEW索引CREATE INDEXDROP INDEX2013年4月24日2013年4月24日7 7定义基表数据类型:不同的数据库系统
4、有自己的数据类型规定,但一般都包括 INTEGER,FLOAT,CHAR(n),VARCHAR(n)等完整性约束条件列级完整性约束条件:涉及表的某一列如对数据类型的约束,对数据格式的约束,对取值范围或集合的约束,对空值 NULL(空值,不知道或不能用的值)的约束,对取值的唯一性 UNIQUE 约束,对列的排序说明等表级完整性约束条件:涉及表的一个或多个列如订货关系中规定发货量不得超过订货量,如教授工资不得低于 1000 元等CREATE TABLE (列级完整性约束 ,列级完整性约束 ,);2013年4月24日2013年4月24日8 8SQL 支持的数据类型SMALLINT 半字长的整数INT
5、 全字长的整数FLOAT 浮点数CHAR(n)长度为n的定长字符串VARCHAR(n)最大长度为n的变长字符串DEC(p,q)十进制数,共p位,小数点后有 q 位DATE 日期型,格式 YYYY-MM-DDTIME 时间型,格式为 HH.MM.SSTIMESTAMP 日-时戳(日期加时间)2013年4月24日2013年4月24日9 9完整性约束CREATE TABLE 的完整性约束NOT NULL 属性值禁止为空UNIQUE 取值唯一PRIMARY KEY(A1,.,An)主码-若干属性列CHECK(P)P为条件表达式SQL-92 以后版本中,一个属性若有 PRIMARY KEY 声明则隐含有
6、 NOT NULL 约束2013年4月24日2013年4月24日1010例:建立学生管理的相关基表CREATE TABLE Student(Sno CHAR(5)NOT NULL UNIQUE,Sname CHAR(20)UNIQUE,Ssex CHAR(1),Sage INTEGER,Sdept CHAR(15);CREATE TABLE SC(Sno CHAR(5)NOT NULL UNIQUE,Cno CHAR(8)NOT NULL UNIQUE,Grade INTEGER);CREATE TABLE Course (Cno CHAR(8)NOT NULL UNIQUE,Cname CH
7、AR(20),Cpno INTEGER,Ccredit INTEGER);2013年4月24日2013年4月24日1111例:建立图书管理的相关基表CREATE TABLE Borrows(CardNo INTEGER NOT NULL UNIQUE,Name CHAR(10),Dept CHAR(20);CREATE TABLE Books(BookNo INTEGER NOT NULL UNIQUE,SortNo CHAR(10),Title CHAR(30),Author CHAR(12),Price FLOAT,LoanNo INTEGER);CREATE TABLE Loans(Ca
8、rdNo INTEGER NOT NULL UNIQUE,BookNo INTEGER NOT NULL UNIQUE,Title CHAR(30),Date CHAR(10);2013年4月24日2013年4月24日1212例:完整性约束CREATE TABLE branch(branch-name char(15)not null,branch-city char(30),assets integer);CREATE TABLE branch(branch-name char(15),branch-city char(30),assets Integer,PRIMARY KEY (bran
9、ch-name),CHECK(assets=0);2013年4月24日2013年4月24日1313修改基表ALTER TABLE ADD 列级完整性约束 DROP MODIFY ;例ALTER TABLE LoansMODIFY Cardno SMALLINT;ALTER TABLE LoansDROP UNIQUE(BookNo);ALTER TABLE Loans ADD XX INT;2013年4月24日2013年4月24日1414删除基本表DROP TABLE ;例DROP TABLE Loans;2013年4月24日2013年4月24日1515建立索引加快检索速度UNIQUE 表示索
10、引的每一个索引值只对应唯一的数据记录CLUSTER:建聚簇索引,即索引项顺序与表中记录的物理顺序一致,一个基表只能建一个聚簇索引ASC(升序,缺省)、DESC(降序)索引建立后由系统使用和维护,不需用户干预CREATE UNIQUE CLUSTER INDEX ON (,);CREATE UNIQUE INDEX IB ON Borrows(CardNo);例CREATE UNIQUE INDEX IS ON Student(Sno);CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);2013年4月24日2013年4月24日1616删除索引DRO
11、P INDEX ;例DROP INDEX IB;DROP INDEX SCno;2013年4月24日2013年4月24日17173.3 查询数据库查询是数据库的核心操作,SQL 提供了基于集合和关系的查询操作,具有丰富的功能和灵活的使用方式一个 SQL 查询的结果是一个关系查询可分为单表查询:查询只涉及一个表连接查询:查询同时涉及两个以上的表嵌套查询:一个查询块嵌套在另一个查询块中视图查询:在视图基础上的查询2013年4月24日2013年4月24日1818SQL 查询语句的格式查询语句的典型格式这个查询与下面的关系代数表达式 等价:A1,A2,.,An(P(r1r2.rm)SELECT ALL
12、|DISTINCT ,FROM,WHERE GROUP BY HAVING ORDER BY ASC|DESC;select A1,A2,.,Anfrom r1,r2,.,rmwhere P2013年4月24日2013年4月24日1919SELECT*FROM Student;3.3.1 单表查询一、选择表中若干列查询指定列:在中指定预查属性查询全部列:在中使用*查询经计算的值:在中可使用常量、表达式、函数等SELECT Sname,Year of Birth is,2013-SageFROM Student;SELECT Sno,SnameFROM Student;2013年4月24日201
13、3年4月24日2020查询实例SELECT Sname,Year of Birth is,2013-Sage,ISLOWER(Sdept)FROM Student;结果为:Sname year of Birth:2013-Sage ISLOWER(Sdept)李勇 Year of Birht:1993 cs 刘晨 Year of Birht:1994 is 王敏 Year of Birht:1995 ma 张立 Year of Birht:1994 is2013年4月24日2013年4月24日2121定义别名用户可以通过指定别名来改变查询结果的列标题,这对于含算术表达式、常量、函数名的目标列表
14、达式尤为有用。例如对于上例,可以定义如下列别名:SELECT Sname NAME,Year of Birth:BIRTH,2013-Sage YEAR,ISLOWER(Sdept)DEPARTMENT FROM Student;结果为:NAME BIRTH YEAR DEPARTMENT -李勇 Year of Birth:1993 cs 刘晨 Year of Birth:1994 if 王敏 Year of Birth:1995 ma 张立 Year of Birth:1994 if2013年4月24日2013年4月24日2222ACCESS 数据库中 SQL 例别名表示:字段 as 别名
15、注:ISLOWER()函数在 access 中无法识别 SELECT Sname as NAME,Year of Birth:as BIRTH,2013-Sage as YEAR,Sdept as DEPARTMENTFROM Student;2013年4月24日2013年4月24日2323二、选择表中若干元组取消取值重复的列:指定 DISTINCT 短语查询满足条件的元组:在 WHERE 子句中指定条件对查询结果排序:使用 ORDER BY使用集函数:COUNT,SUM,AVG,MAX,MIN对查询结果分组:使用 GROUP BY,HAVING2013年4月24日2013年4月24日2424
16、DISTINCT 短语SQL 允许重复的元组/行存在,如果需要去掉重复的元组/行,必须指定 DISTINCT 短语,缺省为 ALL例:查询选修了课程的学生学号结果为:结果为:Sno Sno 95001 95001 95001 95002 95001 95002 95002SELECT DISTINCT SnoFROM SC;SELECT Sno FROM SC;或 SELECT ALL Sno FROM SC;2013年4月24日2013年4月24日2525WHERE 子句查询满足条件的元组:在 WHERE 子句中指定条件WHERE 子句常用的查询条件:查询条件谓 词比较=,=,=,!=,!,
17、!;NOT+上述比较运算符确定范围BETWEEN AND,NOT BETWEEN AND 确定集合IN,NOT IN字符匹配LIKE,NOT LIKE空值IS NULL,IS NOT NULL多重条件AND,OR2013年4月24日2013年4月24日2626Where 子句比较大小SELECT Sname FROM Student WHERE Sdept=CS;SELECT DISTINCT Sno FROM SC WHERE Grade 60;例 查询计算机系全体学生的名单例 查询考试成绩有不及格的学生的学号例 查询所有年龄在 20 岁以下的学生姓名及其年龄SELECT Sname,Sag
18、e SELECT Sname,SageFROM Student FROM StudentWHERE Sage=20;2013年4月24日2013年4月24日2727Where 子句确定范围SELECT Sname,Sdept,SageFROM StudentWHERE Sage BETWEEN 20 AND 40;例 查询年龄在 2040 岁之间的学生姓名、系别和年龄SELECT Sname,Sdept,SageFROM StudentWHERE Sage NOT BETWEEN 20 AND 23;例 查询年龄不在 2023 岁之间的学生姓名、系别和年龄2013年4月24日2013年4月24
19、日2828Where 子句确定集合SELECT Sname,SsexFROM StudentWHERE Sdept IN(IS,MA,CS);例 查询信息系(IS)、数学系(MA)和计算机系(CS)学生的姓名和性别SELECT Sname,SsexFROM StudentWHERE Sdept NOT IN(IS,MA,CS)例 查询除信息系(IS)、数学系(MA)和计算机系(CS)以外其它系学生的姓名和性别2013年4月24日2013年4月24日2929Where 子句字符串匹配谓词 LIKE 可以用来进行字符串的匹配格式:NOT LIKE ESCAPE 匹配串中%代表任意长度的字符串,如
20、a%b:acb,addgb,ab 匹配串中 _ 代表任意单个字符,如 a_b:acb afb例 查询学号为95001 的学生的详细情况:相当于SELECT *FROM StudentWHERE Sno LIKE 95001;SELECT *FROM StudentWHERE Sno=95001;2013年4月24日2013年4月24日3030通配符例子SELECT*FROM StudentWHERE Sname LIKE 刘%;SELECT*FROM StudentWHERE Sname LIKE _ _ 明 _ _;例 查询所有姓刘的学生的详细信息例 查询所有全名为三个字且中间汉字为“明”的
21、学生的详细信息2013年4月24日2013年4月24日3131换码字符例 查询 DB_Design 课程的课程号和学分例 查询以“DB_”开头,且倒数第 3 个字符为 i 的课程的详细情况SELECT Cno,CreditFROM CourseWHERE Cname LIKE DB_Design ESCAPE ;SELECT *FROM CourseWHERE Cname LIKE DB_%i_ _ ESCAPE ;注:ESCAPE 表示 为转义换码字符,紧跟其后的 _ 转义为普通 _ 字符2013年4月24日2013年4月24日3232Where 子句涉及空值的查询SELECT Sno,Cn
22、oFROM SCWHERE Grade IS NULL;SELECT Sno,CnoFROM SCWHERE Grade IS NOT NULL;例:某些学生选修课程后没有参加考试,所以有选修课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号:例 查询所有有成绩的学生学号和课程号注意这里的“IS”不能用等号代替2013年4月24日2013年4月24日3333Where 子句多重条件查询SELECT SnameFROM StudentWHERE Sdept=CS AND Sage 20;SELECT Sname,SsexFROM StudentWHERE Sdept=IS OR Sd
23、ept=MA OR Sdept=CS;例 查询计算机系年龄在 20 岁以下的学生姓名例 查询信息系(IS)、数学系(MA)和计算机系(CS)学生的姓名和性别2013年4月24日2013年4月24日3434练习关系:图书(书号,书名,作者,出版社,单价)BOOK(Bno,Bname,Author,Press,Price)查询“数据库”一书的书号和单价查询单价在 20 至 50 元之间的图书信息查询北京某出版社出版的图书信息查询作者是张一,王二,刘三的书的信息查询所有图书的书号,书名和半价信息查询缺少出版社信息的图书的书号和书名2013年4月24日2013年4月24日3535三、对查询结果排序SE
24、LECT Sno,Grade FROM SCWHERE Cno=3 ORDER BY Grade DESC;SELECT*FROM StudentORDER BY Sdept,Sage DESC;例 查询选修了 3 号课程的学生的学号及其成绩,查询结果按分数的降序排列例 查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列(见 mdb 示例)ORDER BY 子句 可对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排列,缺省值为升序2013年4月24日2013年4月24日3636四、使用集函数COUNT(DISTINCT|ALL*)统计元组个数COUN
25、T(DISTINCT|ALL)统计一列中值的个数SUM(DISTINCT|ALL)计算一列值的总和AVG(DISTINCT|ALL)计算一列值的平均值MAX(DISTINCT|ALL)求一列值中的最大值MIN(DISTINCT|ALL)求一列值中的最小值2013年4月24日2013年4月24日3737实例SELECT COUNT(*)FROM Student;SELECT COUNT(DISTINCT Sno)FROM SC;SELECT AVG(Grade)FROM SCWHERE Cno=1;SELECT MAX(Grade)FROM SCWHERE Cno=1;例 查询学生总人数例 查询
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关系 数据库 标准 语言 SQL
限制150内