《第三章 关系数据库标准语言SQL重点》由会员分享,可在线阅读,更多相关《第三章 关系数据库标准语言SQL重点(93页珍藏版)》请在金锄头文库上搜索。
1、第三章 关系数据库标准语言SQL,本章目标,本章主要介绍SQL语言的基本语法和使用方式,要求熟练掌握SQL语言的使用规则,能够根据实际需求写出能够准确完成操作的SQL语句。,1. SQL语言概况 了解SQL 的4大功能.,2. SQL数据定义语言 了解基表和视图的概念以及各种数据类型。掌握基表模式的定义和修改基表模式的7条命令。,3. SQL查询语言 掌握最常用最基本的查询语句的定义和应用。,4. SQL中的视图 了解视图的概念以及视图与基表的区别;掌握视图的定义和操作。,本章学习要求,SQL概述,1,SQL的发展 1974年,由Boyce和Chamberlin提出 19751979,IBM
2、San Jose Research Lab的关系数据库管理系统原型System R实施了这种语言 SQL-86是第一个SQL标准 SQL-89、SQL-92(SQL2)、SQL-99(SQL3) 现状 大部分DBMS产品都支持SQL,成为操作数据库的标准语言,3、SQL的功能 数据定义(DDL) 定义数据库的三级模式; 定义、修改、删除基本表(table),定义、删除视图(View),定义、删除索引(Index) 数据操纵(DML) 数据查询:查询、统计、分组、排序等操作 数据更新:对数据的插入、删除、修改操作 数据控制(DCL) 对基本表和视图的授权、完整性规则的描述和事物控制语句等。,4、
3、主要特点: 1. 语言简洁、易学易用:核心功能只有9个动词,语法简单,接近英语。SQL功能 动词数据定义 CREATE,DROP,ALTER 数据库查询 SELECT数据操纵 INSERT,UPDATE,DELETE数据控制 GRANT,REVOKE,2. 高度非过程化的语言:用户只需提出“干什么”,至于“怎么干”由DBMS解决;用户只需要在查询语句中提出需要什么,DBMS即可按路径存取,并把结果返回给用户。,3. 面向集合的语言:SQL采用集合操作方式,不仅操作对象、查询结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。 4. 以同一种语法结构提供两种使用方式:具有
4、自含式和嵌入式两种形式。 5. 综合统一:具有查询、操作、定义和控制四种语言一体化的特点。它只向用户提供一种语言,但该语言具有上述多种功能,且每种操作只需一种操作符。 6.支持关系数据库三级模式结构:全体基本表构成了DB的模式,视图和部分基本表构成了外模式,DB的存储文件及其索引构成了内模式。,5、概念: 用户可以用SQL语言对视图(View)和基本表(Base Table)进行查询等操作,在用户观点里,视图和表一样,都是关系。 基本表是本身独立存在的表,SQL中的一个关系对应一个基本表,全体基本表构成了数据库的概念模式。 视图是从一个或多个基本表中导出的表,本身不独立存储在数据库中,数据库中
5、只存储其定义而不直接存放视图对应的数据,数据仍存放在与视图相关的基本表中。视图是一个虚表。视图和部分基本表构成数据库的外模式。,数据定义,2,SQL语言的数据定义功能即指SQL DDL语句。 它包括对数据库用户、基本表、视图、索引等数据库对象的定义和撤销。 介绍:基本表、视图和索引的定义,1. 数据库 (1) 定义数据库的语句格式: CREATE DATABASE ,注:一对尖括号标记的汉语词组为需要用户给定的标识符,如: 1CREATE DATABASE MYDB 2create database mydb 3CREATE DATABASE 学籍管理 authorization 张三,注:在
6、语句关键字和用户标识符中使用英文字母时, 其大小写等价。,(2)修改数据库语句格式: ALTER DATABASE 如:alter database mydb (3)撤销数据库语句格式: DROP DATABASE 如:drop database student,2. 基本表 (1) 定义基本表的语句格式: CREATE TABLE (,表级完整性约束) 表名:自己定义的标识符 如:user 列定义:列名、列数据类型、长度等。 定义完整性约束:列级约束和表级约束 CONSTRAINT ,例1: create table 学生 (学生号 char(8) primary key, 姓名 char(
7、6)not null unique, 性别 char(2)not null check(性别=男 or 性别=女), 出生日期 date check(出生日期 1982-12-31 ), 年级 int check(年级1 and 年级 4) ),完整性约束类型: PRIMARY KEY主关键字约束,是实体完整性约束,保证主关键字的惟一性和非空性。 可以在列级或表级上定义。 FOREIGN KEY外部关键字约束,是参照完整性约束,用来维护两个基本表之间的一致性。可以在列级或表级上定义。 UNIQUE 确保不受PRIMARY KEY约束的列上的数据的惟一性。可以在列级或表级上定义。 CHECK 通
8、过检查输入表列的数据的值来维护值域的完整性。一般用于列级上的定义。 NULL/NOT NULL允许列值为空/不允许列值为空。一般用于列级上的定义。,例2: 学生(学号,姓名,性别,专业号) 专业(专业号,专业名),create 学生 (学生号 char(8) 姓名 char(6)not null unique, 性别 char(2)not null check(性别=男 or 性别=女), 专业号 char(10),create 专业 (专业号 char(10) primary key; 专业名 char(12)not null unique ),primary key,,references
9、 专业(专业号) ),create 学生 (学生号 char(8) , 姓名 char(6)not null unique, 性别 char(2)not null check(性别=男 or 性别=女), 专业号 char(10) ,,primary key (学生号),,foreign key (专业号)references 专业(专业号) ),constraint a1 primary key (学生号),,constraint a2 foreign key (专业号) references 专业(专业号) ),练1:建立一个课程基本表,包含课程号、课程名、课程学分三个字段,其中课程号为主
10、码,课程名为候选码,课程学分带有检查约束,只允许取16之间的整数。,CREATE TABLE 课程 ( 课程号 CHAR(4) primary key, 课程名 CHAR(10) not null unique, 课程学分 int check(课程学分1 and 课程学分 6) ),练2:建立一个选课基本表,包含学生号、课程号和成绩三个 字段,其学生号与学生基本表中的学生号的类型完全相同, 其课程号与课程表中的课程号的类型完全相同。成绩属性的 定义中带有检查约束,规定成绩必须在0100之内。,create table 选课 ( 学生号 char(8), 课程号 char(4) , 成绩 int
11、 check(成绩0 and 成绩 100) , primary key(学生号,课程号), foreign key(学生号) references 学生(学生号), foreign key (课程号)references 课程(课程号) ),注意:外码必须与被参照关系中对应的主码具有 完全相同的数据类型。,(2) 修改基本表 ADD方式 使用 ADD方式可以向表中增加列定义和表约束。 语法格式: ALTER TABLE ADD (|, (|) 例1:在S表中增加一个班号列 ALTER TABLE S ADD(CLASSNO CHAR(6);,例2:在S表中增加一个完整性约束定义,使DEPT的
12、取值只能在“1”到“15”之间 ALTER TABLE S ADD (CHECK(DEPT BWTEEN “1”AND”15”);,MODIFY方式 该方式能对基本表中已有的列定义进行修改, 语法格式: ALTER TABLE MODIFY ( 数据类型NULL|NOT NULL) 例:把S表中S#列个加宽到10为字符宽度 ALTER TABLE S MODIFY(S# CHAR(10);,DROP方式 该方式能删除基本表中已有的完整性约束定义 或指定的列, 语法格式: ALTER TABLE DROP CONSTRAINT |PRMARY KEY|UNIQUE(,) 例:删除S表中的主码 删
13、除R表中的籍贯列 ALTER TABLE S ALTER TABLE R DROP PRIMARY KEY DROP 籍贯,(3). 改变基本表的名字RENAME TO (4). 撤销基本表DROP TABLE ,练3:向student表中增加“入学时间scome”字段, 其数据类型为日期型。,alter table student add scome date,练4:将学生表中年龄sage的数据类型改为短整型。,alter table student modify sage smallint,练5:删除学生姓名sname必须取唯一值的约束。,Alter table student drop
14、unique(sname),3. 视图 (1)定义视图是用一个查询块的查询结果来定义的,语法格式: CREATE VIEW () AS ,例1:创建一个有关计算机系学生情况的视图SUB。,CREATE VIEW SUB,SELECT S#,SN,AGE,FROM S,WHERE DEPT=计算机,AS,例2:在学生管理数据库中,建立“01001”班学生的视图 view_01001,其结构包含学号、姓名、年龄、班级号。,create view view_01001 as select 学号,姓名,年龄,班级号 from 学生 where 班级号=01001,例3:创建一个有关信息专业学生成绩情况
15、的视图S_SC_C,CREATE VIEW S_SC_C(S#,SNAME,C#,CNAME,GRADE) AS SELECT S.S#,SNAME,C.C#,CNAME,GRADE FROM S,C,SC WHERE S.S#=SC.S# AND SC.C#=C.C# AND PRO=信息;,例4:创建一个有关学生平均成绩的视图resultview,在设计基本表时,考虑到关系的规范化要求,不能把通过 计算得到的属性作为新关系的属性,因为会产生传递依赖。 如不能出现平均成绩、总成绩、合计、年龄若存在出生日期、 工龄若存在参加工作日期等属性。但为了日常查询方便,这 些属性完全可以在视图中定义。如
16、假定学生成绩表对应的关系 模式为result(学号,姓名,性别,语文,数学,英语,物理, 化学),则创建包含平均成绩和总成绩的视图定义如下:,CREATE VIEW resultview(学号,姓名,性别,语文,数学,英语,物理,化学,平均成绩,总成绩) AS SELECT 学号,姓名,性别,语文,数学,英语,物理,化学,(语文+数学+英语+物理+化学)/5,语文+数学+英语+物理+化学 FROM result GROUP BY 学号,(2). 改变视图的名字 RENAME TO (3). 撤销视图 DROP VIEW 如:学生平均成绩的视图resultview,drop view resultview,(4). 使用视图的优点: 1能够将对数据库的访问限制在一定范围内,有利于数据保密 2视图机制使不同的用户能以不同的方式