读SQL进阶教程笔记03_自连接

自连接,窗口函数(sum、avg、max、min)实战 采用自连接和窗口函数两种方法解题: 求每个用户截止到每月为止的当月访问次数、最大单月访问次数、累计到该月的总访问次数。 三个字段的意思: 用户名,月份,访问次数 表名visits 字段id, vmonth, pv 数据: A,2015-01,5 A,2015-01,15 B,2015-01,5 A,2015-01,8 B,2015-01,25 A,2015-01,5 A,2015-02,4 A,2... 阅读详情

 

1. 针对相同的表进行的连接

1.1. 相同的表的自连接和不同表间的普通连接并没有什么区别,自连接里的“自”这个词也没有太大的意义

1.2. 与多表之间进行的普通连接相比,自连接的性能开销更大

  • 1.2.1. 特别是与非等值连接结合使用的时候

  • 1.2.2. 用于自连接的列推荐使用主键或者在相关列上建立索引

2. 组合

2.1. 有顺序的有序对(ordered pair)

2.2. 无顺序的无序对(unordered pair)

3. 示例

3.1. 

 

3.2. --用于获取可重排列的SQL语句

    SELECT P1.name AS name_1, P2.name AS name_2
      FROM Products P1, Products P2;
  • 3.2.1. 可重排列,所以结果行数9

3.3. --用于获取排列的SQL语句

    SELECT P1.name AS name_1, P2.name AS name_2
      FROM Products P1, Products P2
     WHERE P1.name <> P2.name;
  • 3.3.1. 排除掉由相同元素构成的对,结果行数为排列6

3.4. --用于获取组合的SQL语句

    SELECT P1.name AS name_1, P2.name AS name_2
      FROM Products P1, Products P2
     WHERE P1.name > P2.name;
  • 3.4.1. 只与“字符顺序比自己靠前”的商品进行配对,结果行数为组合3

3.5. --用于获取组合的SQL语句:扩展成3列

    SELECT P1.name AS name_1, P2.name AS name_2, P3.name AS name_3
      FROM Products P1, Products P2, Products P3
     WHERE P1.name > P2.name
      AND P2.name > P3.name;

3.6. ">”和“<”等比较运算符不仅可以用于比较数值大小,也可以用于比较字符串(比如按字典序进行比较)或者日期

4. 删除重复行

4.1. 示例

  • 4.1.1. --用于删除重复行的SQL语句(1):使用极值函数

       DELETE FROM Products P1
        WHERE rowid < ( SELECT MAX(P2.rowid)
                         FROM Products P2
                         WHERE P1.name = P2. name
                           AND P1.price = P2.price ) ;
    • 4.1.1.1. Oracle数据库里的rowid
  • 4.1.2. --用于删除重复行的SQL语句(2):使用非等值连接

       DELETE FROM Products P1
        WHERE EXISTS ( SELECT *
                         FROM Products P2
                       WHERE P1.name = P2.name
                         AND P1.price = P2.price
                         AND P1.rowid < P2.rowid );

4.2. 如果从物理表的层面来理解SQL语句,抽象度是非常低的

4.3. “表”“视图”这样的名称只反映了不同的存储方法,而存储方法并不会影响到SQL语句的执行和结果

4.4. 无论表还是视图,本质上都是集合——集合是SQL能处理的唯一的数据结构

5. 查找局部不一致的列

5.1. 示例

  • 5.1.1. --用于查找是同一家人但住址却不同的记录的SQL语句

       SELECT DISTINCT A1.name, A1.address
         FROM Addresses A1, Addresses A2
        WHERE A1.family_id = A2.family_id
         AND A1.address <> A2.address ;
  • 5.1.2. --用于查找价格相等但商品名称不同的记录的SQL语句

       SELECT DISTINCT P1.name, P1.price
         FROM Products P1, Products P2
        WHERE P1.price = P2.price
         AND P1.name <> P2.name;
  • 5.1.3. 如果改用关联子查询,就不需要DISTINCT了

6. 排序

