数据库系统概论03

第三章 关系数据库的标准语言SQL

3.1 SQL概述

SQL(Structured Query Language):结构化查询语言,时候关系数据库的标准语言。

SQL是一个通用的、功能极强的关系数据库语言。

3.1.1  SQL的产生与发展

SQL标准的进展过程:

3.1.2 SQL的特点

1.综合统一

(1)集数据定义语言(DDL),数据操纵语言(DML),数据控制语言

(DCL)功能于一体。

(2)可以独立完成数据库生命周期的全部活动:

定义关系模式,插入数据,建立数据库;对数据库中的数据进行查询和更新;数据库重构和维护;数据库安全性、完整性控制等。

(3)用户数据库投入进行后,可根据需要随时进行修改

(4)数据操作符统一

2.高度非过程化

(1)非关系数据模型的数据操纵语言“面向过程”,必须制定存取路径。

(2)SQL只要提出“做什么”,无需了解存取路径。

(3)存取路径的选择以及SQL的操作过程由系统自动完成。

3.面向集合的操作方式

(1)非关系数据模型采用面向记录的操作方式,操作对象是一条记录。

(2)SQL采用集合操作方式

·操作对象、查找结果可以是元组的集合;

·一次插入、删除、更新操作的对象可以是元组的集合;

4.以同一种语法结构提供多种使用方式

(1)SQL是独立语的言

能够独立的用于练级交互的使用方式。

(2)SQL又是嵌入式语言

SQL能够嵌入到高级语言(例如C,C++,JAVA)程序中供程序员设计程序时使用。

5.语言简洁,易学易用

SQL功能极强,完成核心功能只用了9个动词。

3.1.3 SQL的基本概念

SQL支持关系数据库三级模式结构。

基本表

(1)本身独立存在的表;

(2)SQL中一个关系就对应一个基本表

(3)一个(或多个)基本表对应一个存储文件;

(4)一个表可以带若干指引。

存储文件

(1)逻辑结构组成了关系数据库的内模式;

(2)物理结构是任意的,对用户透明。

视图

(1)从一个或几个基本表导出的表;

(2)数据库中只存放视图的定义而不存放视图对应的数据;

(3)视图是一个虚数;

(4)用户可以在视图上再定义视图

3.2 学生-课程数据库

学生-课程模式S-T

3.3 数据定义

SQL的数据定义功能:模式定义、表定义、视图和索引定义。

3.3.1 模式的定义与删除

1.定义模式

语句格式如下:

例子:

说明:

(1)若没有指定模式名,那么<模式名>隐含为<用户名>

例子:

该语句没有指定<模式名>,因此<模式名>隐含为用户名<WANG>

(2)在CEWATE SCHEMA中可以接受CREATE TABLE(表定义子句),CREATE VIEW(视图定义子句)和GRANT(授权定义子句)

格式如下:

例子:

(3)执行创建模式语句必须拥有DBA权限,或者DBA授予在CREATE SCHEMA的权限。

2.删除模式

语句格式:

说明

(1)CASCADE 和RESTRICT必须二选一。

(2)CASCADE(级联):删除模式的同时吧该模式中的所有数据库对象全部删除。

(3)RESTRICT(限制):如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。当该模式中没有任何下属的对象时才能执行。

例子:

3.3.2 基本表的定义、删除与修改

1.定义基本表

语句格式:

说明:

如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。

例子:

2.数据类型

3.模式与表

每一个基本表都属于某一个模式,一个模式包含多个基本表。

创建基本表(其他数据库对象也一样)时,若没有指定模式,系统根据搜索路径来确定该对象所属模式。

(1)显示当前的搜索路径:

SHOW search path

(2)搜索路径的当前默认值是:

$user,PUBLIC;

(3)DBA用户可以设置搜索路径。

SET search_path TO “S-T” ,PUBLIC;(第一个模式名S-T)。

若搜索路径中的模式名都不存在,系统将会给出错误。

若搜索路径中的存在模式,RDBMS会使用模式列表中第一个存在的模式作为数据库对象。

创建基本表

一定义一个学生-课程模式S-T为例。

(1)创建表时给出模式名。

