SQL 极简核心(1):核心内容(ing)

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

大白话讲,因为 bc 都由多行变为了一行,系统并不知道按照什么规则将相应的多行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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值