6.1. 示例

  • 6.1.1. --排序:使用窗口函数

       SELECT name, price,
             RANK() OVER (ORDER BY price DESC) AS rank_1,
             DENSE_RANK() OVER (ORDER BY price DESC) AS rank_2
         FROM Products;
    • 6.1.1.1. 在出现相同位次后,rank_1跳过了之后的位次,rank_2没有跳过,而是连续排序

    • 6.1.1.2. 依赖于具体数据库来实现的方法

  • 6.1.2. --排序从1开始。如果已出现相同位次,则跳过之后的位次

       SELECT P1.name,
             P1.price,
             (SELECT COUNT(P2.price)
                 FROM Products P2
               WHERE P2.price > P1.price) + 1 AS rank_1
         FROM Products P1
         ORDER BY rank_1;
    • 6.1.2.1. 不依赖于具体数据库来实现的方法

    • 6.1.2.2. 去掉标量子查询后边的+1,就可以从0开始给商品排序

    • 6.1.2.3. 如果修改成COUNT(DISTINCT P2.price),那么存在相同位次的记录时,就可以不跳过之后的位次,而是连续输出(相当于DENSE_RANK函数)

7. 同心圆状的递归集合

7.1. 示例

  • 7.1.1. 

 

  • 7.1.2. --排序:使用自连接

       SELECT P1.name,
             MAX(P1.price) AS price,
             COUNT(P2.name) +1 AS rank_1
         FROM Products P1 LEFT OUTER JOIN Products P2
           ON P1.price < P2.price
        GROUP BY P1.name
        ORDER BY rank_1;
    • 7.1.2.1. 外连接就是这样一个用于将第1名也存储在结果里的小技巧
  • 7.1.3. --排序:改为内连接

       SELECT P1.name,
             MAX(P1.price) AS price,
             COUNT(P2.name) +1 AS rank_1
         FROM Products P1 INNER JOIN Products P2
           ON P1.price < P2.price
        GROUP BY P1.name
        ORDER BY rank_1;
    • 7.1.3.1. 没有比橘子价格更高的水果,所以它被连接条件P1.price < P2.price排除掉了
  • 7.1.4. --不聚合,查看集合的包含关系

       SELECT P1.name, P2.name
         FROM Products P1 LEFT OUTER JOIN Products P2
           ON P1.price < P2.price;
SQL进阶教程笔记03:自连接数据库 通过自连接,我们可以将一张表视为两个独立的实例,并在其之间建立连接,从而实现更复杂的查询和分析。自连接是一项强大的数据库查询技术,可以帮助我们处理复杂的关系和层级结构的数据。我们通过自连接,将表中的每个实例都视为员工,然后通过连接条件找到其对应的经理。例如,我们可以使用自连接来查询员工与其经理之间的关系,或者查询一个员工的所有下属。假设我们有一个名为"employees"的表,其中包含员工的姓名和经理的姓名。以上只是自连接查询的两个简单示例,你可以根据具体的需求和表结构进行更复杂的自连接查询操作。 阅读详情

相关推荐

20、SQL自连接与子查询的深入解析

本文深入解析了SQL中的自连接与子查询技术,详细介绍了它们的语法、使用场景以及实际应用案例。自连接适用于处理具有自反关系的数据,如员工与经理的层级关系;而子查询则在根据其他查询结果进行筛选时表现出色,如查找价格最高的书籍或订单金额超过平均水平的订单。文章还对自连接和子查询的性能表现和选择策略进行了对比分析,并结合实际案例展示了它们的综合应用。无论是初学者还是有经验的开发者,都能从中获得对SQL查询更深入的理解和应用技巧。

Pepper的专栏 75

SQL进阶教程 | 史上最易懂SQL教程!10小时零基础成长SQL大师!!

mysql学习

weixin_45732235的博客 2812

《SQL 入门教程》第03篇 查询条件

本篇介绍 SQL 标准中定义的 WHERE 查询条件,以及六种主流数据库中的实现及差异:Oracle、MySQL、Microsoft SQL Server、PostgreSQL、Db2、SQLite。 1 2

Tony.Dong的专栏 1718

(六)从入门到精通全指南——SQL进阶

本文是SQL进阶学习指南,从基础进阶到核心进阶分阶段讲解。首先夯实基础语法细节和优化技巧,包括规范书写、函数使用和条件查询进阶。接着深入讲解排序分页、聚合分组等复杂查询,覆盖多条件组合、范围查询、模糊查询等场景,并针对不同数据库分页差异提供解决方案。适用于掌握基础SQL但需提升复杂查询和性能优化的开发者,帮助摆脱CRUD操作,应对实际业务场景和面试需求。