CREATE TABLE “S-T”  .Students(表名)(........);/*模式名为S-T*/

CREATE TABLE “S-T”  .Course(表名)(........);/*模式名为S-T*/

CREATE TABLE “S-T”  .SC(表名)(........);/*模式名为S-T*/

(2)在创建模式语句中同时创建表。

(3)设置所属模式,在创建表名中不必给出模式名

  例子:

4.修改基本表

语句格式:

ALTER TABLE<表名>

[ADD[COLUMN]<新列名><数据类型>[完整性约束]]

[ADD<表级完整性约束>]

[DROP[COLUMN]<列名>[CASCADE|RESTRICT]]

[DROP CONSTRAINT<完整性约 束>[CASCADE|RESTRICT]]

[ALTER COLUMN<列名><数据类型>];

知识回顾:

CASCADE(联级)

RESTRICT(限制)

说明:

(1)<表名>是要修改的基本表。

(2)ADD子句用于增加新列、新的列级完整性约束条件和新的表级完整性约束条件。

(3)DROP COLUMN子句用于删除表中的列。

如果指定了CASCADE短语,则自动删除引用该列的其他对象。

如果指定了RESTRICT短语,则如果该列被其他对象引用,关系数据库管理系统将拒绝删除该列。

(4)DROP CONSTRAINT子句用于删除指定的完整性约束条件。

(5)ALTER COLUMN子句用于修改原有的列定义,包括修改列名和数据类型。

例子:

AlTER TABLE Student ADD S_entrance DATE

注意:不论基本表中原来是否已有数据,新增的一列一律为空值。

5.删除基本表

语句格式:

DROP TABLE <表名>[CASCADE|RESTRICT];

例子:

说明:

(1)RESTRICT:删除表是有限制的。欲删除的基本表是不能被其他的表的约束所引用。如果存在该表的依赖对象,则此表不能删除。

(2)CASCADE:删除该表没有限制。在删除基本表的同时,相关的依赖对象一起删除。

(3)基本表的定义被删除,数据被删除,表上建立的索引、视图、触发器等一般也将被删除。

例子:

删除表格的软件处理策略:

3.3.3 索引的建立与删除

建立索引的目的:加快查询速度。

谁可以建立索引:DBA或表的属主(即建立表的人)。

DBMS一般会自动建立以下列上的索引:

PRIMARY KEY(主码)

UNIQUE(单位属性约束:唯一性)

谁维护索引:DBMS自动完成。

使用索引:DBMS自动选择是否使用索引及使用哪些索引。

·RDBMS中的索引一般采用B+树 、HASH索引来实现。

B+树索引具有动态平衡的优点,HASH索引具有查找速度快的特点。

采用B+树还是HASH索引由具体的RDBMS来决定。

·索引是关系数据库内部实现技术,属于内模式的范畴。

·CREATE INDEX语句定义索引时,可以定义索引是唯一索引、非唯一索引或聚簇索引。

1.建立索引

语句格式:

CREATE [UNIQUE] [CLUSTER]  INDEX <索引名> ON <表名>(<列名>[<次序>][,<列名>[<次序>]]...);

说明:

(1)UNIQUE表明此索引每一个索引值只对应唯一的数据。

例子:

升序:由小到大(ASC)

降序:由大到小(DESC)

(2)CLUSTER表示要建立的索引是聚簇索引。聚簇索引是指索引顺序与表中记录的物理顺序一致的索引组织。

例子:

2. 删除索引

语句格式:

DROP INDEX <索引名>;

删除索引时,系统会从数据字典中删去有关该索引的描述。

3.3.4 数据字典

·数据字典是关系数据库管理系统内部的一组系统表。

·数据自带奶记录了数据库中所有的定义信息,包括模式定义、视图定义、索引定义、完整性约束定义、各类用户对数据库的操作权限、统计信息等。

· RDBMS执行SQL数据定义时,实际就是更新数据。

3.4 数据查询

语句格式:

SELECT[ALL|DISTINCT]<目标列表达式>

[,<目标列表达式>].....

FROM<表名或视图名>[,<表名或视图名>].....

[WHERE<条件表达式>]

