SQL经典实例

第1章 检索记录

  • 1.1 检索所有行和列
    • 知识点:使用SELECT *快速检索表中所有列;显式列出列名(如SELECT col1, col2)提高可读性和可控性,尤其在编程场景中更清晰。
  • 1.2 筛选行
    • 知识点:通过WHERE子句过滤符合条件的行,支持常用运算符(=、<、>等),是数据筛选的基础。
  • 1.3 查找满足多个查询条件的行
    • 知识点:使用ANDOR和括号组合多个条件,注意逻辑优先级,确保条件正确分组。
  • 1.4 筛选列
    • 知识点:在SELECT中指定具体列,避免返回无关数据,提升查询效率,尤其在网络传输数据时重要。
  • 1.5 创建有意义的列名
    • 知识点:通过AS关键字为列设置别名(如SELECT sal AS salary),增强结果可读性,别名可用于后续引用。
  • 1.6 在WHERE子句中引用别名列
    • 知识点WHERE子句无法直接引用SELECT中的别名,需通过内嵌视图(子查询)包装查询,使外层查询可访问别名列。
  • 1.7 串联多列的值
    • 知识点:不同数据库使用不同串联方法,如DB2/Oracle/PostgreSQL用||,MySQL用CONCAT,SQL Server用+,实现多列合并。
  • 1.8 在SELECT语句里使用条件逻辑
    • 知识点:通过CASE表达式实现条件逻辑(如根据工资范围返回状态),替代传统编程语言的IF-ELSE,增强查询灵活性。
  • 1.9 限定返回行数
    • 知识点:不同数据库限制行数的语法不同,如MySQL/PostgreSQL用LIMIT,Oracle用ROWNUM,SQL Server用TOP,DB2用FETCH FIRST,用于分页或限制结果量。
  • 1.10 随机返回若干行记录
    • 知识点:结合ORDER BY与随机函数(如RAND()DBMS_RANDOM.VALUE())实现随机排序,再用行数限制语法获取随机行。
  • 1.11 查找Null值
    • 知识点:使用IS NULL判断Null值,不能用=!=,是处理缺失数据的基础。
  • 1.12 把Null值转换为实际值
    • 知识点:通过COALESCE函数(如COALESCE(comm, 0))将Null替换为指定值,或用CASE表达式实现类似逻辑,确保计算正确。
  • 1.13 查找匹配项
    • 知识点:使用LIKE配合通配符%(匹配任意字符)和_(匹配单个字符)进行模式匹配,筛选符合特定字符串模式的行。

第2章 查询结果排序

  • 2.1 以指定顺序返回查询结果
    • 知识点:通过ORDER BY子句排序,默认升序(ASC),降序用DESC,可按列名或列位置序号排序。
  • 2.2 多字段排序
    • 知识点:在ORDER BY中用逗号分隔多个字段,按顺序依次排序,支持不同字段不同排序方向。
  • 2.3 依据子串排序
    • 知识点:使用字符串函数(如SUBSTRSUBSTRING)提取子串,按子串内容排序,例如按职位最后两个字符排序。
  • 2.4 对含有字母和数字的列排序
    • 知识点:通过TRANSLATEREPLACE函数清理非目标字符,保留字母或数字部分,再进行排序,处理混合数据列。
  • 2.5 排序时对Null值的处理
    • 知识点:Oracle支持NULLS FIRST/LAST直接控制Null值位置,其他数据库通过CASE表达式标记Null值,调整其在排序中的顺序。
  • 2.6 依据条件逻辑动态调整排序项
    • 知识点:在ORDER BY中使用CASE表达式,根据条件动态选择排序字段,例如按职位类型切换排序依据。