修行者Java的博客 644

避开内存陷阱:手把手教你用RKNN零拷贝接口正确管理输入输出Tensor

本文深入解析RKNN零拷贝接口在边缘计算中的高效内存管理策略,通过YOLOX实例演示如何避免内存对齐错误和数据错位。详细介绍了`rknn_tensor_mem`系列API的正确使用方法,包括内存创建、绑定、释放全流程,以及性能优化技巧如内存池技术和多核NPU负载均衡,帮助开发者提升推理效率并避开常见陷阱。

weixin_33686714的博客 160

保姆级教程:用Anaconda+PyCharm搞定YOLOv8本地部署(附避坑指南)

本文提供了一份详细的YOLOv8本地部署指南,涵盖Anaconda环境配置、PyCharm集成到模型部署的全过程。特别针对国内开发者需求,整合了镜像加速和常见报错解决方案,帮助快速完成目标检测模型的本地部署与实战应用。

weixin_42528090的博客 433

数据库基础知识整理

数据库基础知识整理@[TOC](数据库基础知识整理)DQL进阶1:基础查询进阶2:条件查询进阶3:排序查询进阶4:常见函数单行函数日期函数流程控制函数分组函数进阶5:分组查询进阶6:连接查询sql99语法进阶7:子查询进阶8:分页查询进阶9:联合查询DDL1.库的管理2.表的管理表的创建表的修改表的删除表的复制DML插入语句修改语句删除语句TCL常见约束一、创建表时添加约束二、修改表时添加约束三、...

Lohaks的博客 4467

Windows下Codex CLI binary报错排查与修复完整指南

在Windows开发环境中,命令行工具与图形界面应用的协同工作常常依赖于系统环境变量的正确配置。Codex CLI作为一款基于Node.js的智能编程命令行工具,其可执行文件(binary)的定位机制直接关系到桌面应用的正常启动。当用户执行npm更新或切换Node版本后,Codex CLI二进制文件路径可能发生漂移,从而触发“Unable to locate the Codex CLI binary”的报错。此类问题并非代码或账号异常,而是PATH路径、环境变量刷新及桌面应用缓存共同作用的结果。本文面向Wi

weixin_28718769的博客 305

基础篇:数据库 SQL 入门教程_sql学习

某些数据库会列出介于 “Adams” 和 “Carter” 之间的人,但不包括 “Adams” 和 “Carter”;而另一些数据库会列出介于 “Adams” 和 “Carter” 之间的人,包括 “Adams” ,但不包括 “Carter”。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。如图,“Id_O” 列是 Orders 表中的的主键,同时,“Orders” 表中的 “Id_P” 列用于引用 “Persons” 表中的人,而无需使用他们的确切姓名。

2401_84140112的博客 2514

抖音小程序开发 唤起收银台支付(可以选择支付宝APP支付或微信H5支付)

什么都别说,先看效果: 字节跳动也开放了小程序给商家接入,可以在旗下APP如抖音、今日头条、今日头条极速版等应用中即点即用,基于庞大的数亿用户量为其引流,帮助商家获取用户流量,销售商品,其模式和微信小程序差不多。 1、后台管理地址: https://developer.toutiao.com/ 2、开发文档地址: https://developer.toutiao.com/dev/cn/min...

悟空码字的博客 1万+

微软Media Creation Tool 创建工具 1.3 升级:支持全新下载安装Win11 22H2 Build 22621.525

微软 Media Creation Tool 创建工具 1.3 升级:支持全新下载安装 Win11 22H2 Build 22621.525 ISO 镜像,如果今天运行使用 Media Creation Tool,则会下载 Windows 11 2022 版本 Build 22621.525,它不会向操作系统添加任何新内容,但会修复安装问题,下面来看看详细的更新内容。

zym0218的博客 4231

Burpsuite 指纹特征绕过

需要高版本 17 + 的 burp 运行插件,可 bypass 网站流量设备的检测,正常抓包。未使用插件前,burp 指纹特征被识别,抓包被拦截。

