数据库系统概论 ---- 第三章 -- 关系数据库标准语言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;


相关实践学习
使用DAS实现数据库SQL优化
本实验介绍如何通过数据库自治服务DAS对RDS MySQL高可用实例进行SQL优化,包含购买RDS实例并创建数据库、数据导入、生成并优化慢SQL、执行优化后的SQL语句等实验步骤。
相关文章
|
12天前
|
SQL 存储 关系型数据库
【SQL技术】不同数据库引擎 SQL 优化方案剖析
不同数据库系统(MySQL、PostgreSQL、Doris、Hive)的SQL优化策略。存储引擎特点、SQL执行流程及常见操作(如条件查询、排序、聚合函数)的优化方法。针对各数据库,索引使用、分区裁剪、谓词下推等技术,并提供了具体的SQL示例。通用的SQL调优技巧,如避免使用`COUNT(DISTINCT)`、减少小文件问题、慎重使用`SELECT *`等。通过合理选择和应用这些优化策略,可以显著提升数据库查询性能和系统稳定性。
69 9
|
30天前
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
99 6
|
2月前
|
SQL Oracle 数据库
使用访问指导(SQL Access Advisor)优化数据库业务负载
本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
98 11
|
2月前
|
SQL 监控 安全
SQL Servers审核提高数据库安全性
SQL Server审核是一种追踪和审查SQL Server上所有活动的机制,旨在检测潜在威胁和漏洞,监控服务器设置的更改。审核日志记录安全问题和数据泄露的详细信息,帮助管理员追踪数据库中的特定活动,确保数据安全和合规性。SQL Server审核分为服务器级和数据库级,涵盖登录、配置变更和数据操作等事件。审核工具如EventLog Analyzer提供实时监控和即时告警,帮助快速响应安全事件。
|
2月前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
3月前
|
SQL Java 数据库连接
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
|
3月前
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
54 2
|
4月前
|
SQL 数据库
SQL数据库基础语法入门
[link](http://www.vvo.net.cn/post/082935.html)
|
4月前
|
SQL Oracle 关系型数据库
SQL语言的主要标准及其应用技巧
SQL(Structured Query Language)是数据库领域的标准语言,广泛应用于各种数据库管理系统(DBMS)中,如MySQL、Oracle、SQL Server等
145 9
|
4月前
|
SQL 存储 监控
串口调试助手连接SQL数据库的技巧与方法
串口调试助手是电子工程师和软件开发人员常用的工具,它能够帮助用户进行串口通信的调试和数据分析

热门文章

最新文章