(本文在更新中)
一些很棒的进阶教程
- SQL 进阶技巧https://zhuanlan.zhihu.com/p/139856374
包含内容:SQL 的书写规范、SQL 的一些进阶使用技巧(巧用 CASE WHEN 进行统计&更新、巧用 HAVING 子句、自连接、巧用 COALESCE 函数)、SQL 性能优化技巧等。 - mysql视频实战教程在线学习-数据库-蛙课网https://www.wkcto.com/courses.html?list=mysql
一些刷题时思考的点
最近想精通一下SQL,但是本科老师教的比较浅,而且已经遗忘了大半,所以用今天一天时间刷完了SQL的基础教程,这里推荐一个好用的自学SQL网站(可以实时运行):自学SQL网。同时也做了一点点练习LeetCode
本篇将学习过程中比较重要的点记录下来,供之后的学习参考。
-
注意书写顺序。典型的正确顺序如下:
SELECT DISTINCT column, AGG_FUNC(column_or_expression) FROM mytable JOIN another_table ON mytable.column = another_table.column WHERE constraint_expression GROUP BY column HAVING constraint_expression ORDER BY column ASC/DESC LIMIT count OFFSET COUNT;
-
如果你不用
GROUP BY
语法, 简单的WHERE
就够用了. -
如果要按照两个维度分开统计,在
GROUP BY
里面放两个就可以。例如:select role,count(*),(case when Building is not null then 1 else 0 end) bn from employees group by role,bn
-
查询执行顺序:
FROM
和JOIN
;WHERE
;GROUP BY
;HAVING
;SELECT
;DISTINCT
如果数据行有重复DISTINCT 将负责排重. -
ORDER BY
在结果集确定的情况下,ORDER BY 对结果做排序。因为SELECT中的表达式已经执行完了。此时可以用AS别名. -
LIMIT / OFFSET
最后 LIMIT 和 OFFSET 从排序的结果中截取部分数据. -
选取第几高的数据时,如果需要显示空值,可以使用
IFNULL(...,NULL)
-
LIMIT的参数不能是式子,如果需要改变某个值可以使用语句
SET N = N-1;
如果需要更新表,则可以配合UPDATE
使用。例如:UPDATE Salaries SET salary = CASE WHEN salary >= 10000 THEN salary * 0.9 WHEN salary < 10000 THEN salary * 1.2 ELSE salary END;