Javachichi的博客 6642

22、计算智能在自闭症检测与管理中的应用

本文探讨了计算智能在自闭症谱系障碍(ASD)检测与管理中的应用。在检测方面,结合可穿戴设备、传感技术与多模态数据(如眼动追踪、问卷、神经成像等),利用机器学习和深度学习算法提升诊断准确性,并介绍了多种公开数据集及研究方法。在管理方面,通过生理指标(HRV、GSR、呼吸频率)监测情绪状态,结合智能可穿戴设备与支持性应用平台(如LetMeTalk、MITA、Rethink Ed等),实现对ASD患者的实时干预与个性化支持。文章还展示了多模态筛查与管理流程的系统架构,强调未来技术整合与个性化服务的发展方向。

star的博客 91

SQL进阶02自连接

SQL进阶02自连接01 排列 组合02 删除重复数据集合的思想使用exist谓词逻辑使用except03 排序窗口函数自连接分区排序 01 排列 组合 # 1. 可重排列 SELECT t1.id AS id1 , t2.id AS id2 FROM table1 t1,table2 t2; # 2. 排列 SELECT t1.id AS id1 , t2.id AS id2 FROM table1 t1,table2 t2 WHERE t1.id<>t2.id; # 3. 可重

qq_41725735的博客 241

基于Simulink的固态变压器(SST)多级协同控制

本文基于Simulink平台,详细介绍了固态变压器(SST)多级协同控制的建模与仿真方法。针对SST三级架构(AC-DC、DC-DC、DC-AC)存在的级间耦合问题,提出了纵向解耦与横向联动的协同控制策略。通过搭建10kV/400V级联型SST系统模型,实现了输入电压波动±20%或负载0-100%跳变时直流母线电压波动小于2%的控制目标。文章详细讲解了Simulink建模步骤、控制算法推导及工程部署建议,包括功率前馈控制、虚拟惯性算法等关键技术。仿真结果表明,该协同控制方案能有效抑制负载突变时的电压波动,为

MHD0815的博客 214

CAPL诊断功能实现

UDS(Unified Diagnostic Services)是一种用于汽车电子系统诊断的标准协议。它定义了一系列诊断服务,用于读取和写入车辆电子控制单元(ECU)中的数据,以及处理诊断故障码(DTC)。UDS协议通常运行在CAN总线上,使用ISO 15765-2(ISO-TP)协议进行数据传输。通过本文的学习,读者应该对CAPL诊断功能实现有了初步的了解,并能够编写复杂的CAPL脚本。在实际项目中,CAPL的应用非常广泛,希望读者能够通过不断的学习和实践,掌握更多的CAPL技巧,提高自己的开发能力。

闲人编程的博客 1516

SQL进阶教程读后总结与感想

以前我是用过程(命令)式思维去看这个世界,到后来我才明白也可以用集合论或者函数式思维去看这个世界。套用大话西游的台词“以前我是用肉眼去看这个世界,到后来我才明白应该用心去看这个世界。查不出,查不快,很可能就是null这个幽灵在作祟,你又无法根除它,只能时刻保持警惕。另外,原书练习题和第三章附录答案等,也很有意思,有兴趣的同学可以找来做做。书到用时方恨少,读了之后,发现SQL还可以这么玩,果然牛掰!所以,近一段时间,阅读函数式编程和SQL编程的书籍较多。两者很像,都不同于过程(命令)式。SQL解惑(第2版)

lyingSeven的博客 1266

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

mysql自连接

针对相同的表进行的连接被称为“自连接”(self join)。 那么为什么要把相同的一张表连接起来呢?一开始还是挺难理解的。把它想象成连接两张不同的表,这样容易理解一些。事实上,自连接还是有很多用处的。 自连接的用途: 1,在同一张表内进行比较 例子:查找收入超过各自经理的员工的姓名 Id | Name | Salary | ManagerId ----+-------+--------+----------- 1 | Joe | 70000 | 3

wangpeng1201的博客 8191

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【mysql】SQL自连接实战:查询温度升高的日期