第3章 多表查询

  • 3.1 叠加两个行集
    • 知识点:使用UNION ALL合并多个表的行(包含重复),UNION去重,要求列数和数据类型匹配。
  • 3.2 合并相关行
    • 知识点:通过内连接(INNER JOIN或隐式连接)基于共同列合并表,返回匹配行,是多表数据关联的基础。
  • 3.3 查找两个表中相同的行
    • 知识点:使用INTERSECT(DB2/PostgreSQL/Oracle)或连接查询匹配多列,获取两表交集数据。
  • 3.4 查找只存在于一个表中的数据
    • 知识点:差集运算(DB2/PostgreSQL用EXCEPT,Oracle用MINUS)或NOT INNOT EXISTS子查询,找出单表独有数据。
  • 3.5 从一个表检索与另一个表不相关的行
    • 知识点:外连接(左/右/全连接)保留主表不匹配行,过滤Null值后获取无关联数据,如查找无员工的部门。
  • 3.6 新增连接查询而不影响其他连接查询
    • 知识点:使用外连接(如LEFT JOIN)避免丢失主表数据,或标量子查询添加额外信息,确保原有结果集完整。
  • 3.7 确定两个表是否有相同的数据
    • 知识点:通过差集运算结合UNION ALL比较两表差异,或先比较行数再逐行对比,确保数据一致性。
  • 3.8 识别并消除笛卡儿积
    • 知识点:笛卡儿积由缺少连接条件导致,通过n-1个连接条件(WHEREJOIN)避免,确保结果正确。
  • 3.9 组合使用连接查询与聚合函数
    • 知识点:聚合前注意连接可能产生的重复行,用DISTINCT去重或先聚合再连接,确保统计结果准确。
  • 3.10 组合使用外连接查询与聚合函数
    • 知识点:外连接保留主表数据,聚合时处理Null值(如COALESCE),正确计算包含缺失关联数据的分组统计。
  • 3.11 从多个表中返回缺失值
    • 知识点:全外连接(FULL OUTER JOIN)结合条件过滤,同时保留两表不匹配行,如同时显示无员工的部门和无部门的员工。
  • 3.12 在运算和比较中使用Null
    • 知识点COALESCE将Null转换为有效值参与运算,避免Null导致的逻辑错误,确保比较和计算正确。

第4章 插入、更新和删除

  • 4.1 插入新记录
    • 知识点:使用INSERT INTO ... VALUES插入单行或多行,省略列名时需按顺序提供所有列值,支持批量插入。
  • 4.2 插入默认值
    • 知识点:通过DEFAULT关键字显式插入列默认值,或省略列名利用表定义的默认值,简化插入操作。
  • 4.3 使用Null覆盖默认值
    • 知识点:在VALUES中显式指定NULL,即使列有默认值也强制插入Null,控制数据输入。
  • 4.4 复制数据到另一个表
    • 知识点INSERT INTO ... SELECT将查询结果插入目标表,支持过滤条件,快速迁移数据。
  • 4.5 复制表定义
    • 知识点:DB2用CREATE TABLE ... LIKE,其他数据库用SELECT * FROM ... WHERE 1=0创建空表,复制表结构。
  • 4.6 多表插入
    • 知识点:Oracle用INSERT ALL根据条件插入多表,DB2通过UNION ALL结合表约束实现,其他数据库需分步插入。
  • 4.7 禁止插入特定列
    • 知识点:创建仅暴露允许插入列的视图,限制用户操作,通过视图权限控制数据插入范围。
  • 4.8 更新记录
    • 知识点UPDATE ... SET结合WHERE更新指定行,支持表达式计算(如加薪10%),预览结果后执行。
  • 4.9 当相关行存在时更新记录
    • 知识点:子查询INEXISTS判断关联表存在性,针对性更新,如根据奖金表更新工资。
  • 4.10 使用另一个表的数据更新记录
    • 知识点:连接两表后更新(如UPDATE ... FROM ... JOIN),或子查询提供新值,实现跨表数据同步。
  • 4.11 合并记录
    • 知识点:Oracle的MERGE语句根据匹配条件自动插入或更新,简化数据同步逻辑,其他数据库需分步操作。
  • 4.12 删除全表记录
    • 知识点DELETE FROM不带WHERE删除所有行,注意事务和性能影响,大表慎用。
  • 4.13 删除指定记录
    • 知识点DELETE ... WHERE结合条件过滤,确保精确删除,避免误删数据。
  • 4.14 删除单行记录
    • 知识点:基于主键或唯一键精确删除,确保WHERE条件唯一,避免删除多行。
  • 4.15 删除违反参照完整性的记录
    • 知识点NOT EXISTSNOT IN子查询找出无关联的孤立记录,如删除无对应部门的员工。
  • 4.16 删除重复记录
    • 知识点:按重复列分组,保留最小/最大标识的行,删除其他重复行,确保数据唯一性。
  • 4.17 删除被其他表参照的记录
    • 知识点:先处理子表依赖数据(如级联删除),或直接删除主表记录(需数据库支持外键级联),处理外键约束。

