好文推荐:
21个MySQL表设计的经验准则
后端程序员必备:书写高质量SQL的30条建议
我们为什么要分库分表?
从0.742秒到0.006秒,MySQL百万数据深分页优化实战
2020年MySQL数据库50面试题目含答案
MyBatis 表连接查询写法|三种对应关系
1. 将 user 表中所有数据的 create_time 创建时间,修改成当前系统时间
UPDATE user SET create_time = NOW();
2. 将 user 表中所有数据的 create_time 创建时间和 last_edit_time 最新修改时间,修改成当前系统时间
UPDATE user SET create_time = NOW() AND last_edit_time = NOW();
3. 删除 user 表中 id 在 100 ~ 500 之间的所有数据
DELETE FROM user WHERE id between 100 and 500;
4. 查询两天前的日期
SELECT DATE_SUB(CURDATE(), INTERVAL 2 DAY) AS '两天前的日期';
5. MySQL行转列。写一条 SQL 语句,将图一的数据变成图二的形式
SELECT stu_id, stu_name,
MAX(CASE WHEN course_name = '语文' THEN course_grade END) AS 语文,
MAX(CASE WHEN course_name = '数学' THEN course_grade END) AS 数学,
MAX(CASE WHEN course_name = '英语' THEN course_grade END) AS 英语
FROM grade
GROUP BY stu_id, stu_name;
6. MySQL列转行。写一条 SQL 语句,将图二的数据变成图一的形式
SELECT stu_id, stu_name, '语文' AS course, 语文 AS grade FROM student
UNION ALL
SELECT stu_id, stu_name, '数学' AS course, 数学 AS grade FROM student
UNION ALL
SELECT stu_id, stu_name, '英语' AS course, 英语 AS grade FROM student
ORDER BY stu_id;
7. 将图一中的数据,插入到图二的表中,插入效果如图三所示
注意:插入语句不一定要使用 VALUES 关键字的,可以使用 SELECT 查询的结果作为数据源,并将其插入到另一张表中。这种方法在对数据进行复杂处理时特别有用。
INSERT INTO student(stu_id, stu_name, 语文, 数学, 英语)
SELECT stu_id,
stu_name,
AVG(CASE WHEN course_name='语文' THEN course_grade END) AS 语文,
AVG(CASE WHEN course_name='数学' THEN course_grade END) AS 数学,
AVG(CASE WHEN course_name='英语' THEN course_grade END) AS 英语
FROM grade
GROUP BY stu_id, stu_name;