目录
增删改查是 SQL 中最基本也是最重要的操作,基本上所有的 SQL 代码都离不开增删改查
增:insert
删:delete
改:update
查:select
SQL 代码中是不区分大小写的,大写或小写都一样
提前建表以供插入
CREATE TABLE student (
id INT,
sn INT comment '学号',
name VARCHAR(20) comment '姓名',
qq_mail VARCHAR(20) comment 'QQ邮箱'
);
insert into 表名(字段名) values
(插入的值);
全字段插入分为全字段单行插入和全字段批量插入,单行插入一次插入一行,批量插入一次插入多行
单行插入
INSERT INTO student VALUES (99, 9999, '猪八戒', NULL);
批量插入
INSERT INTO student VALUES
(101, 10001, "孙悟空", '11111'),
(101, 10002, '沙悟净', 'hello');
指定字段同样有指定字段单行插入和指定字段批量插入
单行插入
INSERT INTO student (sn, id, name, qq_mail) VALUES
(102, 20001, '曹孟德', null);
批量插入
INSERT INTO student (sn, id, name, qq_mail) VALUES
(104, 200011, '123', null),
(103, 2001, 'sss', 'nnn');
需要注意的是:指定字段插入时,缺少的字段会填入默认值,如果该字段没有默认值则会报错
提前建表并且插入测试数据以供查询,
CREATE TABLE exam_result (
id INT,
name VARCHAR(20),
chinese DECIMAL(3,1),
math DECIMAL(3,1),
english DECIMAL(3,1)
);
-- 插入测试数据
INSERT INTO exam_result (id,name, chinese, math, english) VALUES
(1,'唐三藏', 67, 98, 56),
(2,'孙悟空', 87.5, 78, 77),
(3,'猪悟能', 88, 98, 90),
(4,'曹孟德', 82, 84, 67),
(5,'刘玄德', 55.5, 85, 45),
(6,'孙权', 70, 73, 78.5),
(7,'宋公明', 75, 65, 30);
select 字段名 from 表名;
select * from exam_result;
select id, name, english from exam_result;
常数
select 之后直接跟常数在某个表中查询,查询到的结果就是一列这个常数,表中原本有多少行数据,就会查询到多少行这个常数
select 后也可跟常数的运算表达式,查询到的结果就是常数的运算结果
-- 带常数的select
select 103 from exam_result;
-- 带常数运算的select
SELECT 1 + 1 FROM exam_result;
有字段参与计算的表达式
有字段参与计算的 select 查询后的结果就是表中字段数值的运算结果
SELECT id, name, id * 10 FROM exam_result;
SELECT id, name, chinese + math + english from exam_result;
带 bool 表达式的 select
带 bool 表达式的 select 查询到的结果是 bool 表达式为 true 时的结果
SQL 中 1 为 true ,0 为 false
select id, id > 5 from exam_result;
select id, id != 2 from exam_result;
与、或、非 and、or、not
select id, id > 1 and id < 5 from exam_result;
select id, id > 1 or id < 5 from exam_result;
select id, not id = 1 from exam_result;
关于 null
SQL 中只要有 null 参与的表达式,此表达式的结果仍为 null
select 1 + null from exam_result;
别名就是在一个表达式后面用 as 加上一个赋给该表达式的名字,as 可省略,并且别名会替换查询结果的名字
-- 以下两条是一样的
SELECT id, name, chinese + math + english AS total from exam_result;
SELECT id, name, chinese + math + english total from exam_result;
distinct 在代码中位于字段之前,表示对该字段进行去重,即将所有重复的字段值合并
select distinct math from exam_result;
SQL 中的函数有很多,此处演示几个常用的函数
count()
count 函数是用来统计该字段中数值的个数,即该字段在表中有多少行数据此函数返回的值就是几
select count(math) from exam_result;
avg()
该函数返回一个字段中所有数值的平均值,该字段中的元素必须是数值元素
select avg(math) from exam_result;
min()
该函数返回一个字段中所有数值中的最小值,该字段中的元素必须是数值元素
select min(math) from exam_result;
其他函数可以去MySQL 函数看看
order by 表示查询到的结果以某个字段为依据排序
-- 以 id 升序排序,asc 可省略
select * from exam_result order by id asc;
-- 以 id 降序排序
select * from exam_result order by id desc;
用到的关键字:offset、limit
offset:本页从哪一条开始
limit:本页限制显示多少条
这两个关键字搭配 order by 来使用
-- 第一页从 第 0 个 id 开始,显示两条
select * from exam_result order by id limit 2 offset 0;
-- 第二页从 第 2 个 id 开始,显示两条
select * from exam_result order by id limit 2 offset 2;
where 后跟条件表达式,用于筛选查询后的结果
如果 where 后跟的表达式为永真的,那么将会查询到表中所有结果
-- 查询 chinese < 60 的所有结果
select * from exam_result where chinese < 60;
关键字:like 只能用于字符串类型
%:表示任意字符
-- 查询 name = 孙某
select * from exam_result where name like '孙%';
-- 查询 name = 某孙
select * from exam_result where name like '%孙';
-- 查询name = 某孙某
select * from exam_result where name like '%孙%';
代码格式
update 表明 set 字段名 = '修改的值' where 条件
演示
更新前
update exam_result set name = 123 where id = 1;
更新后
代码格式
delete from 表名 where 条件;
-- 删除 id = 1 在表中的那一行
delete from exam_result where id = 1;
代码格式
-- 清空表中的数据
truncate 表名;