1MySQL表的增删改查
CRUD :
Create, 新增数据
Retrieve查询数据
Update修改数据
Delete删除数据
新增:
新建一张表:
drop table if exists student;
create table student(
id int,
sn int comment '学号',
name varchar(20) comment '姓名',
qq_email varchar(20) comment 'qq邮箱'
);
单行数据,全列插入
insert into student values(100,1000,'唐三藏',null);
insert into student values(101,1001,'孙悟空','1111');
多行数据,指定列插入
insert into student (id,sn,name) values(102,1002,'曹孟德'),(103,1003,'孙仲谋');
查询:
SELECT
[DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT
– 创建考试成绩表
DROP TABLE IF EXISTS exam_result;
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.5,90),
(4,'曹孟德',82,84,67),
(5,'刘玄德', 55.5, 85, 45),
(6,'孙权', 70, 73, 78.5),
(7,'宋公明',75,65,30);
全列查询:
select *from exam_result;
指定列查询:
select id,name,english from exam_result;
查询字段为表达式:
–表达式不包含字段
select id,name,10 from exam_result;
–表达式包含一个字段
select id,name,english+10 from exam_result;
–表达式含有多个字段
select id,name,english+chinese+math from exam_result;
别名:表头的列名=别名
select id,name,chinese+math+english 总分 from exam_result;
去重:
select distinct math from exam_result;
排序:ORDER BY
– ASC
为升序(从小到大)
– DESC
为降序(从大到小)
– 默认为 ASC
–查询姓名,语文和数学,按语文排序
select id,chinese,math from exam_result order by chinese;
select id,chinese,math from exam_result order by chinese desc;
- 没有
ORDER BY
子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序 -
NULL
数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面
使用表达式及别名排序:
– 查询同学及总分,由高到低
SELECT name, chinese + english + math FROM exam_result
ORDER BY chinese + english+math desc;
SELECT name, chinese + english + math total FROM exam_result
ORDER BY total DESC;
可以对多个字段进行排序,排序优先级随书写顺序
–查询同学各门成绩,依次按数学降序,英语升序,语文升序的方式显示
select name,math,english,chinese from exam_result order by math desc,english ,chinese;
条件查询:where
比较运算符LIKE
:模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符
-- % 匹配任意多个(包括 0 个)字符
SELECT name FROM exam_result WHERE name LIKE '孙%';-- 匹配到孙悟空、孙权
-- _ 匹配严格的一个任意字符
SELECT name FROM exam_result WHERE name LIKE '孙_';
BETWEEN a0 AND a1
:范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)IN(option,...)
如果是option 中的任意一个,返回 TRUE(1)
-- 查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
SELECT name, math FROM exam_result WHERE math IN (58, 59, 98, 99);
-- 使用 OR 也可以实现
SELECT name, math FROM exam_result WHERE math = 58 OR math = 59 OR math
= 98 OR math = 99;
NULL 的查询:IS [NOT] NULL
逻辑运算符and
,or
,not
分页查询:LIMIT
修改
-- 将孙悟空同学的数学成绩变更为 80 分
UPDATE exam_result SET math = 80 WHERE name = '孙悟空';
-- 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分
UPDATE exam_result SET math = 60, chinese = 70 WHERE name = '曹孟德';
-- 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分
UPDATE exam_result SET math = math + 30 ORDER BY chinese + math + english LIMIT
3;
-- 将所有同学的语文成绩更新为原来的 2 倍
UPDATE exam_result SET chinese = chinese * 2;
删除
语法:
DELETE FROM table_name [WHERE...] [ORDER BY...] [LIMIT...]
例如:
-- 删除孙悟空同学的考试成绩
DELETE FROM exam_result WHERE name ='孙悟空';
– 删除整张表数据
DROP TABLE IF EXISTS for_delete;
CREATE TABLE for_delete (
id INT,
name VARCHAR(20)
);
-- 插入测试数剧
INSERT INTO for_delete(name) VALUES('A'),('B'),('C');
-- 删除整张表数据
DELETE FROM for_delete;