CRUD:Create(创建)、Retrieve(读取)、Update(更新)、Delete(删除)
Create

查看约束

在插入时,如果表没有指定属性,那么就必须根据表的约束进行全列的插入

如果指定表的插入属性,就必须根据属性内容进行逐个插入。
由于主键和唯一键冲突导致插入失败进行更新
INSERT ...
ON DUPLICATE KEY UPDATE(注意)
column = value [, column = value] ...


replace

主键或唯一键没有冲突就直接插入,有冲突就先删除旧信息再进行插入。
Retrieve
select * from 表名
是全列查询,也可以指定列查询
SELECT column [AS] alias_name [...] FROM table_name;还可以为查询结果指定别名。

对结果进行去重

WHERE条件

|-----|-------------------------------|
| 运算符 | 说明 |
| AND | 多个条件必须都为 TRUE(1),结果才是 TRUE(1) |
| OR | 任意一个条件为 TRUE(1), 结果为 TRUE(1) |
| NOT | 条件为 TRUE(1),结果为 FALSE(0) |
SELECT * FROM table_name WHERE column IN (value1, value2, ...);
案例
英语成绩不及格的

语文成绩在【80,90】之间

数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩

姓孙的同学 及 孙某同学

语文成绩好于英语成绩的同学

总分在 200 分以下的同学
别名不能用于where的条件判定

语文成绩 > 80 并且不姓孙的同学

孙某同学,否则要求总成绩 > 200 并且 语文成绩 < 数学成绩 并且 英语成绩 > 80

结果排序

注意:没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序
同学及数学成绩,按数学成绩升序显示

不标注默认是升序
查询同学及总分,由高到低

注意: ORDER BY 中可以使用别名,WHERE条件中不可以适用别名。
筛选分页结果
LIMIT
SELECT 字段 FROM 表名 LIMIT 条数 (只读取前N条)
SELECT 字段 FROM 表名 LIMIT 偏移量,条数
LIMIT m,n :跳过m条,往后取n条

Update
更新数据
UPDATE table_name SET column = expr [, column = expr ...] [WHERE ...] [ORDER BY ...] [LIMIT ...]
案例
将孙悟空同学的数学成绩变更为 80 分

将总成绩倒数前三的 3 位同学的数学成绩加上 30 分

Delete
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]


截断表
TRUNCATE [TABLE] table_name
-
只能对整表操作,不能像 DELETE 一样针对部分数据操作;
-
实际上 MySQL 不对数据操作,所以比 DELETE 更快,但是TRUNCATE在删除数据的时候,并不经过真正的事 物,所以无法回滚
-
会重置 AUTO_INCREMENT 项

CREATE TABLE no_duplicate_table LIKE duplicate_table;

聚合函数
|----------------------------|-----------------|----|---|---|---|
| 函数 | 说明 | 示例 | | | |
| `COUNT(*)` | 统计行数(包含 NULL) | `SELECT COUNT(*) FROM users;` ||| |
| `COUNT(column)` | 统计某列非 NULL 的行数 | `SELECT COUNT(email) FROM users;` ||||
| `COUNT(DISTINCT column)` | 统计去重后的非 NULL 行数 | `SELECT COUNT(DISTINCT city) FROM users;` ||||
| `SUM(column)` | 求和(忽略 NULL) | `SELECT SUM(salary) FROM employees;` ||||
| `AVG(column)` | 平均值(忽略 NULL) | `SELECT AVG(score) FROM students;` ||||
| `MAX(column)` | 最大值 | `SELECT MAX(price) FROM products;` ||||
| `MIN(column)` | 最小值 | `SELECT MIN(age) FROM users;` ||| |
统计班级共有多少同学

count()可以添加许多属性加入括号中
统计数学成绩总分

统计平均总分

返回 > 200分以上的总分平均分

GROUP BY 是 SQL 中用于将数据按指定列分组,并对每组分别进行聚合计算的核心子句。