MySQL详解5.DML语法
点击进入我的博客
1 增
INSERT INTO tb_name (col_name1, col_name2) VALUES ('val1', 'val1'),('val2', 'val2');
2 删
DELETE FROM table_name [WHER];
- 如果没有WHERE子语句,MySQL表中的所有记录将被删除。
3 改
UPDATE tb_name SET col_name1 = 'new_val1', col_name2 = 'new_val2' [WHERE];
4 查
4.1 SELECT语法
SELECT col_name FROM tb_name [WHERE] [GROUP BY] [HVAING] [ORDER BY] [LIMIT]
- 查询语句中你可以使用一个或者多个表,表之间使用逗号
,
分割 - SELECT 命令可以读取一条或者多条记录。
- 可以使用星号
*
来代替其他字段,SELECT语句会返回表的所有字段数据。 - 可以使用 WHERE 语句来包含任何条件。
- 可以使用 ORDER BY 语句来设定返回记录的排序规则。
- 可以使用 LIMIT 属性来设定返回的记录数。
- 可以通过 OFFSET 指定 SELECT 语句开始查询的数据偏移量,默认情况下偏移量为0。
4.2 WHERE子语句
- 基本语法:
WHERE 列名 运算符 值
- 可以使用AND表示逻辑与
- 可以使用OR表示逻辑或
- 可以使用NOT表示逻辑非
运算符 | 描述 | 示例 |
---|---|---|
= | 等于 | WHERE col_name = 'val' |
<> 或 != | 不等于 | WHERE col_name != 'val' |
> | 大于 | WHERE col_name > '10' |
< | 小于 | WHERE col_name < '10' |
>= | 大于等于 | WHERE col_name >= '10' |
<= | 小于等于 | WHERE col_name <= '10' |
BETWEEN | 在某个范围内(是闭区间) | WHERE col_name BETWEEN 0 AND 10 |
IN | 表示在某个特定值内 | WHERE col_name IN ('val1', 'val2') |
LIKE | 搜索某种模式(% 匹配多个字符,_ 匹配一个字符) |
WHERE col_name LIKE '%val%' |
IS 和 IS NOT | 判断是否为NULL | WHERE col_name IS NULL |
4.3 GROUP BY 子语句
GROUP BY对数据集进行分组
基本语法
GROUP BY col_name1, col_name2
聚集函数
GROUP BY一般需要配合聚合函数来用,分组之后你可以:count() 计数、sum() 求和、avg() 平均数、max() 最大值、min() 最小值。
4.4 HAVING 子语句
HAVING 是分组 GROUP BY 后的筛选条件,对分组后的数据组内再筛选。
HAVING 子句限制的是组,而不是行。
三种子语句
当同时含有 WHERE 子句、GROUP BY 子句 、HAVING 子句及聚集函数时,执行顺序如下:
- 执行WHERE子句查找符合条件的数据;
- 使用GROUP BY子句对数据进行分组。
- 对GROUP BY子句形成的组运行聚集函数计算每一组的值;
- 最后用having 子句去掉不符合条件的组。
4.5 ORDER BY 子语句
ORDER BY 用于对结果集进行排序
基本语法
ORDER BY col_name1 [ASC|DESC], col_name2 [ASC|DESC]
- ASC是升序,也是默认第排序方式
- DESC是降序
4.6 LIMIT 子语句
LIMIT子句是一个选择语句块的最后一个子句,它选取了行的一个子集,来限定中间结果的输出行数。
基本语法
-
LIMIT M
:返回前M条数据 -
LIMIT N [, M]
:返回从第N+1条到第N+M条之间的数据 -
LIMIT N OFFSET M
:返回从第M+1到第M+N之间第数据
5 UNION
UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中,SELECT 的列名及数量必须一致。
SELECT col_name1, col_name2 FROM tb_name1 [WHERE] UNION SELECT col_name1, col_name2 FROM tb_name2 [WHERE]
6 连接
6.1 内连接
内连接内连接就是取多张表的交集。
关键字:INNER JOIN
、JOIN
、,
SELECT * FROM articles, books WHERE articles.id = books.id;
SELECT * FROM articles INNER JOIN books ON articles.id = books.id;
SELECT * FROM articles INNER JOIN books WHERE articles.id = books.id;
6.2 左连接
左连接左连接会读取左边数据表的全部数据,即使右边数据表没有对应数据。如果两个表中数据有相同部分,只显示一个。
关键字:
LEFT OUTER JOIN
、LEFT JOIN
SELECT * FROM articles LEFT JOIN books ON articles.id = books.id;
SELECT * FROM articles LEFT OUTER JOIN books ON articles.id = books.id;
6.3 右连接
右连接右连接会读取右边数据表的全部数据,即使左边数据表没有对应数据。如果两个表中数据有相同部分,只显示一个。
关键字:
RIGHT OUTER JOIN
、RIGHT JOIN
SELECT * FROM articles RIGHT JOIN books ON articles.id = books.id;
SELECT * FROM articles RIGHT OUTER JOIN books ON articles.id = books.id;