?增
添加单条信息:
INSERT INTO 表名(列名1,列名2,.....) VALUES (值1,值2,...);
添加时可指定添加字段,不指定时默认添加全部字段,添加字段数据要与 values 一致
添加多条信息:
INSERT INTO 表名(列名1,列名2,.....) VALUES
(值1,值2,...),
(值1,值2,...),
(值1,值2,...);
?删
delete : 删除表中的行
DELETE FROM 表名 WHERE 条件;
当删除语句不带 where 条件时默认删除表中所有数据(慎用),当表中有自增字段时,删除末尾字段重新添加自增字段时并不会在上一个字段基础上 +1 而是在删除字段基础上 +1,自增列不会被置为初始值。
drop : 删除表,删除数据库,删除内容和定义,释放空间
#删除表
DROP TABLE 表名;
#删除数据库
DROP DATABASE 数据库名;
当表中存在外键约束且为主表时,无法删除,删除表或数据库为永久删除且不可逆(慎重)。
truncate:删除内容,保留表的定义,保留表结构
TRUNCATE TABLE 表名;
当表中存在外键约束且为主表时,无法清空表,自增列值置为初始值。
删除表中全部数据时 delete 与 truncate比较:
1、truncate table 在功能上与不带 WHERE 子句的 delete语句相同:二者均删除表中的全部行。
2、truncate 比 delete速度快,且使用的系统和事务日志资源少。
3、truncate 操作后的表比Delete操作后的表要快得多。
?改
UPDATE 表名 SET 列名 = 新值 WHERE 条件;
新值可为表达式,当没有 where条件时,则修改全表内容(慎重)
?查(重点)
#查询列,可多条,逗号间隔
select 列名1,列名2
#从指定表查询
from 表名
#查询条件,附加
where 条件
#分组查询
group by 列名
#分组条件过滤
having 条件表达式
#查询结果排序
order by 列名
#查询结果分页
limit 起始位置,每页数据数量
①起别名
意义:增强查询结果可读性
#起别名方式一
SELECT 列名1 别名1,列名2 别名2 FROM 表名3 别名3;
#起别名方式二
SELECT 列名1 AS 别名1,列名2 AS 别名2 FROM 表名3 AS 别名3;
②查询时列可以进行运算
SELECT 列名1*10,列名2+10 FROM 表名;
③设置常量列并设置列名
SELECT name AS '姓名','郑州一中' AS '学校';
④去重查询
SELECT DISTINCT 列名 FROM 表名;
⑤条件查询
#条件运算符:=、>、<、>=、<=
#算术运算符:+、—、*、/、%
#逻辑运算符:AND(&&)、OR(||)、NOT(!)
⑥范围查询
适用于:范围内值在一段连续范围内(等价于AND)
#范围查询方式一 字段取值在集合(值1,值2)中
SELECT * FROM 表名
WHERE 字段名 BETWEEN 值1 AND 值2
适用于:范围内值不连续(等价于OR)
#范围查询方式二
SELECT * FROM 表名
WHERE 字段名 IN (值1,值2,.....)
⑦模糊查询
正则表达式(REGEXP):
SELECT * FROM 表名 WHERE REGEXP '正则表达式';
like:
#匹配规则
# %:任意数据
# _:单个数据
# 值a%:以值a开头
# %值a:以值a结尾
# %值a%:中间有值a的
# 值a_:以值a开头的两个数值
# _值a:以值a结尾的两个数值
SELECT * FROM 表名 WHERE 字段名 LIKE '匹配规则'
⑧查询结果排序
#排序条件
#DESC:指定字段降序
#ASC:指定字段升序,默认
#单字段排序
SELECT * FROM 表名 ORDER BY 字段名(任意数据类型) 排序条件;
#多字段排序:先根据靠前字段排序,当靠前字段相同时,再根据后面字段排序
SELECT * FROM 表名 ORDER BY 字段1 排序条件,字段2 排序条件;
⑨分页查询(结合排序使用)
意义:提升性能,减小内存压力,增强查询结果可观性
#起始位置省略默认为从 0 开始
SELECT * FROM 表名
ORDER BY 排序规则
LIMIT 起始位置,每页数据数量
⑩函数
#汇总函数(聚合函数):针对多条数据计算出一个结果
# count(*/列名): 统计记录数,统计非空值,统计唯一值
# max(列名): 查询某列中的最大值
# min(列名): 查询某列中的最小值
# sum(列名): 针对列所有值求和
# avg(列名): 针对列所有值求平均
# 聚合函数可以单独使用,也可以与分组一起使用(重点)
①①分组查询
将某一列中相同数据当成一组
GROUP BY:
SELECT 分组字段名 FROM 表名 GROUP BY 分组字段名
#举例:查询某年级各班人数
SELECT class AS '班级',COUNT(*) AS '人数'
FROM student
GROUP BY class;
HAVING :
SELECT 分组字段名 FROM 表名 GROUP BY 分组字段名 HAVING 过滤条件
#举例:查询某年级各班男生人数且班级号以3结尾的。
SELECT class ,COUNT(*),ssex
FROM student
WHERE ssex='男'
GROUP BY class
HAVING class LIKE '%3';
①②行转列:

转为列:
SELECT sname AS '姓名',
CASE WHEN course='语文' THEN score END AS '语文',
CASE WHEN course='数学' THEN score END AS '数学',
CASE WHEN course='英语' THEN score END AS '英语'
FROM student ;

汇总:
SELECT sname AS '姓名',
MAX(CASE WHEN course='语文' THEN score END) AS '语文',
MAX(CASE WHEN course='数学' THEN score END) AS '数学',
MAX(CASE WHEN course='英语' THEN score END) AS '英语'
FROM student
GROUP BY sname;

①③多表查询:
内连接等值查询:匹配两表中相匹配的信息。
WHERE:
SELECT * FROM 表一 WHERE 表一.值=表二.值;
INNER(可省略) JOIN ON:
SELECT * FROM 表一 INNER JOIN 表二 ON 表一.值=表二.值。
外连接:
左外连接(left [outer] join):返回左表全部内容,右表中不匹配的值用null填充
#返回左表全部内容
SELECT * FROM 左表 LEFT JOIN 右表 ON 联系条件;
右外连接(right [outer] join):返回右表全部内容,左表中不匹配的值用null填充
#返回右表全部内容
SELECT * FROM 左表 RIGHT JOIN 右表 ON 联系条件;
①④交叉连接:返回两表信息笛卡尔积
select * from 左表 cross join 右表;