数据库系统概论 ---- 第三章 -- 关系数据库标准语言SQL(3.5-3.7)(二)

简介: 数据库系统概论 ---- 第三章 -- 关系数据库标准语言SQL(3.5-3.7)(二)

3.带子查询的删除语句

子查询同样也可以嵌套在DELETE语句中,用以构造执行删除操作的条件。

恢复数据:

insert into SC
values ('201215121', 1, 92),
       ('201215121', 2, 85),
       ('201215121', 3, 88),
       ('201215122', 2, 90),
       ('201215122', 3, 80);
SELECT * FROM SC;

[例3.78] 删除计算机科学系所有学生的选课记录。

DELETE FROM SC
WHERE Sno IN (
    SELECT Sno
    FROM Student
    WHERE Sdept = 'CS'
    );
SELECT s.Sno, Sdept, Cno
FROM Student s LEFT JOIN SC ON s.Sno = SC.Sno;

3.6 空值处理

所谓空值就是“不知道”或“不存在”或“无意义”的值。

SQL 语言中允许某些元组的某些属性在一定情况下取空值。

一般有以下几种情况:

  • 该属性应该有一个值,但目前不知道它的具体值。
  • 该属性不应该有值。
  • 由于某种原因不便于填写。

空值是一个很特殊的值,含有不确定性,对关系运算带来特殊的问题,需要做特殊的处理。

1.空值的产生

[例3.79] 向SC表中插入一个元组,学生号是“201215126”,课程号是“1”,成绩为空。

INSERT INTO SC(Sno, Cno)
VALUES ('201215126', '1');
SELECT * FROM SC;

[例3.80] 将Student表中学生号为“201215200”的学生所属的系改为空值。

# 先插入数据
INSERT INTO Student
VALUES ('201215200', 'lili', '女', 21, 'IS');
UPDATE Student
SET Sdept = NULL
WHERE Sno = '201215200';
SELECT * FROM Student;

另外,外连接也会产生空值

空值的关系运算也会产生空值

2.空值的判断

判断一个属性的值是否为空值用IS NULL 或IS NOT NULL来表示

将一个属性的值赋值为空值使用 =NULL

[例3.81]从Student表中找出漏填了数据的学生信息。

SELECT *
FROM Student
WHERE Sname IS NULL OR
      Ssex IS NULL OR
      Sage IS NULL OR
      Sdept IS NULL ;

3. 空值的约束条件

  • 属性定义(或者域定义)中有NOT NULL约束条件的不能取空值
  • 加了UNIQUE限制的属性不能取空值
  • 属性不能取空值

4. 空值的算术运算、比较运算和逻辑运算

  • 空值与另一个值(包括另一个空值)的算术运算的结果为空值
  • 空值与另一个值(包括另一个空值)的比较运算的结果为UNKNOWN
SELECT 1+NULL,
       NULL+NULL,
       5*NULL,
       NULL>1,
       NULL = NULL;

有了UNKNOWN后,传统的逻辑运算中二值以(TRUE, FALSE) 逻辑就扩展成了三值逻辑。

AND、OR、NOT的真值表如表所示:

其中

  • T表示TRUE,
  • F表示FALSE,
  • U表示UNKNOWN。

在查询语句中,只有使WHERE和HAVING子句中的选择条件为TRUE的元组才被选出作为输出结果

[例3.83]选出选修 1号课程的不及格的学生以及缺考的学生。

插入数据:

INSERT INTO SC
VALUES ('201215122', 1, 58),
       ('201215121', 1, 88),
       ('201215123', 1, 48);
SELECT * FROM SC;

查询:

SELECT *
FROM SC
WHERE Cno = '1' AND
      Grade < 60
UNION
SELECT *
FROM SC
WHERE Grade IS NULL;

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操作时要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)。
  • 组成视图的属性列名或者全部省略或者全部指定,没有第三种选择。
  • 如果省略了视图的各个属性列名,则隐含该视图由子查询中SELECT子句目标列中的诸字段组成
  • 但在下列三种情况下必须明确指定组成视图的所有列名:
  • (1)某个目标列不是单纯的属性名,而是聚集函数或列表达式;
  • (2)多表连接时选出了几个同名列作为视图的字段;
  • (3)需要在视图中为某个列启用新的更合适的名字