第5章 元数据查询

  • 5.1 列举模式中的表
    • 知识点:查询系统表或视图(如DB2的SYSCAT.TABLES,Oracle的ALL_TABLES,信息模式INFORMATION_SCHEMA.TABLES)获取表列表。
  • 5.2 列举字段
    • 知识点:通过系统视图获取列信息(如数据类型、位置),如DB2的SYSCAT.COLUMNS,Oracle的ALL_TAB_COLUMNS
  • 5.3 列举索引列
    • 知识点:查询索引相关系统表(如DB2的SYSCAT.INDEXES,Oracle的ALL_IND_COLUMNS),了解表的索引结构。
  • 5.4 列举约束
    • 知识点:通过系统视图获取约束信息(主键、外键、检查约束等),如SYSCAT.TABCONST(DB2)、ALL_CONSTRAINTS(Oracle)。
  • 5.5 列举非索引外键
    • 知识点:结合索引和外键系统表,筛选未建立索引的外键列,优化数据库性能。
  • 5.6 用SQL生成SQL
    • 知识点:通过字符串拼接动态生成SQL脚本(如统计行数、禁用约束),实现自动化维护任务。
  • 5.7 描述Oracle数据字典视图
    • 知识点:利用Oracle的DICTIONARYDICT_COLUMNS视图,快速了解数据字典视图的结构和用途。

第6章 字符串处理

  • 6.1 遍历字符串
    • 知识点:通过笛卡儿积生成多行,用SUBSTR逐字符提取,模拟循环处理字符串,是字符串解析的基础。
  • 6.2 嵌入引号
    • 知识点:在字符串中用两个连续引号表示单个引号(如''),处理包含引号的数据。
  • 6.3 统计字符出现的次数
    • 知识点:通过LENGTHREPLACE计算原字符串与替换后字符串的长度差,除以目标字符长度,统计出现次数。
  • 6.4 删除不想要的字符
    • 知识点TRANSLATE替换目标字符为统一符号,再用REPLACE删除,或多次REPLACE逐个删除指定字符。
  • 6.5 分离数字和字符数据
    • 知识点TRANSLATE将数字或字符转换为统一符号,REPLACE删除非目标符号,分离混合数据列。
  • 6.6 判断含有字母和数字的字符串
    • 知识点TRANSLATE将字母数字转换为单一字符,比较转换后字符串是否全由该字符组成,或用正则表达式(如MySQL的REGEXP)筛选。
  • 6.7 提取姓名的首字母
    • 知识点:通过TRANSLATEREPLACE处理非字母字符,提取首字母并拼接,处理不同格式的姓名。
  • 6.8 按照子字符串排序
    • 知识点:用SUBSTR提取子串,在ORDER BY中按子串排序,如按姓名最后两个字符排序。
  • 6.9 根据字符串里的数字排序
    • 知识点:清理非数字字符(如TRANSLATE替换为数字),转换为数值类型后排序,处理混合数字的字符串。
  • 6.10 创建分隔列表
    • 知识点:不同数据库用不同方法,如MySQL的GROUP_CONCAT,Oracle的SYS_CONNECT_BY_PATH,拼接多行数据为逗号分隔字符串。
  • 6.11 分隔数据转换为多值IN列表
    • 知识点:拆分分隔字符串为多行,转换为数值后用于IN子句,处理输入的列表数据。
  • 6.12 按字母表顺序排列字符
    • 知识点:遍历字符并排序,用聚合函数拼接,实现字符串内字符的排序。
  • 6.13 识别字符串里的数字字符
    • 知识点TRANSLATE标记数字字符,筛选包含数字的行,或提取纯数字部分,处理混合数据。
  • 6.14 提取第n个分隔子字符串
    • 知识点:利用SUBSTRING_INDEX(MySQL)、SPLIT_PART(PostgreSQL)或INSTR结合SUBSTR,按分隔符提取指定位置子串。
  • 6.15 解析IP地址
    • 知识点:按.分隔符拆分IP地址为四部分,用字符串函数提取各段数值,处理网络地址数据。

