SQL 极简核心(1)核心内容
主要详细记录下重要知识点的概念和用法。
(更详细部分:已经单独写了文章)

1. 聚合函数
条件聚合函数
2. 字符串函数
大小写
LOWER(str)UPPER(str)
拼接函数
CONCAT(str1, str2, ...)GROUP_CONCAT(col)
切片函数
-
LEFT(str, n)、RIGHT(str, n)SELECT LEFT('isql', 2) # return is -
SUBSTRING(str, index, n)SELECT SUBSTRING('isql', 1, 1) # return 1 ,注意是从1开始而不是0 SELECT SUBSTRING('isql', -2, 2) # return ql
长度函数
-
LENGTH(str)SELECT LENGTH('sq,l') # return 4
替换函数
-
REPLACE(str, target_str, result_str)SELECT REPLACE('sq,l', ',', '') # return sql
3. GROUP BY
什么时候用

如果结果如上图所示,那么就应该使用GROUP BY 吗?
不,GROUP BY 一般与聚合函数一起使用。
如何用
下面的代码为什么会发生bug?
SELECT a, b, SUM(c)
FROM table
GROUP BY b
大白话讲,因为 b 和 c 都由多行变为了一行,系统并不知道按照什么规则将相应的多行a数据变为相应的一行数据,可能是返回第一条数据,具体的返回策略随平台也不尽相同。
如果聚合函数是MAX()、MIN()也是同理,因为可能纯在多条最值数据。
所以,如果使用GROUP BY,对SELECT的限制是,字段要么是聚合对象,要么是分组对象。
解决办法是在子查询中使用聚合函数和GROUP BY,或者使用窗口函数。
具体可以参考题目:SQL67 牛客每个人最近的登录日期(二)
4. JOIN
FROM table_a a # 省略 AS,实际指 table_a AS a
JOIN table_b b
JOIN的本质是列合并,以上代码将表格b中的字段加入到表格a中,形成了一个全新的表格;
(可以朴素地理解为,想要同时使用两张表格的字段则需要用到JOIN)
而INNERJOIN 和 LEFT JOIN的区别是,ON之后过滤条件的的针对对象不同:
INNER JOIN :列合并 + 使用ON对两个表行过滤
LEFT JOIN:;列合并 + 使用ON对右表行过滤(对左表不影响)
5. 窗口函数
有空要总结一下
Oracle开发之:窗口函数 (转)
常见的窗口函数:
聚合窗口函数
- 求和:SUM()
- 计数:COUNT()
排序窗口函数 - RANK()
- DENSE_RANK()
- ROW_NUMBER()
最值窗口函数 - MA()
- MIN()
6. 条件语句
- CASE WHEN
- IF
其他
EXISTS
-
EXISTS(W3schools)
The EXISTS operator is used to test for the existence of any record in a subquery. The EXISTS operator returns TRUE if the subquery returns one or more records. -
基本型:
SELECT c1 FROM t2 WHERE EXISTS (SELECT c2 FROM c2 WHERE condition); -
本质:谓词
EXISTS的本质是谓词,即返回真值,因此一般用在WHERE语句后引导一个子查询,整体作为外表的判断条件。 -
原理和用法
其用法根据子查询不同而不同,当子查询中的WHERE condition与外表字段有关系时(即关联子查询,一般是这种情况),则执行时会遍历循环外表中的每一条数据,将其放到内表中的条件去查询,若存在则将其加入结果集(点击)。 -
EXISTS 与 IN 的区别
IN是把外表和内表作hash连接;而EXISTS是对外表作loop循环,每次loop循环再对内表进行查询- 一般认为
EXISTS的效率比IN的效率高
(例题可以参考牛客SQL57)

本文深入讲解SQL中的关键概念,包括聚合函数如SUM()、COUNT(),字符串函数如LOWER()、UPPER(),GROUP BY的使用场景与注意事项,JOIN操作如INNER JOIN和LEFT JOIN的差异,以及窗口函数的基础应用。通过实例解析,帮助读者掌握SQL查询的高效技巧。

被折叠的 条评论
为什么被折叠?