在数据库查询中,经常需要比较同一表中不同行之间的数据。一个典型场景是:在天气记录表中找出所有当天温度比前一天高的日期对应的id。通过SQL自连接和日期函数,可以高效地查询出满足"当天温度比前一天高"的记录。关键是理解自连接的原理和DATE_ADD函数的用法。这种方法灵活性强,可以适应各种需要比较相邻数据行的场景。掌握这种查询技巧,能够解决实际工作中许多类似的数据分析需求,提高数据库查询能力。思考题:如果需要查询温度连续两天上升的记录,应该如何修改这个查询语句?

XYiFfang的博客 1211

Mysql学习及笔记03--sql92语法,sql92的等值连接,非等值连接,自连接,sql99语法,sql99的等值连接,非等值连接,自连接

1、多表查询 笛卡尔乘积的原因是两个表之间缺乏有效的连接条件。 select name,boyname from boys,beauty where beauty.boyfriend_id=boys.id;//这里通过俩表的id相等连接 按功能分类: 内连接: 等值连接 非等值连接 自连接 外连接 左外连接 右外连接 全外连接 交叉连接 2、SQL92的等值连接 多表等值连接的结果为多表的交集部分 n表连接,至少需要n-1个连接条件 多表的顺序没有要求 一般需要为表起别名 可以搭配前面介绍的所有子

weixin_43745804的博客 347

多表查询-5-自连接

自连接是对同一张表进行连接查询的技术,分为内连接和外连接两种方式。通过为表设置不同别名实现自我连接,语法为"SELECT 字段 FROM 表A 别名A JOIN 表A 别名B ON 条件"。文中以员工表为例,演示了查询员工及其领导信息:内连接方式会丢失无领导的数据(17条结果),而左外连接则能保留所有员工记录(18条结果)。案例通过比较两种连接方式的差异,展示了自连接在实际业务场景中的应用,特别是处理表内层级关系(如员工-领导关系)时的查询技巧。

别卷了别卷了 1734

《SQL进阶教程》学习

2021/10/31 今天开始学习SQL进阶教程。听了两天的培训讲座,受益还挺多,如果我是想要毕业直接去工作的话,实习的经历非常重要,可以多多学习待人处事的方法,当然,技术的学习也非常重要。所以加油吧! CASE表达式 CASE表达式概述 简单CASE表达式 CASE sex when '1' then '男' when '2' then '女‘ ELSE '其他' END 搜索CASE表达式 CASE when sex='1' then '男' w..

weixin_53794695的博客 1374

mysql中自连接的用法_Mysql自连接的一些用法

自连接是连接的一种用法,但并不是连接的一种类型,因为他的本质是把一张表当成两张表来使用。mysql有时在信息查询时需要进行对自身连接(自连接),所以我们需要为表定义别名。我们举例说明,下面是商品采购表,我们需要找到采购价格比惠惠高的所有信息。一般情况我们看到这张表我们第一时间用语句进行操作:1SELECT*FROMshopingWHEREprice>27可想而知,这是有多么简单,...

weixin_34965737的博客 1195

【mysql】SQL查询全解析:从基础分组到高级自连接技巧

基础分组查询是最简单高效的方法,应作为首选自连接技巧需要理解连接条件和NULL判断的逻辑含义正确使用比较运算符:">“用于查找更早记录,”<"用于查找更晚记录索引是性能关键:为经常用于分组和连接的字段创建索引根据需求选择方法:只需要聚合值使用GROUP BY,需要完整记录可考虑自连接通过本文的详细解析,相信您已经对SQL分组查询和自连接有了更深入的理解。在实际应用中,建议根据具体需求选择最合适的查询方法,并始终关注查询性能优化。转载声明:本文允许转载,但请保留原文链接和作者信息。

XYiFfang的博客 975

sql case when用法_《SQL进阶教程》笔记(1)

1-1 CASE表达式--简单CASE表达式 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --搜索CASE表达式 CASE WHEN SEX = '1' THEN '男' WHEN SEX = '2' THEN '女' ELSE '其他' END注意事项 在发现为真的WHEN子句时,CASE表...

weixin_39801075的博客 536
上一篇: 读SQL进阶教程笔记02_三值逻辑和NULL
下一篇: 读SQL进阶教程笔记04_集合运算
躺柒
博客等级 码龄4年 7004粉丝 1320原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值