`
jackleechina
  • 浏览: 587342 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

"in"与"left jion / right join" 在sql使用中的联系与区别

    博客分类:
  • sql
 
阅读更多
通过下面的使用,来辨析"in"与"left jion / right join" 适合使用的场合。
1)in
sql代码如下
select  sum(actualSpun) as totalYarnPurchaseOrderQuantity 
from ordersummary 
where orderSummaryId in 
	  ( select orderSummaryId 
		from purchaseOrder_material_colorNo_yarnCount_clNoOrYrNo 
		where purchaseOrder_material_colorNo_yarnCount_id in 
			 (select purchaseOrder_material_colorNo_yarnCount_id 
			  from purchaseOrder_material_colorNo_yarnCount 
			  where purchaseOrder_material_colorNo_id in 
				 (select purchaseOrder_material_colorNo_id 
				  from purchaseOrder_material_colorNo 
				  where purchaseOrder_material_id in
					   (select purchaseOrder_material_id 
						from purchaseOrder_material
						where purchaseOrderId =435
						)
				 )
			)
	   )


运行结果如下:
totalYarnPurchaseOrderQuantity
364.624

2)left jion / right join
sql代码
select  sum(actualSpun) as totalYarnPurchaseOrderQuantity,
		purchaseOrderId
from   (select actualSpun, 
			   t3.purchaseOrderId
		from orderSummary 
		right join 
			(select orderSummaryId,
					t2.purchaseOrderId 
			from purchaseOrder_material_colorNo_yarnCount_clNoOrYrNo 
			right join
				 (select purchaseOrder_material_colorNo_yarnCount_id,
						 t1.purchaseOrderId
				  from purchaseOrder_material_colorNo_yarnCount 
				  right join
					 (select purchaseOrder_material_colorNo_id,
							 t0.purchaseOrderId
					  from purchaseOrder_material_colorNo 
					  right join
						   (select purchaseOrder_material_id,
								   purchaseOrder.purchaseOrderId 
							from purchaseOrder_material 
							right join purchaseOrder on purchaseOrder_material.purchaseOrderId=purchaseOrder.purchaseOrderId
							)t0
					 on t0.purchaseOrder_material_id = purchaseOrder_material_colorNo.purchaseOrder_material_id
					 )t1
				on t1.purchaseOrder_material_colorNo_id=purchaseOrder_material_colorNo_yarnCount.purchaseOrder_material_colorNo_id
				)t2
			on t2.purchaseOrder_material_colorNo_yarnCount_id=purchaseOrder_material_colorNo_yarnCount_clNoOrYrNo.purchaseOrder_material_colorNo_yarnCount_id 
			)t3
		on t3.orderSummaryId=orderSummary.orderSummaryId
		)t4
group by purchaseOrderId

运行结果如下:
totalYarnPurchaseOrderQuantity  purchaseOrderId
364.624                                               435
364.624                                               436
364.624                                               437
364.624                                              438
364.624                                               439
364.624                                             440
364.624                                               441
364.624                                               442
364.624                                               443
364.624                                              444
364.624                                               445

3)in
select  sum(actualSpun) as totalYarnPurchaseOrderQuantity 
from ordersummary 
where orderSummaryId in 
	  ( select orderSummaryId 
		from purchaseOrder_material_colorNo_yarnCount_clNoOrYrNo 
		where purchaseOrder_material_colorNo_yarnCount_id in 
			 (select purchaseOrder_material_colorNo_yarnCount_id 
			  from purchaseOrder_material_colorNo_yarnCount 
			  where purchaseOrder_material_colorNo_id in 
				 (select purchaseOrder_material_colorNo_id 
				  from purchaseOrder_material_colorNo 
				  where purchaseOrder_material_id in
					   (select purchaseOrder_material_id 
						from purchaseOrder_material
						where purchaseOrderId in 
                              (select purchaseOrderId 
							  from purchaseOrder)
						)
				 )
			)
	   )

运行结果如下:
totalYarnPurchaseOrderQuantity 
364.624                                              
364.624                                              
364.624                                              
364.624                                             
364.624                                              
364.624                                            
364.624                                              
364.624                                              
364.624                                              
364.624                                             
364.624


比较:
一)
3)中的运行结果类似2),不同的是3)中的列只有最后一个表的列,而2)中有right join 所以保留了最初一个表的列的信息。

二)
若要得到的结果是具体“某一类”的结果,可以用1)的写法,1)中没有用到left join和right join 执行效率应该更快,并且因为是具体某一类的结果,所以直接知道最初表的那一列的purchaseOrderId的值。
分享到:
评论

相关推荐

    SQL语句left join/right join/inner join 的用法比较

    与LEFT JOIN相反,RIGHT JOIN返回所有右表(B表)的记录,即使在左表(A表)中没有匹配的记录。如果左表中没有匹配项,结果同样会填充NULL值。右连接的SQL语句如下: ```sql SELECT * FROM A RIGHT JOIN B ON A.aID ...

    inner join、 left join 、right join、 outer join之间的区别

    `RIGHT JOIN`也称为`RIGHT OUTER JOIN`,与`LEFT JOIN`相反,它会返回所有右表(在这个例子中是表`B`)的记录,即使左表(表`A`)中没有匹配的记录。如果左表中没有匹配项,则结果集中的这些列将包含`NULL`值。 **...

    SQL中的left outer join,inner join,right outer join用法详解

    3. 右外连接(Right Outer Join):包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行。 4. 全外连接(Full Outer Join):包含左、右两个表的全部行,不管另外一边的表中是否...

    SQL语句inner join,left join ,right join连接的不同之处

    在SQL语言中,连接(Join)操作是一种非常重要的数据整合方式,主要用于从两个或多个表中提取数据。根据连接方式的不同,可以分为多种类型,包括内连接(Inner Join)、左连接(Left Join)以及右连接(Right Join)...

    SQL left join

    在本文中,我们将详细介绍SQL Left Join的使用方法、特点和区别,以及与Right Join和Inner Join的比较。 一、SQL Left Join的定义和使用 SQL Left Join也称为左外连接,它可以将左表中的所有记录与右表中的记录...

    关于sql的left join,right join,inner join,outerjoin

    与LEFT JOIN相反,RIGHT JOIN返回右表的所有记录,即使在左表中没有匹配的记录。如果左表中没有匹配的记录,结果同样会显示NULL。其语法结构与LEFT JOIN类似,只是交换了表的位置: ```sql SELECT column_name(s) ...

    left join right join inner join 区别和联系

    在本节中,我们将详细介绍左连接、右连接和内连接的区别和联系。 左连接(LEFT JOIN) 左连接返回左表中的所有行,右表中的行如果存在匹配则返回,否则返回 NULL。左连接的结果集是左表中的所有行,右表中的行如果...

    sql的left join和count应用

    在SQL语言中,`LEFT JOIN` 和 `COUNT` 是两种非常重要的操作,它们在数据库查询中扮演着关键角色。在这个问题中,我们看到一个数据表 `TPL_WORD1`,它包含字段 `Wordid`(主键)、`idFuid`(上一级节点ID)和 `Name`...

    hive sql + left join 数据缺失

    随着Hive版本的不断更新,部分用户在升级至Hive 3之后遇到了数据处理中的一个常见问题——在执行Left Join操作时出现数据缺失。 #### 二、问题复现 问题发生在如下的SQL语句中: ```sql SELECT a.* FROM ( SELECT ...

    SQL语句优化之JOIN和LEFT JOIN 和 RIGHT JOIN语句的优化

    SQL语句优化对于大型数据库系统至关重要,特别是在涉及多表查询时,JOIN、LEFT JOIN 和 RIGHT JOIN 的高效运用能显著提升查询速度。以下将详细探讨这些JOIN类型以及相关的优化策略。 JOIN原理: JOIN操作实际上是...

    (Left join , Right Join, Inner Join)用法详解

    ### (Left join , Right Join, Inner Join)用法详解 #### 一、基本概念与应用场景 在数据库查询语言SQL中,连接(Join)是一种非常重要的操作,它允许我们结合两个或多个表的数据来检索信息。根据不同的连接方式,...

    9.1.9 解释 SQL 的 left join 和 right join.md

    9.1.9 解释 SQL 的 left join 和 right join

    left_join_on_and与left_join_on_where的区别

    left_join_on_and与left_join_on_where的区别

    SQL表连接查询(inner join、full join、left join、right join)1

    在SQL中,主要有四种类型的连接查询:内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)。下面将详细解释这四种连接方式。 1. 内连接(INNER JOIN): 内连接返回两个表中...

    SQL中的left join right join

    SQL中的JOIN操作是数据库查询中不可或缺的部分,特别是LEFT JOIN和RIGHT JOIN,它们允许我们合并来自多个表的数据,根据特定的关联条件。以下是这些JOIN类型详细解释: 1. INNER JOIN(或简写JOIN): INNER JOIN...

    SQL学习八-LEFT JOIN && RIGHT JOIN

    SQL学习八-LEFT JOIN && RIGHT JOIN

    SQL 外链接操作小结 inner join left join right join

    SQL 外链接操作小结 inner join left join right join SQL 外链接操作是关系型数据库管理系统中的一种基本操作,用于从多个表中检索数据。外链接操作可以分为三种:inner join、left join 和 right join。 inner ...

    SQL语句优化——in,not in,exists,not exists, left join...on博客所需SQL语句.txt

    SQL语句优化——in,not in,exists,not exists, left join...on博客所需SQL语句.txt欢迎下载!

    sql语句中join的用法

    在SQL查询语言中,`JOIN`是一个非常重要的概念,它允许我们从两个或多个表中提取数据。通过使用不同类型的JOIN操作,我们可以根据表之间的关系来灵活地组织数据。下面我们将详细介绍几种常见的JOIN类型:内连接...

    SQL中JOIN的使用详解

    ### SQL中JOIN的使用详解 在SQL查询语言中,`JOIN`操作是非常重要的一个部分,它主要用于合并两个或多个表中的数据。通过不同的`JOIN`类型,我们可以灵活地获取所需的组合数据。本文将详细介绍五种主要的`JOIN`类型...

Global site tag (gtag.js) - Google Analytics