SQL 表的基本操作 数据库增删改查(CRUD)
核心内容:INSERT新增、SELECT查询、UPDATE修改、DELETE删除、多条件筛选、两种清空表区别
前置条件:已创建 StudentDataBase 数据库、Students 学生表
考试重点:带列名/省略列名插入、条件查询、多字段更新、DELETE与TRUNCATE区别
一、切换操作数据库
use StudentDataBase
go
二、INSERT 新增数据(四种写法)
2.1 写法1:指定全部列插入(规范推荐)
手动写明对应字段,顺序可自定义,可读性最高,不易出错
--完整指定列名插入数据
insert into Students(StudentName,Gernder,Birthday,StudentIDCard,Age,Phone,StudentAddress,ClassId)
values('吴亦凡','男','2020-10-1',123434343434343343,14,'1212','加拿大',1)
insert into Students(StudentName,Gernder,Birthday,StudentIDCard,Age,Phone,StudentAddress,ClassId)
values('罗志祥','男','2020-10-1',123434343434343343,14,'1212','加拿大',1)
insert into Students(StudentName,Gernder,Birthday,StudentIDCard,Age,Phone,StudentAddress,ClassId)
values('李易峰','男','2020-10-1',123434343434343343,14,'1212','加拿大',1)
2.2 写法2:指定部分列插入
省略允许为空的字段(本例省略StudentAddress),仅赋值必填字段
insert into Students(StudentName,Gernder,Birthday,StudentIDCard,Age,Phone,ClassId)
values('李易峰','男','2020-10-1',123434343434343343,14,'1212',1)
2.3 写法3:省略列名插入
不写列名,必须严格按照表字段顺序赋值,且不可省略字段,适合快速测试
--省略列名:严格匹配表结构全部字段顺序
insert into Students values('张启山','男','2020-10-1',123434343434343343,14,'1212','加拿大',1)
2.4 新增核心考点
-
自增列StudentId(identity) 无需手动赋值,数据库自动生成
-
带NOT NULL约束的字段,必须赋值,否则报错
-
省略列名插入,字段顺序、数量必须和建表结构完全一致
三、SELECT 查询数据(高频考点)
3.1 查询整张表所有数据、所有列
-- * 代表所有列
select * from Students
3.2 指定列查询(按需查询,效率更高)
--只查询姓名、地址、班级编号
select StudentName,StudentAddress,ClassId from Students
3.3 单条件等值查询
--查询年龄=14的学生
select StudentName,StudentAddress,ClassId,Age from Students where Age = 14
3.4 不等值查询
--查询年龄不等于14的学生
select StudentName,StudentAddress,ClassId,Age from Students where Age != 14
3.5 多条件 AND 联合查询(并且)
--条件1:年龄13~20之间
select StudentName,StudentAddress,ClassId,Age from Students where Age>=13 and Age<20
--条件1:年龄>=13 AND 条件2:性别为男
select StudentName,StudentAddress,ClassId,Age from Students where Age>=13 and Gernder='男'
四、UPDATE 更新数据(重点:防止全表更新)
4.1 危险写法:无条件更新(更新整张表)
无WHERE条件,修改表中所有数据,工作/考试严禁随意使用
--将所有学生性别全部改为女
update Students set Gernder = '女'
4.2 单条件、单列更新
--指定学生编号,只修改姓名
update Students set StudentName = '李白' where StudentId = 1000
4.3 单条件、多列更新
一次更新多个字段,逗号分隔字段
--同时修改姓名、年龄
update Students set StudentName = '杜甫', Age = 20 where StudentId = 1001
4.4 更新核心注意事项
-
UPDATE 必须搭配 WHERE 条件,否则更新全表数据
-
多字段更新,字段之间用逗号分隔,不能加and
-
优先使用主键(StudentId)作为更新条件,精准定位数据
五、DELETE / TRUNCATE 删除数据(必考区别)
5.1 条件删除:删除单条/部分数据
--删除指定编号的学生数据
delete from Students where StudentId = 1010
5.2 DELETE 清空全表(不重置自增标识)
--清空所有数据,自增列继续递增
--delete from Students
5.3 TRUNCATE 清空全表(重置自增标识)
--清空整张表数据、速度更快、重置自增标识列
--truncate table Students
六、DELETE 和 TRUNCATE 终极区别(简答题满分)
| 对比项 | DELETE | TRUNCATE |
|---|---|---|
| 删除范围 | 支持条件删除/全表删除 | 只能清空整张表 |
| 自增列 | 不重置,继续递增 | 重置,恢复初始值 |
| 执行速度 | 慢,记录日志 | 极快,几乎不记录日志 |
| 事务回滚 | 支持回滚 | 不支持回滚 |
七、CRUD 语法速记模板
--新增
insert into 表名(字段1,字段2) values(值1,值2)
--查询
select 字段列表/* from 表名 where 条件
--修改
update 表名 set 字段=值,字段2=值2 where 条件
--删除
delete from 表名 where 条件
八、易错踩坑汇总
-
新增字符串、日期类型值,必须加单引号,数字无需单引号
-
UPDATE 无条件会更新全表,考试极易扣分
-
省略列名插入,字段数量、顺序必须和表结构完全一致
-
多条件查询用AND,多字段更新用逗号,语法不能混淆
SQL 进阶语法详解(标识列插入、模糊查询、Union、变量、运算、别名)
本节核心考点:IDENTITY_INSERT 手动插入自增列、Like模糊查询、IN / NOT IN、BETWEEN区间、字段别名、Union All合并结果集、SQL变量、算术运算、字符串拼接
适配表结构:First(Id(自增),StuName,StuAge,StuSex)
一、自增标识列手动插入(重难点)
1.1 普通插入(无法指定自增ID)
--普通插入:自增列不需要写,数据库自动生成Id
insert into First values ('旺仔小馒头',20,'男')
1.2 强制手动指定自增ID(必考语法)
默认自增列(IDENTITY)不允许手动赋值,如需自定义ID,必须开启 IDENTITY_INSERT
--开启标识列手动插入权限
set IDENTITY_INSERT First ON
--开启后:必须【写字段列表】,可以手动指定Id
insert into First(Id,StuName,StuAge,StuSex) values (7, '旺仔小馒头',20,'男')
--用完必须关闭,否则后续自动自增失效
set identity_insert First OFF
铁律: 1、ON状态必须手写全部字段 2、操作完毕必须OFF关闭 3、一张表同一时间只能开启一张表的IDENTITY_INSERT
二、基础查询
--查询整张表所有数据
select * from First
三、模糊查询 LIKE(通配符考点)
3.1 开头匹配:旺%
--查询【旺】字开头的数据
select * from First where StuName like '旺%'
3.2 结尾匹配:%头
--查询【头】字结尾的数据
select * from First where StuName like '%头'
通配符口诀
-
%:匹配任意多个字符(包含0个)
-
_:匹配单个字符
四、IN / NOT IN 固定集合查询
4.1 IN:匹配集合内任意值
--查询姓名在指定集合内的数据
select * from First where StuName in('旺仔小馒头1','旺仔小馒慢')
4.2 NOT IN:排除集合内数据
--查询姓名不在该集合的数据
select * from First where StuName not in('旺仔小馒头1','旺仔小馒慢')
五、UPDATE 条件更新
--主键精准更新:Id=4 的学生改名
update First set StuName = '罗止痒' where Id = 4
六、BETWEEN AND 区间查询
闭区间:包含左右边界值
--查询Id 3~5 区间数据
select StuName from First where Id between 3 and 5
七、查询字段别名 AS(结果改名)
仅修改展示列名,不改变数据库真实字段名
--字段别名:中文展示
select StuName as 学生姓名,StuAge as 学生年龄 from First where Id = 4
as 可以省略,直接写别名
八、UNION ALL 结果集合并
多张查询结果竖向拼接,允许重复数据、不校验去重、速度快
--自定义多行结果集
select '罗志痒',20
union all
select '旺仔小馒头',20
union all
select '旺仔小馒头1',20
Union 与 UnionAll 区别: Union:去重、慢 Union All:不去重、快(考试优先推荐)
九、SQL 算术运算
--运算并别名展示
select 1-1 as result
select 1+1 as result
--where条件支持运算表达式
select * from First where Id = 10-5
SQL支持:+ - * / % 运算,可直接写在条件、查询字段中
十、自定义变量 DECLARE
SQL局部变量定义、赋值、运算、打印
--1.定义int类型变量 @a
declare @a int;
--2.赋值方式1:select赋值
select @a=100;
--3.复合运算赋值
set @a-=100; --自减
set @a+=100; --自增
set @a= @a +100;
--4.控制台打印输出
print @a;
变量标识:@变量名 是SQL局部变量固定格式
十一、字符串拼接
--多个字符串拼接为一个字段展示
select 'abc'+'def' as newString
SQL中字符串使用 + 拼接,数值使用 + 求和
十二、本节所有语法考点汇总(背诵)
-
IDENTITY_INSERT:ON开启手动自增插入、必须写字段、用完必须OFF
-
模糊查询:%匹配任意字符,前缀/后缀模糊匹配
-
IN/NOT IN:固定多值匹配、排除多值
-
BETWEEN AND:数值区间闭区间查询
-
AS别名:仅修改展示列名
-
UNION ALL:竖向合并结果集,不去重
-
变量:declare定义、@标识变量、print输出
-
字符串拼接:+号拼接文本