数据库系统概论基础篇——第3讲 关系数据库标准语言SQL

本文深入解析SQL语言的特点,包括其综合统一、高度非过程化、面向集合操作、统一语法结构和简洁易学的特性。详细介绍了SQL在数据定义、数据查询、数据更新和数据控制方面的应用,以及如何通过视图简化操作、提供逻辑独立性和数据安全保护。

3.1 SQL概述

3.1.1 SQL的特点

SQL之所以能够为用户和业界所接受并称为国际标准,是因为它是一个综合的、功能极强同时又简洁易学的语言。SQL集数据查询、数据操纵、数据定义和数据控制功能于一体,其主要特点包括以下几部分:
1. 综合统一
SQL集数据定义语言、数据操纵语言、数据控制语言的功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动,包括以下一系列操作要求:

  • 定义和修改、删除关系模式,定义和删除视图,插入数据,建立数据库。
  • 对数据库中的数据进行查询和更新。
  • 数据库重构和维护。
  • 数据库安全性、完整性控制,以及事务控制。
  • 嵌入式SQL和动态SQL定义。
    2. 高度非过程化
    只要提出“做什么”,而无须指明“怎么做”,因此无须了解存取路径。存取路径的选择以及SQL的操作过程由系统自动完成。这不但大大减轻了用户负担,而且有利于提高数据独立性。
    3. 面向集合的操作方式
    SQL采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。
    4. 以同一种语法结构提供多种使用方式
    SQL既是独立的语言,又是嵌入式语言。
    作为独立语言,它能够独立地用于联机交互的使用方式,用户可以在终端键盘上直接键入SQL命令对数据库进行操作;
    作为嵌入式语言,SQL语句能够嵌入到高级语言(例如C、C++、Java)程序中,供程序员设计程序时使用。而在两种不同的使用方式下,SQL的语法结构基本上是一致的。这种以统一的语法结构提供多种不同使用方式的做法,提供了极大的灵活性与方便性。
    5. 语言简洁、易学易用
    SQL功能极强,但由于设计巧妙,语言十分简洁,完成核心功能只用了9个动词,如下表所示。SQL接近英语口语,因此易于学习和使用。
SQL功能动词
数据查询SELECT
数据定义CREATE, DROP, ALTER
数据操纵INSERT, UPDATE, DELETE
数据控制GRANT, REVOKE

3.2 学生-课程数据库

本章以学生-课程数据库为例来讲解SQL的数据定义、数据操纵、数据查询和数据控制语句。

3.3 数据定义

关系数据库系统支持三级模式结构,其模式、外模式和内模式中的基本对象有模式、表、视图和索引等。因此SQL的数据定义功能包括模式定义、表定义、视图和索引的定义。

操作对象创建删除修改
模式CREATE SCHEMADROP SCHEMA
CREATE TABLEDROP TABLEALTER TABLE
视图CREATE VIEWDROP VIEW
索引CREATE INDEXDROP INDEXALTER INDEX

数据字典是关系数据库管理系统内部的一组系统表,它记录了数据库中所有的定义信息,包括关系模式定义、视图定义、索引定义、完整性约束定义、各类用户对数据库的操作权限、统计信息等。关系数据库管理系统在执行SQL的数据定义语句时,实际上就是在更新数据字典表中的相应信息。在进行查询优化和查询处理时,数据字典中的信息是其重要依据。

3.4 数据查询

数据查询是数据库的核心操作。SQL提供了SELECT语句进行数据查询,该语句具有灵活的使用方式和丰富的功能。其一般格式为:

SELECT [ALL|DISTINCT] <目标列表达式> [, <目标列表达式>] ...
FROM <表名或视图名> [, <表名或视图名>...] | (<SELECT语句> [AS] <别名>
[WHERE <条件表达式>]
[GROUP BY <列名1> [HAVING <条件表达式>]]
[ORDER BY <列名2> [ASC|DESC]];

整个SELECT语句的含义是,根据WHERE子句的条件表达式从FROM子句指定的基本表、视图或派生表中找出满足条件的元组,再按SELECT子句中的目标列表达式选出元组中的属性值形成结果表。

如果有GROUP BY子句,则将结果按<列名1>的值进行分组,该属性列值相等的元组为一个组。通常会在每组中作用聚集函数。如果GROUP BY子句带HAVING短语,则只有满足指定条件的组才予以输出。

如果有ORDER BY子句,则结果表还要按<列名2>的值的升序或降序排序。

SELECT语句既可以完成简单的单表查询,也可以完成复杂的连接查询和嵌套查询。

3.5 数据更新

3.5.1 插入数据

1. 插入元祖
INSERT
INTO <表名> [(<属性列1> [,<属性列2>]...]
VALUES(<常量1> [,<常量2>]...)

eg:
INSERT
INTO Student(Sno, Sname, Ssex, Sdept, Sage)
VALUES('201215128', '陈冬', '男', 'IS', 18);
2. 插入子查询结果
INSERT
INTO <表名> [<属性列1> [,<属性列2>...])]
子查询;

eg:
INSERT
INTO Dept_age(Sdept, Avg_age)
SELECT Sdept, AVG(Sage)
FROM Student
GROUP BY Sdept;

3.5.2 修改数据

修改操作又称为更新操作,其语句的一般格式为

UPDATE <表名>
SET <列名> = <表达式> [, <列名>=<表达式>]...
[WHERE <条件>];

eg:
UPDATE Student
SET Sage=22
WHERE Sno='201215121';

3.5.3 删除数据

删除语句的一般格式为

DELETE 
FROM <表名>
[WHERE <条件>];

3.6 空值的处理

  1. 空值的产生
  2. 空值的判断
    判断一个属性的值是否为空值,用IS NULL或IS NOT NULL来表示
  3. 空值的约束条件
    属性定义(或者域定义)中有NOT NULL约束条件的不能取空值,加了UNIQUE限制的属性不能取空值,码属性不能取空值。
  4. 空值的算术运算、比较运算和逻辑运算

3.7 视图

视图是从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。

3.7.1 定义视图

1. 建立视图

SQL语言用CREATE VIEW命令建立视图,其一般格式为

CREATE VIEW <视图名> [(<列名> [,<列名>]...)]
AS <子查询>
[WITH CHECK OPTION]

其中,子查询可以是任意的SELECT语句,是否可以含有ORDER BY子句和DISTINCT短语,则取决于具体系统的实现。

WITH CHECK OPTION表示对视图进行UPDATE、INSERT和DELETE操作时要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)。

2. 删除视图
DROP VIEW <视图名> [CASCADE];

3.7.2 查询视图

视图定义后,用户就可以像对基本表一样对视图进行查询了。

从数据字典中取出视图的定义,把定义中的子查询和用户的查询结合起来,转换成等价的对基本表的查询,然后再执行修正了的查询。这一转换过程称为视图消解(view resolution)

3.7.3 更新视图

由于视图是不实际存储数据的虚表,因此对视图的更新最终要转换为对基本表的更新。

3.7.4 视图的作用

  1. 视图能够简化用户的操作
  2. 视图使用户能以多种角度看待同一数据
  3. 视图对重构数据库提供了一定程度的逻辑独立性
  4. 视图能够对机密数据提供安全保护
  5. 适当利用视图可以更清晰地表达查询
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值