2026/5/21 11:37:39
网站建设
项目流程
掌握商务网站建设内容,重庆茶叶网站建设,如何做网站的维护工作,平台网站建设哪家有目录SQL核心语法总结#xff1a;从基础操作到高级窗口函数一、数据插入#xff1a;INSERT IGNORE INTO REPLACE INTO二、字符串处理函数1. 基础长度与替换2. 字符串截取#xff08;1#xff09;通用截取#xff1a;SUBSTRING#xff08;2#xff09;定向截取…目录SQL核心语法总结从基础操作到高级窗口函数一、数据插入INSERT IGNORE INTO REPLACE INTO二、字符串处理函数1. 基础长度与替换2. 字符串截取1通用截取SUBSTRING2定向截取LEFT/RIGHT三、条件判断CASE表达式1. 简单CASE表达式匹配字段值2. 搜索CASE表达式更灵活匹配条件四、存在性查询EXISTS/NOT EXISTS基本语法五、高级分析窗口函数OVER()1. 基本语法2. 三大核心组件3. 常见窗口函数分类1聚合窗口函数2排名窗口函数3取值窗口函数4. 窗口函数经典场景1累计占比计算2移动窗口计算如7天移动平均3获取每组最新记录六、易混淆点SUM() OVER(ORDER BY) vs SUM() GROUP BY ORDER BY七、补充GROUP_CONCAT() 语法注意总结SQL核心语法总结从基础操作到高级窗口函数SQL作为数据处理的核心语言掌握其常用语法和高级特性是数据分析、开发的必备技能。本文将系统梳理SQL高频语法涵盖数据插入、字符串处理、条件判断、存在性查询、窗口函数等核心知识点结合示例帮你快速理解和应用。一、数据插入INSERT IGNORE INTO REPLACE INTO在数据插入场景中针对“重复数据”的处理有两种常用语法核心差异如下语法逻辑INSERT IGNORE INTO插入数据时若记录已存在主键/唯一索引冲突则忽略不存在则正常插入REPLACE INTO插入数据时若记录已存在则先删除原有记录再插入新记录不存在则正常插入二、字符串处理函数SQL提供丰富的字符串操作函数以下是高频使用的几个1. 基础长度与替换LENGTH(string)获取字符串的长度REPLACE(string, old_value, new_value)替换字符串内容示例REPLACE(col, ,, )将字段中的英文逗号替换为空格2. 字符串截取1通用截取SUBSTRING-- 两种标准语法SUBSTRING(string,start,length)SUBSTRING(stringFROMstartFORlength)2定向截取LEFT/RIGHT-- 从左侧提取指定数量字符LEFT(string,number_of_chars)-- 从右侧提取指定数量字符RIGHT(string,number_of_chars)三、条件判断CASE表达式CASE表达式是SQL中的条件判断语句类比编程语言的if-else/switch-case分两种语法形式1. 简单CASE表达式匹配字段值CASEcolumn_nameWHENvalue1THENresult1WHENvalue2THENresult2...ELSEdefault_resultEND2. 搜索CASE表达式更灵活匹配条件CASEWHENcondition1THENresult1WHENcondition2THENresult2...ELSEdefault_resultEND示例根据分数分级SELECTscore,CASEWHENscore90THEN优秀WHENscore80THEN良好ELSE及格ENDASgradeFROMstudent;四、存在性查询EXISTS/NOT EXISTSEXISTS是逻辑运算符用于检查子查询是否至少返回一行数据常用来替代IN提升查询效率尤其大数据量。基本语法-- 存在匹配结果则返回主查询数据SELECTcolumn1,column2FROMtable1WHEREEXISTS(subquery);-- 无匹配结果则返回主查询数据SELECTcolumn1,column2FROMtable1WHERENOTEXISTS(subquery);示例查询未关联部门的员工SELECT*FROMemployeesWHERENOTEXISTS(SELECTemp_noFROMdept_empWHEREdept_emp.emp_noemployees.emp_no);五、高级分析窗口函数OVER()OVER()是窗口函数的核心用于在一组行窗口上执行计算且保留原始行数据区别于GROUP BY的汇总折叠是SQL高级分析的核心工具。1. 基本语法聚合函数/窗口函数OVER([PARTITIONBY分区字段]-- 按字段分组组内独立计算[ORDERBY排序字段]-- 窗口内行的排序规则[ROWS/RANGE 框架子句]-- 定义窗口的具体行范围)2. 三大核心组件组件作用PARTITION BY分区将数据按指定字段分组每个分组独立计算类比GROUP BY但不折叠行ORDER BY排序确定窗口内行的顺序用于累计计算、排名等ROWS/RANGE窗口框架限定计算的行范围如“最近3行”“前N行到当前行”3. 常见窗口函数分类1聚合窗口函数基于窗口计算聚合值保留原始行-- 示例计算每个部门的平均薪资保留员工明细SELECTname,department,salary,AVG(salary)OVER(PARTITIONBYdepartment)ASdept_avg_salaryFROMemployees;常用聚合窗口函数SUM() OVER()、AVG() OVER()、COUNT() OVER()、MAX() OVER()、MIN() OVER()。2排名窗口函数用于分组内排序核心差异如下函数名特性示例结果分数95、90、90、85ROW_NUMBER()分组内生成唯一连续行号无并列1、2、3、4RANK()并列名次重复后续名次跳号如1、2、2、41、2、2、4DENSE_RANK()并列名次重复后续名次连续如1、2、2、31、2、2、3PERCENT_RANK按公式(rank-1)/(rows-1)计算相对排名结果0~10.0、0.33、0.33、1.0CUME_DIST分组内≤当前值的行数/总行数结果0~10.25、0.75、0.75、1.0示例薪资排名SELECTemp_name,salary,ROW_NUMBER()OVER(ORDERBYsalaryDESC)ASrow_num,RANK()OVER(ORDERBYsalaryDESC)ASrankFROMemployees;3取值窗口函数用于获取窗口内指定位置的行数据LAG(column, n)获取当前行前n行的字段值LEAD(column, n)获取当前行后n行的字段值FIRST_VALUE(column)窗口内第一个值LAST_VALUE(column)窗口内最后一个值示例对比每日销售额与前一日SELECTdate,sales,LAG(sales,1)OVER(ORDERBYdate)ASprev_day_sales,sales-LAG(sales,1)OVER(ORDERBYdate)ASdaily_changeFROMdaily_sales;4. 窗口函数经典场景1累计占比计算SELECTdate,sales,SUM(sales)OVER(ORDERBYdate)ASrunning_total,-- 累计销售额ROUND(100.0*SUM(sales)OVER(ORDERBYdate)/SUM(sales)OVER(),2)AScum_percentage-- 累计占比FROMdaily_sales;2移动窗口计算如7天移动平均SELECTdate,sales,AVG(sales)OVER(ORDERBYdateROWSBETWEEN6PRECEDINGANDCURRENTROW-- 包含当前行及前6行)ASmoving_avg_7dFROMdaily_sales;3获取每组最新记录-- 示例获取每个用户最后一次登录的客户端信息SELECTu_n,c_n,dateFROM(SELECTu.nameasu_n,c.nameasc_n,l.date,row_number()over(partitionbyu.idorderbydatedesc)asrk-- 按用户分区按时间降序排名FROMlogin ljoinuseruonl.user_idu.idjoinclient conc.idl.client_id)sWHERErk1-- 取排名1最新的记录ORDERBYu_n;六、易混淆点SUM() OVER(ORDER BY) vs SUM() GROUP BY ORDER BY初学者常混淆累计求和与分组求和核心差异如下特性SUM() OVER(ORDER BY date)SUM(sales) GROUP BY date ORDER BY date返回行数原始行数保留明细分组行数仅汇总行计算逻辑累计求和运行总和分组求和单组独立值结果示例100、250、450累计100、150、200每日单独值适用场景趋势分析、累计占比分组汇总、单维度统计七、补充GROUP_CONCAT() 语法注意MySQL中使用GROUP_CONCAT()时别名尽量避免直接使用引号部分版本/配置会报错优先使用无引号或反引号包裹别名。总结数据插入优先根据“重复数据处理逻辑”选择INSERT IGNORE INTO或REPLACE INTO字符串处理掌握LENGTH/REPLACE/SUBSTRING/LEFT/RIGHT即可覆盖大部分场景条件判断用CASE表达式灵活处理多分支逻辑存在性查询优先用EXISTS替代IN提升大数据量查询效率窗口函数OVER()是高级分析核心掌握PARTITION BY/ORDER BY/ROWS三大组件可实现累计、排名、移动计算等复杂分析区分SUM() OVER(ORDER BY)累计与GROUP BY分组汇总的核心差异避免用错场景。掌握以上语法可覆盖从基础数据操作到高级数据分析的绝大部分SQL使用场景建议结合实际业务场景多练习加深理解。