数据库原理(3)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章 关系数据库SQL 语言
1.1 SQL 的发展历程:1970年IBM 研究中心E. F. Codd 连续发表多篇论文,提出关系数据模型;1972年IBM 开始研制实验型关系数据库管理系统System R ,配套的查询语言为SQUARE (Specifying Queries As Relation Expression ),数学符号较多。1974年Boyce 和Chamberlin 把SQUARE 语言修改为SEQUEL (Structured English Query Language ),去掉了一些数学符号,并采用英语单词表示和结构式的语法规则。70年代末由于SQL 语言的使用方便、功能丰富、语言简洁易学,得到了很快的应用和推广;
SEQUEL 简称为SQL (Structured Query Language ),称为结构式查询语言。实际上,SQL 具有定义、查询、更新和控制等多种功能。
1986年美国国家标准局颁布了美国标准的SQL 语言;1987年被国际标准化组织采纳为国际标准,两个标准称为SQL 86。1989年ISO 颁布了增强完整性特征的SQL 89标准。SQL 86 89标准中,基本表没有关键码的概念,而是采用索引机制弥补。1992年ISO 在SQL 89进行了大量的修改和扩充,推出了SQL 92,也称为SQL 2,SQL 3的标准正在进行当中。1.2 SQL 数据库的体系结构:
外模式概念模式内模式子模式关系模式存储模式元组属性模式视图基本表存储文件行列Schema
View Base table Stored File Row Column
SQL 数据库由表构成,表可以是基本表,也可以是视图。 在用户看来,视图和基本表是一样的,都是关系(表格)。基本表是实际存储在数据库中的表。一个基本表可以跨一个或多个存储文件,一个存储文件也可以在存放一个或多个基本表,无需一一对应。
在SQL 中,外模式一级数据结构的基本单位是视图,视图是从若干个基本表和/或其它视图构造出来的,所以视图又被称为虚表。1.3 SQL 的组成:
数据定义:SQL DDL ,用于定义SQL 模式、基本表、视图和索引。数据操纵:SQL MML ,又分为数据查询和数据更新两大类。
数据控制:该部分包括对基本表和视图的授权,完整性规则的描述,事务控制等。
嵌入式SQL 的使用规定:该部分内容涉及SQL 语句嵌入在宿主语言程序中使用的规则。
2.SQL 的数据定义
2.1 SQL 模式的创建和撤消:
SQL 模式(数据库模式)指的是基本表的集合。一个模式由模式名和模式拥有者的用户名或帐号来确定,并包括模式中每一个元素(基本表、索引等)的定义。创建了一个SQL 模式,就是定义了一个存储空间。创建一个SQL 模式,句法为:Create schema <模式名> authorization <用户名>撤消SQL 模式,句法为:Drop schema <模式名> cascade /restrict Cascade :层叠方式,把SQL 模式及其下属的基本表、视图、索引等所有元素全部撤消;
v. Drop 做动词时,有删除的意思。Restrict :约束式,只有当SQL 模式没有任何下属元素时,才撤消SQL 模式,否则拒绝执行。2.2 SQL 的基本数据类型:
数值型:INT
长整数SMALLINT 短整数REAL
浮点数
DOUBLE PRECISION
双精度浮点数
FLOAT (n)精度为n 位数字的浮点数
NUMERIC(p,d)
定点数,由p 位数字组成,小数点后面有d 位数字,也可写成DECIMAL(p,d);Numeric 数字的,Decimal 小数的
字符串型:CHAR(n)
长度为n 的定长字符串
VARCHAR(n)
具有最大长度为n 的变长字符串位串型:BIT(n)
长度为n 的二进制位串
BIT VARYING(n)
最大长度为n 的变长二进制位串时间型:DATE
形为YYYY-MM-DD 的日期TIME
形为HH:MM:SS 的时间
2.3 基本表的创建、修改和撤消:
基本表的创建:CREAT TABEL SQL 模式名. 基本表名
主键子句PRIMARY KEY
(列名,数据类型,…,完整性约束)
完整性约束有三种子句检查子句CHECK
外键子句FOREIGN KEY
*SQL 允许列的值为空值,但要求主键不能为空,如果要求不能为空值,则应在数据类型后加“NOT NULL ”说明。基本表创建好后,用INSERT 命令把数据插入基本表中。
基本表结构的修改:
ALTER TABEL 基本表名 ADD 列名 类型
在基本表中增加一列
ALTER TABEL 基本表名 DROP 列名 CASCADE/ RESTRICT Cascade :将引用该列的视图和约束全部一起删除;
Restrict :约束式,只有当该列没有视图或约束引用,才能删除。
基本表的撤消:DROP TABLE 基本表名 CASCADE/ RESTRICT
*一个基本表撤消后,其所有的数据也一并丢失。2.4 视图的创建和撤消:
如用户经常要用到S 、SC 、C 的其中几列,可以单独创建一个视图:视图的创建:CREAT VIEW 视图名(列名表)*列名表可省略。
CREATE VIEW STUDENT (S#,SNAME ,CNAME ,GRADE )AS SELECT 查询语句
AS SELECT S. S#,SNAME ,CNAME ,GRADE 视图的撤消:DROP VIEW 视图名
FROM S, SC ,C
WHERE S. S# =SC.S# AND SC. C# = C. C#
2.5 索引的创建和撤消:
在SQL 86和89中,基本表中没有关键码的概念,用索引机制弥补,索引属于存储的路径的概念;在SQL 中使用了主键的,在基本表中定义了主键。
索引的创建:CREAT [UNIQUE] INDEX 索引名 ON 基本表名(列名表)UNIQUE :要求列的值在基本给中不重复。
*一个索引键也可以对应多个列。缺省为升序(ASC )排列,也可用降序(DESC )排列。
索引的撤消:DROP INDEX 索引名
3.SQL 的数据查询
数据查询是关系运算理论在SQL 语言中的主要体现,本节从SELECT 语句的基本句法、完整句法和各种限定三方面进行说明。3.1 Select 语句的基本句法,联接查询、嵌套查询、存在量词方式的用法:SELECT A1, …,An 算术比较运算符,<,<=.=,!=,>,>=,<>FROM R1 ,…Rm 逻辑运算符,AND ,OR ,NOT WHERE F *其中,F 为条件表达式,比关系代数中的公式更灵活。集合运算符,UNION(并),INTERSECT(交),EXCEPT(差)*且SELECT 语句可以嵌套使用,层次分明,具有结构程序设计特点。集合成员运算符,IN ,NOT IN 且嵌套查询比联接查询的笛卡尔积效率高。谓语,EXISTS(存在量词),ALL ,SOME ,UNIQUE(唯一)
聚合函数,AVG ,MIN ,MAX ,SUM ,COUNT ,聚合函数不允许复合操作;
联接查询:嵌套查询:
嵌套查询的IN写法:嵌套查询的存在量词写法:
SELECT S. S#,SNAME SELECT S#,SNAME SELECT S#,SNAME SELECT S#,SNAME FROM S, SC FROM S FROM S FROM S WHERE S. S# =SC. S#WHERE WHERE 'C2' IN WHERE EXISTS
AND C# ='C' (SELECT S#
(SELECT C # (SELECT *FROM SC
FROM SC FROM SC WHERE C# ='C' )
WHERE S# =S. S# )WHERE S# =S. S#
详见P 62
IN 后面用括号,表示它是一个集合;AND C# ='C' )NOT IN 也可用<>ALL 表示;
3.2 Select 语句的完整句法,分组子句、排序子句的用法:SELECT 目标表的列名或列表达式序列1、读取FROM 子句中基本表、视图的数据,执行笛卡尔积操作;FROM 基本表和/或视图序列2、选取满足WHERE 子句中给出的条件表达式的元组;
[WHERE 行条件表达式]行条件子句3、按GROUP 子句中指定列的值分组,同时提取满足HAVING 子句中条件表达式的那些组;[GROUP BY 列名序列]分组子句4、
按SELECT 子句中给出的列名或列表达式求值输出;
[HAVING 组条件表达式]
组条件子句5、ORDER 子句对输出的目标表进行排序,按附加说明ASC(升序排列),或DESC(降序排列);
[ORDER BY 列名 ASC|DESC]排序子句*[ ]是指该成分可有可无。
分组子句:唯一
排序子句:
SELECT AGE, COUNT (DISTINCT S.S# )SELECT AGE, COUNT (S# )FROM S, SC
FROM S
WHERE S. S# = SC. S#WHERE SEX = 'M 'GROUP BY AGE
GROUP BY AGE
把满足WHERE 子句中条件的查询结果按年龄分组;HAVING COUNT (*)>50组条件子句,去掉小于等于50人的组;此时的SELECT 语句应对每一组分开进行操作;
ORDER BY 2,AGE DESC
对SELECT 子句中的第2个值进行升序排列,如人数相同则按降序排列。
3.3 Select 语句中的各种限定:
如果我们要求输出的表格中不许出现重复元组,那么可在SELECT 后加一保留字DISTINCT .如:SELECT DISTINCT C# SELECT 子句允许包含+、-、*、/,以及列名、常数的算术表达式;
列和基本表的改名操作:如一个基本表在SELECT 语句中多次出现,则可以用"SELECT 旧名 AS 新名"来改名,以方便操作;
关系模型术语
SQL 术语也是三级结构