MySQL的增删改查
1.新增(Create)
CREATE TABLE student (
id INT,
sn INT comment '学号',
name VARCHAR(20) comment '姓名',
qq_mail VARCHAR(20) comment 'QQ邮箱'
)
2.1 单行数据 + 全列插入
插入两条记录,value_list 数量必须和定义表的列的数量及顺序一致
INSERT INTO student VALUES (100, 10000, '小米', NULL);
INSERT INTO student VALUES (101, 10001, '李华', '11111');
2.2 多行数据 + 指定列插入
插入两条记录,value_list 数量必须和指定列数量及顺序一致
INSERT INTO student (id, sn, name) VALUES
(102, 20001, '曹孟德'),
(103, 20002, '孙仲谋');
注意:values 一定是和insert 搭配一起使用的。
3. 查询(Retrieve)
3.1 全列查询
SELECT * FROM 表名;
3.2 指定列查询
指定列的顺序不需要按定义表的顺序来,列从表中选取需要查询的
select 列名,列名 from 表名;
SELECT id, name, english FROM exam_result;
3.3 查询字段为表达式
(对列指定的操作)
SELECT id, name, chinese + math + english FROM exam_result;
3.4别名( 由 as引导)
SELECT id, name, chinese + math + english as result FROM exam_result;
3.5去重DISTINCT
对某列重复出现的数据进行删除,即去重。
-- 98 分重复了
SELECT math FROM exam_result;
+--------+
| math |
+--------+
98 |
78 |
98 |
84 |
65 |
)-- 去重结果
SELECT DISTINCT math FROM exam_result;
+--------+
| math |
+--------+
98 |
78 |
84 |
65 |
+--------+
3.6排序:ORDER BY
ASC 为升序(从小到大)
DESC 为降序(从大到小)
默认为 ASC升序
--查询同学及总分,由高到低
SELECT name, chinese + english + math FROM exam_result
ORDER BY chinese + english + math DESC;
注意:1. 没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个(未定义的)顺序
2. NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面
3.7 条件查询:WHERE
运算符 | 说明 |
---|---|
= | 等于,NULL 不安全, NULL = NULL 的结果是 NULL |
<=> | 等于,NULL 安全, NULL <=> NULL 的结果是 TRUE(1) |
!=, <> | 不等于 |
BETWEEN a0 AND | 范围匹配,[a0, a1], a0 <= value <= a1 |
IN (option, …) | 如果是 option 中的任意一个,返回 TRUE(1) 离散 |
is not null | 不是null |
LIke | 模糊匹配 % 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符 |
逻辑运算符:
and | 要满足所有的条件 |
---|---|
or | 满足 其中一个条件即可 |
not | 条件为 TRUE(1),结果为 FALSE(0) |
注意:
1. WHERE条件可以使用表达式,但不能使用别名,否则会运行错误。
2. AND的优先级高于OR,在同时使用时,需要使用小括号()括起来优先执行的部分
案例:
基本查询:-- 查询英语不及格的同学及英语成绩 ( < 60 )
SELECT name, english FROM exam_result WHERE english < 60;-- 查询语文成绩好于英语成绩的同学
SELECT name, chinese, english FROM exam_result WHERE chinese > english;
AND与OR:
-- 查询语文成绩大于80分,且英语成绩大于80分的同学
SELECT * FROM exam_result WHERE chinese > 80 and english > 80;
-- 查询语文成绩大于80分,或英语成绩大于80分的同学
SELECT * FROM exam_result WHERE chinese > 80 or english > 80;-- 观察AND 和 OR 的优先级:
SELECT * FROM exam_result WHERE chinese > 80 or math>70 and english > 70;
SELECT * FROM exam_result WHERE (chinese > 80 or math>70) and english > 70;
模糊查询:LIKE
- % 匹配任意多个(包括 0 个)字符
SELECT name FROM exam_result WHERE name LIKE '孙%';
-- 匹配到孙悟空、孙权
--------------------------------------------------------
-- _ 匹配严格的一个任意字符
SELECT name FROM exam_result WHERE name LIKE '孙_';
-- 匹配到孙权
4. 修改(Update)
-- 将小孙同学的数学成绩变更为 80 分
UPDATE exam_result SET math = 80 WHERE name = '小孙';
5. 删除(Delete)
语法:
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
案例:
--删除小马同学的考试成绩
delete from exam_result where name='小马';