[例3.84] 建立信息系学生的视图。

CREATE VIEW V_IS_Stu
AS
    SELECT Sno, Sname, Sage
    FROM student
    WHERE Sdept = 'CS';
SELECT * FROM v_is_stu;


相关实践学习
体验RDS通用云盘核心能力
本次实验任务是创建一个云数据库RDS MySQL(通用云盘),并通过云服务器ECS对RDS MySQL实例进行压测,体验IO加速和IO突发带来的性能提升;并通过DMS执行DDL,将数据归档到OSS,再结合云盘缩容,体验数据归档带来的成本优势。
相关文章
|
5月前
|
SQL Java 编译器
SQL 语言:嵌入式 SQL 和动态 SQL
SQL 语言:嵌入式 SQL 和动态 SQL
76 4
|
5月前
|
SQL 存储 数据库
爆肝!一看就懂的《SQL 语言知识体系》【建议收藏】(下)
爆肝!一看就懂的《SQL 语言知识体系》【建议收藏】
55 1
|
3月前
|
SQL 关系型数据库 MySQL
在MySQL中,什么是结构化查询语言 (SQL)
【8月更文挑战第20天】在MySQL中,什么是结构化查询语言 (SQL)
64 1
|
4月前
|
SQL 存储 关系型数据库
SQL语言优缺点有哪些?
SQL(Structured Query Language)语言作为数据库管理和操作的标准语言,具有一系列的优点,同时也存在一些缺点。
93 7
|
1月前
|
SQL Oracle 关系型数据库
SQL语言的主要标准及其应用技巧
SQL(Structured Query Language)是数据库领域的标准语言,广泛应用于各种数据库管理系统(DBMS)中,如MySQL、Oracle、SQL Server等
|
1月前
|
SQL 关系型数据库 MySQL
Go语言项目高效对接SQL数据库:实践技巧与方法
在Go语言项目中,与SQL数据库进行对接是一项基础且重要的任务
55 11
|
5月前
|
SQL 存储 数据库
爆肝!一看就懂的《SQL 语言知识体系》【建议收藏】(中)
爆肝!一看就懂的《SQL 语言知识体系》【建议收藏】
67 1
|
3月前
|
SQL 关系型数据库 MySQL
|
3月前
|
SQL 存储 大数据
SQL 语言发展史简直太震撼啦!从诞生到现代数据处理,见证一场奇妙的演变之旅,快来感受!
【8月更文挑战第31天】SQL(结构化查询语言)自20世纪70年代由IBM研究员E.F. Codd提出以来,已成为现代数据处理不可或缺的一部分。它最初简化了层次和网状模型中复杂的存储与检索问题,通过基本的SELECT、FROM和WHERE关键字实现了数据查询。80年代,SQL在商业数据库中广泛应用,引入了GROUP BY、HAVING和ORDER BY等功能,增强了数据分析能力。90年代,互联网和企业信息化推动了SQL的进一步优化与扩展,支持分布式数据库和数据仓库等技术。
48 0
|
3月前
|
SQL 存储 NoSQL
从SQL到NoSQL:理解不同数据库类型的选择与应用——深入比较数据模型、扩展性、查询语言、一致性和适用场景,为数据存储提供全面决策指南
【8月更文挑战第31天】在信息技术飞速发展的今天,数据库的选择至关重要。传统的SQL数据库因其稳定的事务性和强大的查询能力被广泛应用,而NoSQL数据库则凭借其灵活性和水平扩展性受到关注。本文对比了两种数据库类型的特点,帮助开发者根据应用场景做出合理选择。SQL数据库遵循关系模型,适合处理结构化数据和复杂查询;NoSQL数据库支持多种数据模型,适用于非结构化或半结构化数据。SQL数据库在一致性方面表现优异,但扩展性较差;NoSQL数据库则设计之初便考虑了水平扩展性。SQL使用成熟的SQL语言,NoSQL的查询语言更为灵活。
78 0

热门文章

最新文章