SQL全套增删改查+库表操作语法精讲文档(期末完整版)
前置说明1. SQL语句大小写不敏感关键字建议大写规范易读、适配考试2. 符号说明[] 为可选内容 为自定义必填内容3. SQL三大核心分类DDL数据定义语言操作数据库、数据表结构CREATE/ALTER/DROPDML数据操纵语言操作表中真实数据INSERT/UPDATE/DELETEDQL数据查询语言查询数据使用频率最高SELECT4. 全文基于学生-课程-选课标准数据库案例所有语法均可直接运行。一、 DDL 数据库结构操作库、表1. 数据库创建与使用标准语法CREATE DATABASE [IF NOT EXISTS] 数据库名;USE 数据库名;语法解析IF NOT EXISTS容错语法数据库不存在才创建避免重复创建报错实操必加。实操案例CREATE DATABASE IF NOT EXISTS stu_db;USE stu_db;2. 数据表创建核心必考完整标准语法Plain TextCREATE TABLE 表名 (字段名1 数据类型 [列级约束],字段名2 数据类型 [列级约束][表级约束]);常用数据类型CHAR(n)定长字符长度固定适合学号、手机号、编号VARCHAR(n)变长字符节省空间适合姓名、文本INT整型用于年龄、分数、数量FLOAT浮点型用于学分、小数数值五大核心约束完整性考点PRIMARY KEY主键唯一非空一张表仅一个主键NOT NULL非空约束字段必须赋值不能为空DEFAULT 值默认值不赋值时自动填充默认内容UNIQUE唯一约束字段值不可重复允许空值FOREIGN KEY外键关联主表主键保证参照完整性实操案例三张核心表学生表 studentPlain TextCREATE TABLE student (stu_id CHAR(10) PRIMARY KEY,stu_name VARCHAR(20) NOT NULL,stu_sex CHAR(2) DEFAULT 男,stu_age INT,phone CHAR(11) UNIQUE);课程表 coursePlain TextCREATE TABLE course (course_id CHAR(6) PRIMARY KEY,course_name VARCHAR(30) NOT NULL,credit FLOAT);选课表 sc复合主键 双外键重难点Plain TextCREATE TABLE sc (stu_id CHAR(10),course_id CHAR(6),score INT,PRIMARY KEY (stu_id, course_id),FOREIGN KEY (stu_id) REFERENCES student(stu_id),FOREIGN KEY (course_id) REFERENCES course(course_id));核心解析多字段联合主键必须写为表级约束外键用于绑定两张表杜绝无效数据。3. 修改数据表结构 ALTER TABLE1新增字段语法ALTER TABLE 表名 ADD 字段名 数据类型;案例ALTER TABLE student ADD class VARCHAR(20);2修改字段数据类型语法ALTER TABLE 表名 MODIFY 字段名 新数据类型;案例ALTER TABLE student MODIFY class CHAR(15);3删除字段拓展语法ALTER TABLE 表名 DROP COLUMN 字段名;二、 DML 数据增删改操作1. 数据插入 INSERT标准语法推荐Plain TextINSERT INTO 表名(字段1,字段2,...)VALUES (值1,值2,...),(值1,值2,...);支持单行、多行批量插入字符类型必须加单引号数字无需引号。实操案例Plain TextINSERT INTO student(stu_id, stu_name, stu_sex, stu_age, phone)VALUES(2026001, 张三, 男, 19, 13800138001),(2026002, 李四, 女, 18, 13800138002),(2026003, 王五, 男, 19, 13800138003),(2026004, 赵六, 女, 20, 13800138004);INSERT INTO course(course_id, course_name, credit)VALUES(C001, 数据库原理, 3.5),(C002, 计算机网络, 3.0),(C003, C语言程序设计, 4.0);INSERT INTO sc(stu_id, course_id, score)VALUES(2026001, C001, 88),(2026001, C002, 76),(2026002, C001, 92),(2026003, C003, 80),(2026004, C002, 85);2. 数据修改 UPDATE标准语法Plain TextUPDATE 表名SET 字段1新值,字段2新值WHERE 筛选条件;重中之重必须加 WHERE 条件否则修改全表数据实操案例修改指定学生课程分数UPDATE sc SET score 90 WHERE stu_id2026001 AND course_idC001;修改学生年龄UPDATE student SET stu_age 19 WHERE stu_name 李四;3. 数据删除 DELETE标准语法DELETE FROM 表名 WHERE 筛选条件;重中之重省略 WHERE 会清空整张表数据表结构保留实操案例DELETE FROM sc WHERE stu_id 2026004;三、 DQL 数据查询SQL 核心、考试重点通用完整查询语法Plain TextSELECT [DISTINCT] 字段列表 [AS 别名]FROM 表名 [别名]WHERE 行筛选条件GROUP BY 分组字段HAVING 分组后筛选条件ORDER BY 排序字段 [ASC/DESC];执行顺序FROM → WHERE → GROUP BY → HAVING → ORDER BY → SELECT1. 基础查询查询所有列SELECT * FROM student;查询指定列SELECT stu_name, stu_age FROM student;2. 条件查询 WHERE1等值查询SELECT * FROM student WHERE stu_age 19;2模糊查询 LIKE通配符% 任意多个字符_ 单个字符案例查姓张学生SELECT * FROM student WHERE stu_name LIKE 张%;3范围查询 BETWEEN AND包含上下边界SELECT * FROM sc WHERE score BETWEEN 70 AND 90;4多条件查询 AND/ORAND同时满足SELECT * FROM student WHERE stu_sex女 AND stu_age18;3. 排序查询 ORDER BYASC 升序默认、DESC 降序案例分数降序SELECT * FROM sc ORDER BY score DESC;4. 聚合函数统计五大常用函数COUNT(统计数量)、MAX(最大值)、MIN(最小值)、AVG(平均值)、SUM(求和)统计人数SELECT COUNT(*) AS 学生总人数 FROM student;分数统计SELECT MAX(score) 最高分, MIN(score) 最低分, AVG(score) 平均分 FROM sc;5. 分组查询 GROUP BY作用按字段分组配合聚合函数统计每组数据案例统计每门课平均分Plain TextSELECT course_id, AVG(score) 课程平均分FROM scGROUP BY course_id;6. 分组后筛选 HAVINGWHERE分组前筛选不能用聚合函数HAVING分组后筛选专用聚合函数案例筛选平均分大于80的课程Plain TextSELECT course_id, AVG(score) 课程平均分FROM scGROUP BY course_idHAVING AVG(score) 80;7. 多表联查等值连接核心通过主键外键关联多表可起表别名简化代码Plain TextSELECT s.stu_name, c.course_name, sc.scoreFROM student s, course c, scWHERE s.stu_id sc.stu_id AND c.course_id sc.course_id;8. 嵌套子查询执行规则由内向外执行内层结果作为外层条件案例查询选了数据库原理的学生姓名Plain TextSELECT stu_name FROM studentWHERE stu_id IN (SELECT stu_id FROM sc WHERE course_id (SELECT course_id FROM course WHERE course_name 数据库原理));四、 SQL 高频易错必背注意点考试必考1. DELETE 和 DROP 区别DELETE仅删除表数据保留表结构DROP TABLE删除整张表结构数据全部清空2. WHERE 和 HAVING 区别WHERE 过滤原始数据分组前不支持聚合函数HAVING 过滤分组结果分组后仅用于聚合筛选3. 主键与唯一约束区别主键非空且唯一一张表只能一个唯一约束仅唯一允许空值一张表可多个4. CHAR 与 VARCHAR 区别CHAR 定长、查询快、占用空间固定VARCHAR 变长、省空间、查询稍慢5. UPDATE/DELETE 高危规则严禁省略 WHERE 条件会导致全表数据更新/清空造成数据事故6. 外键核心作用保证多表参照完整性禁止插入主表不存在的关联数据7. 复合主键规则多字段联合主键必须使用表级约束不能写在字段后|注文档部分内容由 AI 生成附例包括增删改查等例子CREATE DATABASE IF NOT EXISTS stu_db;USE stu_db;CREATE TABLE student (stu_id CHAR(10) PRIMARY KEY,stu_name VARCHAR(20) NOT NULL,stu_sex CHAR(2) DEFAULT 男,stu_age INT,phone CHAR(11) UNIQUE);CREATE TABLE course (course_id CHAR(6) PRIMARY KEY,course_name VARCHAR(30) NOT NULL,credit FLOAT);CREATE TABLE sc (stu_id CHAR(10),course_id CHAR(6),score INT,PRIMARY KEY (stu_id, course_id),FOREIGN KEY (stu_id) REFERENCES student(stu_id),FOREIGN KEY (course_id) REFERENCES course(course_id));INSERT INTO student(stu_id, stu_name, stu_sex, stu_age, phone)VALUES(2026001, 张三, 男, 19, 13800138001),(2026002, 李四, 女, 18, 13800138002),(2026003, 王五, 男, 19, 13800138003),(2026004, 赵六, 女, 20, 13800138004);INSERT INTO course(course_id, course_name, credit)VALUES(C001, 数据库原理, 3.5),(C002, 计算机网络, 3.0),(C003, C语言程序设计, 4.0);INSERT INTO sc(stu_id, course_id, score)VALUES(2026001, C001, 88),(2026001, C002, 76),(2026002, C001, 92),(2026003, C003, 80),(2026004, C002, 85);SELECT * FROM student;SELECT stu_name, stu_age FROM student;SELECT * FROM student WHERE stu_age 19;SELECT * FROM student WHERE stu_name LIKE 张%;SELECT * FROM sc WHERE score BETWEEN 70 AND 90;SELECT * FROM student WHERE stu_sex女 AND stu_age18;SELECT * FROM sc ORDER BY score DESC;SELECT COUNT(*) AS 学生总人数 FROM student;SELECT MAX(score) 最高分, MIN(score) 最低分, AVG(score) 平均分 FROM sc;SELECT course_id, AVG(score) 课程平均分FROM scGROUP BY course_id;SELECT course_id, AVG(score) 课程平均分FROM scGROUP BY course_idHAVING AVG(score) 80;SELECT s.stu_name, c.course_name, sc.scoreFROM student s, course c, scWHERE s.stu_id sc.stu_id AND c.course_id sc.course_id;SELECT stu_name FROM studentWHERE stu_id IN (SELECT stu_id FROM sc WHERE course_id (SELECT course_id FROM course WHERE course_name 数据库原理));UPDATE sc SET score 90 WHERE stu_id2026001 AND course_idC001;UPDATE student SET stu_age 19 WHERE stu_name 李四;DELETE FROM sc WHERE stu_id 2026004;ALTER TABLE student ADD class VARCHAR(20);ALTER TABLE student MODIFY class CHAR(15);