第7章 数值处理

  • 7.1 计算平均值
    • 知识点AVG函数忽略Null值,分组计算(GROUP BY)各部门平均值,处理聚合统计。
  • 7.2 查找最小值和最大值
    • 知识点MINMAX函数获取列极值,支持分组统计,忽略Null值,是基本聚合函数。
  • 7.3 求和
    • 知识点SUM函数累加数值列,支持分组(GROUP BY),忽略Null值,处理数据汇总。
  • 7.4 计算行数
    • 知识点COUNT(*)统计所有行,COUNT(col)统计非Null值行数,分组统计各部门人数。
  • 7.5 计算非Null值的个数
    • 知识点COUNT(col)自动忽略Null,直接获取有效数据行数,如统计有奖金的员工数。
  • 7.6 累计求和
    • 知识点:窗口函数SUM OVER(DB2/Oracle)或标量子查询(其他数据库),按顺序累加值,生成运行总计。
  • 7.7 计算累计乘积
    • 知识点:利用对数转换和指数运算(LN+EXP)实现累计乘积,或Oracle的MODEL子句,处理数值连乘。

后续章节(8-14章及附录)

  • 第8-14章:涵盖日期运算、日期处理、区间查询、高级查询、报表生成、层次查询等,涉及窗口函数、递归查询、数据透视等高级技术,针对不同数据库的特性提供解决方案。
  • 附录A:窗口函数简介,解释分组、聚合、分区等概念,是理解高级查询的基础。
  • 附录B:重温经典SQL问题,结合新特性(如窗口函数)提供优化方案,提升查询效率。

总结

文档通过大量实例展示了SQL在数据操作中的核心技术,从基础查询到高级聚合、字符串处理、元数据查询等,覆盖多数据库差异,强调实际应用中的最佳实践(如处理Null值、避免笛卡儿积、合理使用索引等)。每个实例结合问题、解决方案和讨论,帮助读者理解不同场景下的SQL策略,是SQL开发和优化的重要参考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/79324.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/79324.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTPcookie与session实现

1.HTTP Cookie 定义 HTTP Cookie &#xff08;也称为 Web Cookie 、浏览器 Cookie 或简称 Cookie &#xff09;是服务器发送到 用户浏览器并保存在浏览器上的一小块数据&#xff0c;它会在浏览器之后向同一服务器再次发 起请求时被携带并发送到服务器上。通常&#xff0…

【算法基础】冒泡排序算法 - JAVA

一、算法基础 1.1 什么是冒泡排序 冒泡排序是一种简单直观的比较排序算法。它重复地走访待排序的数列&#xff0c;依次比较相邻两个元素&#xff0c;如果顺序错误就交换它们&#xff0c;直到没有元素需要交换为止。 1.2 基本思想 比较相邻元素&#xff1a;从头开始&#xf…

