Database / SQL
MySQL 与 SQL 基础(三)
记录 MySQL 启动方式、SQL 分类、DDL、DML、DQL、DCL 和表结构操作。
DML
添加数据
指定字段
INSERT INTO 表名(字段1, 字段2, ...) VALUES (值1, 值2, ...);
没有数据插入的字段在该行会变成NULL
全部字段
INSERT INTO 表名 VALUES(值1, 值2, ...);
批量添加数据
INSERT INTO 表名(字段1, 字段2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), ..., (值1, 值2, ...);
INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), ..., (值1, 值2, ...);
注意事项
- 字符串和日期类型要用单引号 ‘ ’ 包含
- 插入的数据大小要符合数据类型的范围
修改数据
UPDATE 表名 SET 字段1 = 值1, 字段2 = 值2, ... [WHERE 条件];
条件限定了修改的行,若不提供条件,则会修改整张表的数据
删除数据
DELETE FROM 表名 [WHERE 条件]
删除数据只能直接删除某一行,若不填条件则会删除整张表的数据
如果想单独删除该行某一字段的数据,应使用UPDATE
from后同时引入多张表,但依旧一次只能删除一个target_table,语法:
delete target_table from table1, table2 [where]
DQL
DQL语法
SELECT
字段列表
FROM
表名字段
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后的条件列表
ORDER BY
排序字段列表
LIMIT
分页参数
基础查询
查询多个字段
SELECT 字段1, 字段2, ... FROM 表名;
SELECT * FROM 表名;
*通配符,代表所有
设置别名
SELECT 字段1 [AS 别名1], 字段2 [AS 别名2], ... FROM 表名;
SELECT 字段1 [别名1], 字段2[别名2], ... FROM 表名;
在查询的同时给字段设置别名,以别名显示,增强可读性,AS可以被省略
若别名没有单引号,则在本语句中代替原名,在本语句中只能使用别名,不能使用原名
有单引号则无影响,只会在select返回结果时显示的表中代替原名
去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
DISTINCT关键字,查询时省略重复的值
字段列表其实就是 字段1, 字段2, …
当有多个字段时,只有字段列表中所有字段的值都重复的行才会被省略
转义
SELECT * FROM 表名 WHERE name LIKE '/_张三' ESCAPE '/'
/ 之后的 _ 不作为通配符
条件查询
SELECT 字段列表 FROM 表名 WHERE 条件列表;
条件运算符与字段名搭配使用
条件运算符:
| 比较运算符 | 功能 |
|---|---|
| > | 大于 |
| >= | 大于等于 |
| < | 小于 |
| <= | 小于等于 |
| = | 等于 |
| <> 或 != | 不等于 |
| BETWEEN … AND … | 在某个区间内(含最小、最大值) |
| IN(…) | 符合in之后的列表中任意一个值 |
| LIKE 占位符 | 模糊匹配( _ 匹配单个字符,% 匹配任意个字符) |
| IS NULL | 是NULL |
| 逻辑运算符 | 功能 |
|---|---|
| AND 或 && | 与 |
| OR 或 || | 或 |
| NOT 或 ! | 非 |
例:
SELECT * FROM 表名 WHERE 字段名 < 值;
SELECT * FROM 表名 WHERE 字段名 BETWEEN 值1 AND 值2;
SELECT * FROM 表名 WHERE 字段名 IN (值1, 值2, ...);
SELECT * FROM 表名 WHERE 字段名 IN (值1, 值2, ...);
查找两个字符的字符串
SELECT * FROM 表名 WHERE 字段名 LIKE '_ _';
查找以X结尾的字符串
SELECT * FROM 表名 WHERE 字段名 LIKE '%X';
聚合查询(聚合函数)
将一列数据作为一个整体,进行纵向计算,属于窗口函数的一种
NULL值不参与所有聚合函数的运算
常见的聚合函数:
| 函数 | 功能 |
|---|---|
| count | 统计数量 |
| max | 最大值 |
| min | 最小值 |
| avg | 平均值 |
| sum | 求和 |
语法
SELECT 聚合函数(字段) FROM 表名;
相比之前的查询,查询的是特定字段或所有字段
聚合查询则是将查询字段换成查询聚合函数的返回值
使用聚合函数时,必须也只能传入一个字段,除了GROUP_CONCAT()函数
特别注意,count函数不会统计值为NULL的行,并且可以直接传入 * 计算表的行数
其它地方和查询字段一样,也可以使用条件查询
聚合函数不能用在WHERE后面,但WHERE后面可以出现聚合函数的子查询