《第三章 关系数据库标准语言SQL课件》由会员分享,可在线阅读,更多相关《第三章 关系数据库标准语言SQL课件(225页珍藏版)》请在金锄头文库上搜索。
1、第三章 关系数据库标准语言 SQL,第三章 关系数据库标准语言SQL,SQL(structured query language),结构化查询语言,是一个通用的、功能极强的关系数据库语言。 SQL是关系数据库的标准语言。 SQL是一种介于关系代数与关系演算之间的语言。,本章主要内容,SQL概述 数据定义 数据查询 数据更新 视图 数据控制,3.1 SQL概述 3.1.1 SQL的产生与发展,发展过程 1974年,Boyce 和Chamberlin提出SQL语言 19751979年,在IBM公司System R上实现,SQL标准的进展,3.1.2 SQL语言的特点,综合统一 高度非过程化 面向集
2、合的操作方式 以同一种语法结构提供两种使用方式 语言简洁,易学易用,SQL语言的动词,3.1.3 SQL语言的基本概念,SQL,视图1,视图2,基本表1,基本表2,基本表3,基本表4,存储文件1,存储文件2,内模式 (存储模式),模式,外模式,SQL数据库体系结构,用户,student,Student 视图,3.2 学生-课程数据库,Student,Course,SC,3.3 数据定义,关系数据库的基本对象是表、视图、索引。 SQL的数据定义功能包括模式定义、表定义、视图和索引定义。,SQL的数据定义语句,3.3.1 模式的定义与删除,一.定义模式 CREATE SCHEMAAUTHORIZA
3、TION,例1:定义一个学生-课程模式S-T CREATE SCHEMA“S-T“ AUTHORIZATION WANG; 例2: CREATE SCHEMA AUTHORIZATION WANG;,CREATE SCHEMA AUTHORIZATION ,例3 CREATE SCHEMA TEST AUTHORIZATION ZHANG CREATE TABLE TAB1(COL1 SMALLINT, COL2 INT, COL3 CHAR(20), COL4 NUMERIC(10,3), COL5 DECIMAL(5,2) );,删除模式 DROP SCHEMA ,例4 DROP SCHE
4、MA ZHANG CASCADE;,3.2.2 定义、删除与修改基本表,定义基本表 基本格式: CREATE TABLE (列级完整性约束条件 ,列级完整性约束条件 ,);,例5 建立一个“学生”表Student,它由学号Sno、 姓名Sname、性别Ssex、年龄Sage、所在系Sdept 5个属性组成,其中学号是主键,学生姓名值是唯一的。 CREATE TABLE Student (Sno CHAR(5) PRIMARY KEY, Sname CHAR(20) UNIQUE, Ssex CHAR(1), Sage INT, Sdept CHAR(15);,Student,例6 建立一个“课
5、程表”Course. CREATE TABLE Course (Cno CHAR(4) PRIMARY KEY, Cname CHAR(40), Cpno CHAR(4), Ccredit SMALLINT, FOREIGN KEY Cpno REFERENCES Course(Cno);,例7 建立学生选课表SC CREATE TABLE SC (Sno CHAR(9), Cno CHAR(4), Grade SMALLINT, PRIMARY KEY(Sno,Cno), FOREIGN KEY(Sno)REFERENCES Student(Sno), FOREIGN KEY(Cno)REF
6、ERENCES Course(Cno);,二.数据类型,常用数据类型,三.模式与表,定义基本表所属模式的方法: 方法一:在表名中明显地给出模式名 CREATE TABLE “S-T“.Student(); CREATE TABLE “S-T“.Cource(); CREATE TABLE “S-T“.SC();,方法二:在创建模式语句中同时创建表,如例3,方法三:设置所属的模式,这样在创建表时表名中不必给出模式名。 SET search_path TO “S-T“,PUBLIC;,修改基本表 基本格式: ALTER TABLE ADD完整性约束 DROP MODIFY(ALTER COLUMN
7、);,例8 向Student表增加“入学时间”列,其数据类 型为日期型。 ALTER TABLE Student ADD S_entrance DATE;,例9 将年龄的数据类型改为整数。 ALTER TABLE Student MODIFY Sage INT; (ALTER COLUMN Sage INT;),例10 删除关于学号必须取唯一值的约束 ALTER TABLE Student DROP UNIQUE(Sno);,Student,例11.增加课程名称必须取唯一值的约束条件 ALTER TABLE Course ADD UNIQUE(Cname);,删除基本表 基本格式: DROP
8、TABLERESTRICTCASCADE; 例12 删除Student表 DROP TABLE Student CASCADE;,例13 若表上建有视图,选择RESTRICT时表不能删除; CASCADE时可以删除表,视图也自动被删除。 CREATE VIEW IS_Student AS SELECT Sno,Sname,Sage FROM Student WHERE Sdept=IS; DROP TABLE Student RESTRICT; -ERROR:cannot drop table Student because other objects depend on it DROP TA
9、BLE Student CASCADE; -NOTICE:drop cascades to view IS_Student SELECT * FROM IS_Student; -ERROR:relation “IS_Student“ does not exist,3.2.2 建立与删除索引,建立索引 基本格式: CREATE UNIQUECLUSTER INDEX ON( , );,索引类型,普通索引 没有指定UNIQUE或CLUSTERED等,将建立普通索引。 唯一索引 通过指定UNIQUE则为表创建唯一索引(不允许存在索引值相同的两个元组)。 聚簇索引 聚簇索引的索引值与关系中元组的顺序物
10、理上相同。一个表只允许建立一个聚簇索引。,例13 CREATE CLUSTER INDEX StusnameON Student(Sname);,例14 为学生-课程数据库中的Student,Course,SC 3个表建立索引。其中Student按学号升序建立唯一索引,Course 表按课程号升序建立唯一索引,SC表学号升序和课程号降序建唯一索引。 CREATE UNIQUE INDEX Stusno ON Student(Sno); CREATE UNIQUE INDEX Coucno ON Course(Cno); CREATE UNIQUE INDEX SCno ON SC(Sno AS
11、C, Cno DESC);,删除索引 基本格式: DROP INDEX 例7 删除Student 表的Stusname索引。 DROP INDEX Stusname;,习题,建立一个图书表book,由图书号(定长字符串,长度20),书名(变长字符串,长度50),作者(变长字符串,长度30),出版社(变长字符串,长度30),单价(浮点型 ,FLOAT)构成,其中书名、作者、出版社单价均不能为空值。 建立一个读者表reader,由读者号(定长字符串,长度10),姓名(定长字符串,长度8),性别(定长字符串,长度为2),办公电话(定长字符串,长度为8),部门(变长字符串,长度30)构成,其中,姓名、
12、性别为非空值,办公电话和部门为空值。 建立借阅表loan,由读者号(定长字符串,长度10),图书号(定长字符串,长度20),借出日期(定长字符串,长度8),归还日期(定长字符串,长度8),其中借出日期不能为空值,归还日期为空值。,给图书表增加一列“ISBN”,数据类型为CHAR(13)。 为增加的ISBN列增加非空值的约束。 删除图书表中ISBN列非空值约束。 将ISBN的数据类型改为整数。 在图书表的图书号上建立一个唯一索引。 在图书表的书名列上建立一个聚簇索引。 删除刚建立的索引。,列级完整性约束 NOT NULL和NULL约束 说明指定的列允许或不允许为空值。 UNIQUE约束 唯一性约
13、束,每个UNIQUE约束都生成一个惟一索引。 DEFAULT定义 为列定义默认值,每列只能有一个DEFAULT定义。,例 在student上经常需要按学号进行查询,则可以为之建立一个普通索引: CREATE INDEX Sno-idx ON student(Sno) 多字段上建立索引 CREATE INDEX Sno-Sage-idx ON student(Sno,sage DESC),例 在student关系中规定一个学生只能有 一个学号,因此可以在student的sno 属性上建立一个惟一索引。 CREATE UNIQUE INDEX sno-idx ON student(sno);,例
14、在student表的姓名列上建立一个聚簇 索引。 CREATE CLUSTER INDEX sname-idx on student(sname);,3.3 数据查询,基本格式 SELECT ALLDESTINCT, FROM , WHERE GROUP BY HAVING ORDER BY ASCDEC;,“学生课程”数据库: Student 表 由学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、所在系(Sdept)组成: Student (Sno,Sname,Ssex,Sage,Sdept) 其中Sno为主码。 SC表 由学号(Sno)、课程号(Cno)、成绩(Gr
15、ade)组成: SC (Sno, Cno,Grade) Course表 课程号(Cno)、课程名(Cname)、先修课号(Cpno)、学分(Ccredit) 组成: Course (Cno,Cname,Cpno,Ccredit),单表查询(简单查询),查询表中的若干列 查询指定列 例1. 查询全体学生的学号与姓名. SELECT Sno, Sname FROM Student ;,例2. 查询全体学生的姓名,学号,所在系. SELECT Sname , Sno, Sdept FROM Student ;,查询全体 在SELECT后列出所有列名 将目标表达式指定为*(结果顺序与基本表中相同) 例
16、3.查询全体学生的详细记录 SELECT * FROM Student ;,可以是列名,列和常数组成的加、减、乘、除 等算术表达式,还可以是字符串常量、函数等。 查询经过计算的值 例4.查询全体学生的姓名及出生年份. SELECT Sname,2013-Sage FROM Student ; 查询结果: Sname 2013-Sage 李勇 1990 刘晨 1991 王名 1992 张立 1992,查询结果中包含字符串常量、函数 例5.查询全体学生的姓名、YearofBirth:、出生年份 和所在系,用小写字母表示所有系名。 SELECT Sname,Year of Birth:, 2010-Sage ,ISLOWER(Sdept) FROM Studen