0902Redux_状态管理-react-仿低代码平台项目

文章目录 1 Redux 概述1.1 核心概念1.2 基本组成1.3 工作流程1.4 中间件&#xff08;Middleware&#xff09;1.5 适用场景1.6 优缺点1.7 Redux Toolkit&#xff08;现代推荐&#xff09;1.8 与其他工具的对比1.9 总结 2 todoList 待办事项案例3 Redux开发者工具3.1 核心功能3.2…

《ATPL地面培训教材13:飞行原理》——第6章:阻力

翻译&#xff1a;Leweslyh&#xff1b;工具&#xff1a;Cursor & Claude 3.7&#xff1b;过程稿 第6章&#xff1a;阻力 目录 引言寄生阻力诱导阻力减少诱导阻力的方法升力对寄生阻力的影响飞机总阻力飞机总重量对总阻力的影响高度对总阻力的影响构型对总阻力的影响速度稳…

C++总结01-类型相关

一、数据存储 1.程序数据段 • 静态&#xff08;全局&#xff09;数据区&#xff1a;全局变量、静态变量 • 堆内存&#xff1a;程序员手动分配、手动释放 • 栈内存&#xff1a;编译器自动分配、自动释放 • 常量区&#xff1a;编译时大小、值确定不可修改 2.程序代码段 •…

【Hot 100】94. 二叉树的中序遍历

目录 引言二叉树的中序遍历我的解题代码优化更清晰的表述建议&#xff1a; &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;算法专栏&#x1f4a5; 标题&#xff1a;【Hot 100】94. 二叉树的中序遍历❣️ 寄语&#xff1a;书到用时方恨少&#xff…

大语言模型(LLMs)微调技术总结

文章目录 全面总结当前大语言模型&#xff08;LLM&#xff09;微调技术1. 引言2. 为什么需要微调&#xff1f;3. 微调技术分类概览4. 各种微调技术详细介绍4.1 基础微调方法4.1.1 有监督微调&#xff08;Supervised Fine-Tuning, SFT&#xff09;4.1.2 全参数微调&#xff08;F…

解决Maven项目中报错“java不支持版本6即更高的版本 7”

错误背景 当Maven项目编译或运行时出现错误提示 Java不支持版本6即更高的版本7&#xff0c;通常是由于项目配置的JDK版本与当前环境或编译器设置不一致导致的。例如&#xff1a; 项目配置的Java版本为6或7&#xff0c;但实际使用的是JDK 17。Maven或IDE的编译器未正确指定目标…

C++笔记-多态(包含虚函数,纯虚函数和虚函数表等)

1.多态的概念 多态(polymorphism)的概念:通俗来说&#xff0c;就是多种形态。多态分为编译时多态(静态多态)和运行时多态(动态多态)&#xff0c;这里我们重点讲运行时多态&#xff0c;编译时多态(静态多态)和运行时多态(动态多态)。编译时多态(静态多态)主要就是我们前面讲的函…

【Unity】MVP框架的使用例子

在提到MVP之前&#xff0c;可以先看看这篇MVC的帖子&#xff1a; 【Unity】MVC的简单分享以及一个在UI中使用的例子 MVC的不足之处&#xff1a; 在MVC的使用中&#xff0c;会发现View层直接调用了Model层的引用&#xff0c;即这两个层之间存在着一定的耦合性&#xff0c;而MV…

前端js学算法-实践

