数据库系统概论|SQL 速通

蝶儿导读
本文系统梳理了SQL语言的核心操作,涵盖增删改查四类基本语法,重点解析SELECT查询中的条件筛选、分组聚合、多表连接与子查询等难点。文章区分DML与DDL语句,强调WHERE与HAVING差异,并提供可套用的完整语法模板。同时提醒INSERT、UPDATE、DELETE操作的风险及工程实践中的注意事项,适用于数据库初学者期末复习与实际应用参考。
— 此摘要由蝶儿创作,她也可能会犯错。

以下内容由深度学习程序修改或创作,可能存在谬误、争议,请注意辨别。

马上期末考试了,请 ChatGPT 出手整理了一下 SQL 语句速通合集:

下面按数据库课程 + 实际工程都通用的方式,系统、严谨地把 SQL 中的 增(INSERT)删(DELETE)改(UPDATE)查(SELECT) 全部情况拆解说明。
我会先给出分类与语义,再给出典型与边界用法,最后给你一份尽可能完整、可直接套用的 SQL 模板总表


一、总体框架(先建立全局认知)

SQL 对关系表(Relation,关系型数据表)的基本操作,本质上只有四类:

操作英文本质
SELECT产生结果集(不改变原表)
INSERT向表中加入元组(行)
UPDATE修改已有元组的属性值
DELETE移除元组
  • DDL(CREATE / DROP / ALTER)不属于增删改查
  • 增删改查属于 DML(Data Manipulation Language,数据操纵语言)

二、查(SELECT)——最复杂、考点最多

2.1 最基本的 SELECT

SELECT 列1, 列2
FROM 表名;
SQL

含义:

  • 从关系 表名
  • 投影(Projection)出指定列

2.2 查询全部列

SELECT *
FROM Student;
SQL

* 表示 当前表的所有属性

⚠️ 工程中不推荐滥用,但考试中合法


2.3 条件查询(WHERE)

SELECT *
FROM Student
WHERE Ssex = '男';
SQL

WHERE选择(Selection)条件,在逻辑上先于 SELECT 执行。

常见条件形式
类型示例
比较= <> < > <= >=
范围BETWEEN 60 AND 90
枚举IN ('男','女')
模式LIKE '刘__'
空值IS NULL / IS NOT NULL
逻辑AND / OR / NOT

2.4 模糊查询(LIKE)

WHERE Sname LIKE '刘%'
WHERE Sname LIKE '_明'
WHERE Sname LIKE '刘__'
SQL
  • %:任意长度字符串
  • _单个字符

2.5 排序(ORDER BY)

SELECT *
FROM Student
ORDER BY Sage DESC, Sno ASC;
SQL
  • 默认:ASC(升序)
  • DESC:降序
  • ORDER BY 永远最后执行

2.6 去重(DISTINCT)

SELECT DISTINCT Ssex
FROM Student;
SQL

去重的是:整行投影结果


2.7 聚集函数(非常重要)

常见聚集函数(Aggregate Function)
函数含义
COUNT(*)行数
COUNT(列)非 NULL 个数
SUM()求和
AVG()平均值
MAX() / MIN()最大 / 最小
SELECT COUNT(*), AVG(Sage)
FROM Student;
SQL

2.8 分组查询(GROUP BY)

SELECT Ssex, COUNT(*)
FROM Student
GROUP BY Ssex;
SQL

逻辑含义:

  • Ssex 分组
  • 每组生成一行结果

2.9 分组条件(HAVING)

SELECT Ssex, COUNT(*)
FROM Student
GROUP BY Ssex
HAVING COUNT(*) > 10;
SQL
WHERE vs HAVING(必考)
项目WHEREHAVING
作用对象原始行分组结果
是否可用聚集函数

2.10 多表查询(连接)

① 内连接(INNER JOIN)
SELECT S.Sname, C.Cname
FROM Student S
JOIN SC ON S.Sno = SC.Sno
JOIN Course C ON SC.Cno = C.Cno;
SQL

只保留匹配成功的记录。

② 外连接(LEFT / RIGHT)
SELECT *
FROM Student
LEFT JOIN SC ON Student.Sno = SC.Sno;
SQL

2.11 子查询(嵌套查询)

SELECT *
FROM Student
WHERE Sno IN (
    SELECT Sno
    FROM SC
    WHERE Grade >= 90
);
SQL

子查询可以出现在:

  • WHERE
  • FROM
  • SELECT

三、增(INSERT)——向表中加入数据

3.1 插入一行(指定列)

INSERT INTO Student (Sno, Sname, Ssex)
VALUES ('001', '刘强', '男');
SQL

最安全、最推荐写法。


3.2 插入一行(不指定列)

INSERT INTO Student
VALUES ('001', '刘强', '男', 20);
SQL

⚠️ 要求:

  • 列顺序必须完全一致
  • 实务中风险较高

3.3 插入多行

INSERT INTO Student (Sno, Sname, Ssex)
VALUES
('002','张三','男'),
('003','李四','女');
SQL

3.4 插入查询结果(非常重要)

INSERT INTO Student_Backup
SELECT *
FROM Student
WHERE Ssex = '女';
SQL

3.5 创建表并插入(SELECT INTO)

SELECT *
INTO Student_Copy
FROM Student;
SQL

四、改(UPDATE)——修改已有数据

4.1 修改所有行(危险)

UPDATE Student
SET Ssex = '男';
SQL

⚠️ 无 WHERE = 全表更新


4.2 条件修改(最常见)

UPDATE Student
SET Sage = 21
WHERE Sno = '001';
SQL

4.3 修改多个列

UPDATE Student
SET Sage = 22,
    Ssex = '女'
WHERE Sname = '刘强';
SQL

4.4 基于子查询修改

UPDATE Student
SET Sage = Sage + 1
WHERE Sno IN (
    SELECT Sno
    FROM SC
    WHERE Grade < 60
);
SQL

五、删(DELETE)——删除数据

5.1 删除全部数据(结构保留)

DELETE FROM Student;
SQL

⚠️ 表还在,只是空了


5.2 条件删除

DELETE FROM Student
WHERE Sage < 18;
SQL

5.3 子查询删除

DELETE FROM Student
WHERE Sno NOT IN (
    SELECT Sno
    FROM SC
);
SQL

5.4 DELETE vs DROP(必考)

操作DELETEDROP
删除内容表结构
是否可回滚有可能不可
表是否存在

六、终极 SQL 模板(尽可能全)

下面这个模板不是让你一次性全写,而是告诉你 SQL 的“理论完整形态”

SELECT [DISTINCT] 列1, 列2, 聚集函数
FROM 表名1
    [JOIN 表名2 ON 连接条件]
    [JOIN 表名3 ON 连接条件]
WHERE 行级条件
GROUP BY 分组列
HAVING 分组条件
ORDER BY 排序列 [ASC|DESC];
SQL

INSERT 模板

INSERT INTO 表名 (列1, 列2, ...)
VALUES (...);
SQL
INSERT INTO 表名
SELECT ...
FROM ...
WHERE ...;
SQL

UPDATE 模板

UPDATE 表名
SET 列1 = 值1,
    列2 = 值2
WHERE 条件;
SQL

DELETE 模板

DELETE FROM 表名
WHERE 条件;
SQL

七、学习建议

  • SELECT 是 SQL 的 70% 难度
  • 真正拉开水平的,是:
    • GROUP BY + HAVING
    • 子查询
    • 多表 JOIN
  • 增删改 逻辑简单但风险最高

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注