[GROUP BY<列名 1>[HAVING<条件表达式>]]

[ORDER BY<列名2>[ASC|DESC]];

注意:

(1)语句中字母不分大小写。

(2)语句中的“,;”等标点符号为英文状态下的半角字符。

(3)[]中的内容,不是语句必须的内容,只有为了实现某种功能时才添加

3.4.1 单表查询

功能:对一个表的内容进行查询。

1.选择表中的若干列

(1)查询指定列

格式:在SELECT后面指定列名,FROM后面列所在的表名。

例子:

(2)查询全部列

功能:选出表中所有属性列。

格式:在SELECT关键字后面列出所有列名或将<目标列表达式>指定为*。

例子:

(3)查询经过计算的值

功能:选出表中指定的属性列,并经过计算后输出。

格式:SELECT子句的<目标列表达式>可以为:

(1)算术表达式

(2)字符串常量

(3)函数

(4)列别名

例子:

例子:

2.选择表中若干个元组  
(1)消除取值重复的行 DISTINCT

如果没有指定DISTINCT关键词,则缺省为ALL。

例子:

此时指定DISTINCT关键词,去掉表中重复的行。

SELECT DISTINCT Sno FROM SC;

例子:

(2)查询满足条件的元组  WHERE

查询满足条件的元组可以通过where子句实现,where常用的查询条件如下:

三段论分析法:
1.线分析要显示什么数据  (找SELECT后跟随字段)
2.查找显示数据相关的表  (找出FROM后跟的表名)
3.明确查询条件
查询条件示例
(1)比较大小

例子:

(2)确定范围  BETWEEN...AND...   和    NOT  BETWEEN...AND...

谓词:BETWEEN...AND...   和    NOT  BETWEEN...AND...

例子:

(3)确定集合   IN<值表>,NOT IN<值表>

谓词:IN<值表>,NOT IN<值表>

例子:

(4)字符匹配  [NOT LIKE]'<匹配串>'  [ESCAPE'<换码字符>']

谓词:[NOT LIKE]'<匹配串>'  [ESCAPE'<换码字符>']

说明:

若匹配串为固定字符串。

例子:

此时LIKE等价于=(等于号)

若匹配串为含通配符的字符串。

例子:

此处的%(百分号)为任意个字符   _(下划线为一个字符)

_为一个占位符%为多个占位符

若使用换码字符将通配符转义为普通字符

例子:

此处在_前加\并用关键词:EACAPE是为了向系统表示此处的_并非一个占位符,而是具有实际意义的存在。

(5)涉及到空值的查询   IS NULL 或 IS NOT NULL

谓词:IS NULL(空) 或 IS NOT NULL(非空)

“IS”不能用“=”代替

例子:

此处学生参见了选课但是没有考试,故查询条件中成绩为空

(6)多重条件查询  AND   OR

用逻辑运算符AND和OR来联结多个查询条件,AND的优先级高于OR,可以用括号改变优先级。

可以用来实现多种其他谓词:

[NOT]  IN

[NOT]  BETWEEN  ...  AND ...

例子:

3.ORDER BY子句

ORDER BY(排序)子句可以按一个或多个属性列排序:

升序:ASC;

降序:DESC;

缺省(默认)值为升序。

当排序列含空值时:(空值默认为最大值)

ASC:排序列为空值的元组最后显示

DESC:排序列为空值的元组最先显示

例子:

4.聚集函数  COUNT SUM AVG MAX MIN

例子:

注意:

WHERE子句中是不能用聚集函数作为条件表达式的。聚集函数只能用于SELECT子句和GROUPBY中的HAVING子句。

5. GROUP BY子句

GROUP BY子句作用是:按指定的一列或多列值分组,值相等的为一组,来细化聚集函数的作用对象。

说明:

(1)未对查询结果分组,聚集函数将作用于整个查询结果。

(2)对查询结果分组后,聚集函数将分别于每个分组

例子:

此处若没有GROUP BY Cno来分组

则结果为COUNT(Sno)列的总和

GROUP BY子句分组后,可以使用HVING短语指定筛选条件。

例子:

6.HAVING短语与WHERE子句的区别

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值