1、两数之和 const twoSum (nums, target) > {const obj {}for (let m 0; m < nums.length; m) {const cur nums[m]const diff target - curif(obj.hasOwnProperty(diff)){ // 查询对象中是否存在目标值-当前值键值对console.log([obj[diff], m]) // 存在则直接获取…

《MATLAB实战训练营:从入门到工业级应用》趣味入门篇-用声音合成玩音乐:MATLAB电子琴制作(超级趣味实践版)

《MATLAB实战训练营&#xff1a;从入门到工业级应用》趣味入门篇-用声音合成玩音乐&#xff1a;MATLAB电子琴制作&#xff08;超级趣味实践版&#xff09; 开篇&#xff1a;当MATLAB遇见音乐 - 一场数字与艺术的浪漫邂逅 想象一下&#xff0c;你正坐在一台古老的钢琴前&#x…

实战探讨:为什么 Redis Zset 选择跳表?

在了解了跳表的原理和实现后&#xff0c;一个常见的问题&#xff08;尤其是在面试中&#xff09;随之而来&#xff1a;为什么像 Redis 的有序集合 (Zset) 这样的高性能组件会选择使用跳表&#xff0c;而不是大家熟知的平衡树&#xff08;如红黑树&#xff09;呢&#xff1f; 对…

数据结构-线性结构(链表、栈、队列)实现

公共头文件common.h #define TRUE 1 #define FALSE 0// 定义节点数据类型 #define DATA_TYPE int单链表C语言实现 SingleList.h #pragma once#include "common.h"typedef struct Node {DATA_TYPE data;struct Node *next; } Node;Node *initList();void headInser…

高中数学联赛模拟试题精选学数学系列第3套几何题

△ A B C \triangle ABC △ABC 的内切圆 ⊙ I \odot I ⊙I 分别与边 B C BC BC, C A CA CA, A B AB AB 相切于点 D D D, E E E, F F F, D D ′ DD DD′ 为 ⊙ I \odot I ⊙I 的直径, 过圆心 I I I 作直线 A D ′ AD AD′ 的垂线 l l l, 直线 l l l 分别与 D E DE…

使用 ossutil 上传文件到阿里云 OSS

在处理文件存储和传输时&#xff0c;阿里云的对象存储服务&#xff08;OSS&#xff09;是一个非常方便的选择。特别是在需要批量上传文件或通过命令行工具进行文件管理时&#xff0c;ossutil提供了强大的功能。本文将详细说明如何使用 ossutil 上传文件到阿里云 OSS&#xff0c…

DeepSeek与MySQL:开启数据智能新时代

目录 一、引言&#xff1a;技术融合的力量二、DeepSeek 与 MySQL&#xff1a;技术基石2.1 DeepSeek 技术探秘2.2 MySQL 数据库深度解析 三、DeepSeek 与 MySQL 集成&#xff1a;从理论到实践3.1 集成原理剖析3.2 集成步骤详解 四、应用案例&#xff1a;实战中的价值体现4.1 电商…

WebAPI项目从Newtonsoft.Json迁移到System.Text.Json踩坑备忘

1.控制器层方法返回类型不能为元组 控制器层方法返回类型为元组时&#xff0c;序列化结果为空。 因为元组没有属性只有field&#xff0c;除非使用IncludeFields参数专门指定&#xff0c;否则使用System.Text.Json进行序列化时不会序列化field var options new JsonSerializ…

202553-sql

目录 一、196. 删除重复的电子邮箱 - 力扣&#xff08;LeetCode&#xff09; 二、602. 好友申请 II &#xff1a;谁有最多的好友 - 力扣&#xff08;LeetCode&#xff09; 三、176. 第二高的薪水 - 力扣&#xff08;LeetCode&#xff09; 一、196. 删除重复的电子邮箱 - 力扣…

Spring Boot的GraalVM支持:构建低资源消耗微服务

文章目录 引言一、GraalVM原生镜像技术概述二、Spring Boot 3.x的GraalVM支持三、适配GraalVM的关键技术点四、构建原生镜像微服务实例五、性能优化与最佳实践总结 引言 微服务架构已成为企业应用开发的主流模式&#xff0c;但随着微服务数量的增加&#xff0c;资源消耗问题日…