`

[收藏]sql多表查询之二:不等连接

阅读更多

sql多表查询之二:不等连接

标签: sql多表查询 不等连接

  看到有朋友催促啦,赶快上第二盆菜,希望合您口胃哦,有什么建议或意见也欢迎大家多多留言讨论啦,没尝过第一盆菜请先点击这里:sql多表查询之一:Where 和 On的秘密

  今天我们要介绍的是sql多表查询不等连接,想知道怎么样用一句SQL得到每日的库存结余吗,那么你千万不要错过今天的内容!

  可能有朋友要问了,什么是不等连接呢?

        通常来说,SQL语言进行的都是无序操作。想要进行有序的处理,比如比较一个序列的前后项,必须要使用游标。但是,在有些场合下,可采用另一种方法,不用游标,一样能处理有序的信息,这就是不等联接。

  看看下面的例子你就更加明白什么是不等连接了。

  我有一张表

 

  现在我希望通过一条查询语句使它变成

 

  看到没有,记录数变多了,仅用我们之前学到的a join b where a.XX=b.YY 能解决问题吗?

    想想,再看答案

  1.   select _a.ordinal from @a _a join @a _b on _a.ordinal<=_b.ordinal

  总结:

  1.   连接条件不为= 号的统称不等连接
  2.   <>,> ,<,like,not in,not exists….. 都可以做为连接条件

  这个例子有些抽象,也许大家会说,我用不上这种查询

  我给你看看下面这个案例,您就知道这个不等连接有多实用啦

  做过企业信息系统应该都知道进销存吧,那么,下面这是一张入库明细表

  它记录了每天的入库情况

 

  现在我希望得到每个产品每次入库之后的库存变化情况,如下表所示:

  这该怎么办呢?

        直观上来讲,我们可以在入库明细表上建一个游标,从第一条开始,每一条,加一次。

       也许有些朋友还可以想到用update,不错啦!

       但是,只有这些方法吗???

       当然不,我们可以用一句SQL 搞定,相信吗?

  试试,再看答案

  1. Select

       _b. 入库日期,_a. 产品,sum(_a. 数量) 当前库存

       from @ 入库表 _a

       join @ 入库表 _b

       on _a. 产品=_b. 产品 and _a. 入库日期<=_b. 入库日期

       group by _b. 入库日期,_a. 产品

   不等联接本身就不是一一对应,它的对应关系和顺序有着密切的关系。这也就是我们能够拿它来进行有序操作的原因。这就是不等连接,这次知道了吧!

 

        不等联接查询的有序操作能力,显然来自联接字段的可排序和互异性,所以,最好不要在有重复值的字段上做不等联接(事实上,最好不要在有重复值的字段上做任 何联接,除非你非常肯定你在干什么)。等值联接出现数据爆炸就够可怕的了,不等联接要是玩爆了……嘿嘿嘿……

 

       想像一个等值联接中有一对重复值,可能出现两对重复结果。不过要是不等联接,就和重复的位置有关了。因为这是一个三角形,所以出现在最上面还好,要是出现在这个三角形的下部……

 

       小忠告:不等联接查询,显然是一个有力的工具,但它也是招来麻烦的快捷方式之一。有几个小忠告:


        1、如果联接会生成很大的“三角形”,就不要用,试试子查询或哪怕游标;

       2、生成的结果集相对于原表越小越好,尽可能地把无用的数据先过滤掉;

       3、用不等联接进行数列计算会表达的很清楚(因为是非过程化的),但通常在效率上它没有什么优势,所以,平时玩玩可以,真用的话最好先考虑好;

       4、还有就是不等联接不要轻易用在多重联接中,否则可能会引起杠杆作用。

 

  不等连接很神奇吧,功能很强大吧:D,祝大家在这个神奇的世界中旅行愉快!

分享到:
评论

相关推荐

    SQL多表连接查询优化的相关研究

    标题中的“SQL多表连接查询优化的相关研究”指的是在数据库管理中,如何高效地执行涉及多个数据表的SQL查询操作。在SQL(Structured Query Language)中,连接查询(JOIN)是用于合并两个或更多表中的数据的关键技术...

    数据库作业7:SQL练习4 – SELECT(连接查询、嵌套查询)

    数据查询2—连接查询:同时涉及两个以上的表的查询 连接条件:用来连接两个表的...从两个表中查询,需要先用笛卡尔积将两个表连接起来,连接之后再找出符合条件相等的。 【思考】:如何用SQL表达笛卡尔积×? SELECT Stu

    SQL多表连接

    本文档为通用SQL数据库查询时所用,讲述的是多表连接!~

    Oracle sql语句多表关联查询

    Oracle SQL 语句多表关联查询是数据库管理系统中的一种常见查询方式,通过了解字符串和数字的比较、分组查询、HAVING 子句、查询顺序、Oracle 中的伪列、子查询和表连接等知识点,可以帮助我们更好地编写 SQL 语句,...

    SQL多表连接查询

    ### SQL多表连接查询详解 在数据库操作中,经常需要从多个表中获取数据,而这些表之间往往存在一定的关联性。为了实现这种关联性的查询,SQL提供了多种表连接方式,包括内连接(INNER JOIN)、左外连接(LEFT JOIN...

    SQL多表连接详解:SELECT语句、各种连接方式及其应用场景

    内容概要:本文档详细介绍了SQL语言中的多表连接操作,涵盖各种类型的连接方法,如等值连接、非等值连接、内外连接、交叉连接和自连接等。通过对具体例子和SQL语句的学习,文档指导读者正确地从多个表格中访问数据,...

    SQL的几种连接:内连接、左联接、右连接、全连接、交叉连接

    SQL连接是数据库管理系统中的一种基本操作,用于将多个表格中的数据组合成一个新的表格。根据连接的方式和结果,SQL连接可以分为内连接、左连接、右连接、全连接和交叉连接等多种类型。 内连接 内连接是最基本的...

    Microsoft SQL Server 2005技术内幕:T-SQL查询的源代码

    2. **JOIN操作**:T-SQL支持INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN等不同类型的连接,用于合并来自两个或更多表的数据。 3. **子查询**:嵌套在其他查询中的查询,可以作为表达式的一部分或者在WHERE...

    数据库多表连接查询详解

    数据库多表连接查询详解 连接查询是关系数据库管理系统中的一种重要查询方式,它允许用户从多个表中检索数据,并将它们组合成一个结果集。连接查询的基本思想是通过连接运算符在多个表之间建立关系,从而实现数据的...

    oracle经典sql多表查询,sql统计

    在这个"Oracle经典SQL多表查询,SQL统计"的主题中,我们将深入探讨如何在Oracle环境中进行复杂的多表查询以及进行各种统计分析。 一、多表查询 1. 内连接(INNER JOIN):内连接返回两个表中存在匹配记录的结果集...

    二、MySQL连接查询学习笔记(多表连接查询:内连接,外连接,交叉连接详解)

    MySQL连接查询(多表连接查询:内连接,外连接,交叉连接详解) 6:多表连接查询 笛卡尔乘积:如果连接条件省略或无效则会出现 解决办法:添加上连接条件 连接查询的分类: 1.按年代分类: 1)sql 92标准:仅仅...

    oracle sql 多表连接和子查询

    oracle sql 多表连接和子查询 oracle sql 多表连接和子查询

    java 连接sqlserver数据库查询,并分页显示

    在Java编程中,连接SQL Server数据库并执行查询是常见的任务,尤其当涉及到大量数据时,分页显示就显得尤为重要。本篇文章将详细讲解如何使用Java连接SQL Server数据库,执行查询语句以及实现分页显示。 首先,我们...

    sql多表关联查询语法详解

    总结,掌握SQL的多表关联查询,包括左外连接、右外连接和嵌套查询,是数据库管理和数据分析的关键技能。理解并熟练运用这些方法,能帮助你在处理复杂的数据关系时游刃有余,提高数据处理的效率和准确性。在实际应用...

    SqlServer连接工具

    SQL Server连接工具是数据库管理员和开发人员用于与Microsoft SQL Server交互的重要软件。这些工具提供了多种功能,包括数据库的创建、管理、查询、备份、恢复以及性能优化等。在本篇文章中,我们将深入探讨SQL ...

    SQL高级查询语句:聚合查询,多表查询,连接查询【关系数据库SQL教程5】

    SQL高级查询语句_聚合查询,多表查询,连接查询【关系数据库SQL教程5】

    Microsoft_SQL_Server_2005技术内幕:T-SQL查询.pdf

    它详细介绍了T-SQL的内部体系结构,包含了非常全面的编程参考,提供了使用Transact-SQL(T-SQL)的专家级指导,囊括了非常全面的编程参考,揭示了基于集合的查询的强大威力,并包含大量来自专家们的参考和建议。...

    SQL Server 精华 --SQL查询的经典案例

    本文将深入探讨SQL Server中的SQL查询,包括经典案例、交叉查询和多表查询等核心知识点。 首先,SQL(Structured Query Language)是用于管理关系数据库的标准语言,它允许我们执行诸如创建、更新、查询和删除...

    图解SQL多表关联查询(内连接,左连接,全连接)[整理].pdf

    图解SQL多表关联查询(内连接,左连接,全连接)[整理].pdf

    sqlserver驱动包:sqljdbc4.jar

    在这个特定的场景中,`sqljdbc4.jar`是一个特定于SQL Server的实现,它包含了必要的类和方法,让Java程序能够连接到SQL Server数据库,执行SQL查询,处理结果集,并进行其他数据库操作。 首先,让我们深入了解`sql...

Global site tag (gtag.js) - Google Analytics