文章

DBMS笔记 04 SQL语言

SQL 是一种非过程化、面向集合的数据库语言,涵盖数据定义、查询、操纵和控制四大功能,通过 SELECT、DDL 和 DML 等语句实现对数据的全面管理。 其核心在于查询机制(WHERE、GROUP BY、HAVING、JOIN 等)以及视图与约束的使用,用于高效获取数据并保证数据结构与安全性。

DBMS笔记 04 SQL语言

第四章 SQL

4.1 SQL 语言特点

  • SQL 四大功能
    • 数据查询(DQL):SELECT
    • 数据定义(DDL):CREATE, DROP, ALTER
    • 数据操纵(DML):INSERT, DELETE, UPDATE
    • 数据控制(DCL):GRANT, REVOKE, DENY
  • SQL 特点:综合性、非过程化、面向集合、可嵌入其他语言。

4.2 数据定义 (DDL)

  1. 数据库模式
    • CREATE SCHEMA / DROP SCHEMA
  2. 基本表
    • CREATE TABLE 表名 (列名 类型 [完整性约束], … )
    • ALTER TABLE 修改表结构(加列、删列、改属性、加约束等)
    • DROP TABLE 表名 [RESTRICTCASCADE]
  3. 视图(见 4.5)
  4. 索引
    • CREATE [UNIQUECLUSTER] INDEX 索引名 ON 表(列)
    • DROP INDEX 索引名
  5. 常见约束
    • PRIMARY KEY 主键
    • UNIQUE 唯一
    • NOT NULL 非空
    • CHECK 检查
    • DEFAULT 默认值
    • FOREIGN KEY 外键

4.3 数据查询 (DQL) — SELECT

基本格式:

SELECT [ALL|DISTINCT] 列名/表达式
FROM 表名
[WHERE 条件]
[GROUP BY 列名 [HAVING 条件]]
[ORDER BY 列名 ASC|DESC];

功能

  • 投影查询:选列
  • 选择查询:WHERE 条件
  • 排序:ORDER BY
  • 聚合函数:COUNT, SUM, AVG, MAX, MIN(只能用于 SELECT/HAVING,不可在 WHERE)
  • 分组:GROUP BY … HAVING
  • 连接查询:内连接、自然连接、外连接(LEFT/RIGHT OUTER JOIN)
  • 嵌套查询:子查询,可分相关子查询与非相关子查询
    • IN, EXISTS, ANY, ALL

4.4 数据更新 (DML)

  • 插入
    INSERT INTO 表名 (列名1, …) VALUES (值1, …);
  • 修改
    UPDATE 表名 SET 列=值 … WHERE 条件;
  • 删除
    DELETE FROM 表名 WHERE 条件;

4.5 视图 (VIEW)

  • 创建
    CREATE VIEW 视图名 AS SELECT … [WITH CHECK OPTION];
  • 删除
    DROP VIEW 视图名;
  • 更新限制
    • 单表视图,且不含聚合、DISTINCT、GROUP BY、子查询时可更新。
    • 否则视图不可更新。
  • 作用
    • 简化查询
    • 提高安全性(限制用户访问范围)
    • 逻辑独立性(隐藏底层结构变化)
    • 聚焦用户关心数据

对比分析

  • WHERE vs HAVING
    • WHERE:过滤,在分组前执行。
    • HAVING:过滤,在 GROUP BY 后执行。
  • DELETE vs DROP vs TRUNCATE
    • DELETE:删除表中数据(结构仍在)。
    • DROP:删除整个表结构(定义和数据都没了)。
    • TRUNCATE(本书没细讲,扩展):删除表中所有行但保留结构。
  • 主键 vs 唯一约束
    • PRIMARY KEY:唯一且非空。
    • UNIQUE:唯一但可空。
  • 视图可更新条件:不能包含聚合函数、DISTINCT、GROUP BY、连接、多表,否则不可更新。

概念阐释

  1. WHERE 子句中不能用聚合函数
    因为聚合是对组运算,只能在 SELECT 或 HAVING 出现。
  2. HAVING 和 WHERE 的区别
    HAVING 是对分组结果筛选,WHERE 是对原始行筛选。
  3. DELETE FROM employee 与 DROP TABLE employee 区别
    • DELETE:只删数据,不删表结构。
    • DROP:删表定义+数据,彻底没了。
  4. Primary Key 与 Unique 区别
    • Primary Key:唯一 + 非空。
    • Unique:允许空值。
  5. SQL 的非过程化特征
    SQL 描述要什么结果,而不关心如何实现。
  6. GROUP BY 子句不能单独和 HAVING 用
    必须先 GROUP BY,再 HAVING;HAVING 不能脱离分组。
  7. 题里 “在视图上定义新表” 的操作是否可能?
    不可以,视图是虚拟表,不能在上面再定义基本表。
本文由作者按照 CC BY-NC 4.0. 进行授权
...

Comments

评论区

碎片之中

正在加载中...