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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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. 适当利用视图可以更清晰地表达查询
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值