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 BYASC 为升序(从小到大)
DESC 为降序(从大到小)
– 默认为 ASC –查询姓名,语文和数学,按语文排序

select id,chinese,math from exam_result order by chinese;
select id,chinese,math from exam_result order by chinese desc;
  1. 没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序
  2. 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 逻辑运算符
andornot 分页查询: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;