这篇文章主要围绕从SQLServer中的JOIN结果获取不同的行展开,旨在为您提供一份详细的参考资料。我们将全面介绍从SQLServer中的JOIN结果获取不同的行,同时也会为您带来SQLServer
这篇文章主要围绕从SQL Server中的JOIN结果获取不同的行展开,旨在为您提供一份详细的参考资料。我们将全面介绍从SQL Server中的JOIN结果获取不同的行,同时也会为您带来SQL Server SQL中的left join right join、SQL Server SQL的Join使用图解教程、SQL Server 中的 INNER JOIN 与 LEFT JOIN 性能、SQL Server 中的 INNER JOIN 与 LEFT JOIN 性能 - INNER JOIN vs LEFT JOIN performance in SQL Server的实用方法。
本文目录一览:- 从SQL Server中的JOIN结果获取不同的行
- SQL Server SQL中的left join right join
- SQL Server SQL的Join使用图解教程
- SQL Server 中的 INNER JOIN 与 LEFT JOIN 性能
- SQL Server 中的 INNER JOIN 与 LEFT JOIN 性能 - INNER JOIN vs LEFT JOIN performance in SQL Server
从SQL Server中的JOIN结果获取不同的行
我有两个表,一个用于存储Album_Name
,另一个用于存储Album_Photos
我想编写一个查询,以便它可以为我提供以下详细信息
Album_Name Album_ID Album_Date ImageSmall
Album One 1 2013-08-02 100.jpg
Album Two 2 2013-09-09 55.jpg
我想从细节专辑详情Album_Name
表,第一图像这我不是分配给从相册Album_Photo
表
我尝试了不适用于的JOINS,然后我创建了一个视图将遵循SQL,这是行不通的
SELECT
a.Album_Name AS Album_Name,a.Album_Date AS Album_Date,a.Page_ID AS PageID,p.Image_ID AS Image_ID,p.Image_Small AS Image_Small
FROM
Album_Name a
LEFT OUTER JOIN
Album_Photos p ON a.Album_ID = p.Album_ID
我尝试DISTINCT Album_Name
过查看它是否使我与上面的语句在同一行
SELECT
DISTINCT [Album_Name],Album_Date,Page_ID,Image_Small
FROM
vw_AlbumName_AlbumPhotos
WHERE
Page_ID = 3
样本数据Album_Name
和Album_Photos
表格
Album_ID Album_Name Album_Date Page_ID
1 Album One 2013-08-02 3
2 Album Two 2013-09-09 3
3 Album Three 2013-09-10 9
Image_ID Page_ID Album_ID ImageSmall
1 0 1 100.jpg
2 0 1 21.jpg
3 0 1 36.jpg
4 0 1 44.jpg
5 0 2 55.jpg
6 0 2 66.jpg
7 0 3 10.jpg
任何帮助表示赞赏。
SQL Server SQL中的left join right join
感兴趣的小伙伴,下面一起跟随小编 jb51.cc的小编两巴掌来看看吧!
以下是它们的共同点:1. 关于左右表的概念。左表指的是在sql语句中排在left join左边的表,右表指的是排在left join右边的表。
2. 在拼成的大表中,左表排在左边,右表排在右边。
3. on条件语句最好用=号对两表相应的主外键进行连接。当然,也可以用其他操作符,如>,<,来连接两表的任一字段,此时的关系将非常复杂,连接后的记录数也随之而变得不确定。如果在一些特殊的场合中需要用到这种方式,必须通过简单的实例加以确认,否则,连接结果很可能不是我们所想要的!
4. on条件语句不能省略。
5. 可以连锁使用join,每次使用join都令另一表与当前的表或连接的结果相连接。
在下文中,用到了两个表,部门表与组织表,其中,部门表有一名为组织编号的外键,指向组织表中的主键编号。
inner join
格式:select * from 部门 inner join 组织 on 部门.组织编号 = 组织.编号
目的:将两表中符合on条件的所有记录都找出来。
规律:
1. 拼出的大表记录不会增加。
2. 如果左边与右表的关系是一对多的关系,在选出的任一记录中,假若右表有多个记录与其对应,那么,连接后的左表,主键将不再唯一。
典型应用:将存在多关系的引用表放在左表,将存在一关系的被引用表放在右表,通过=号将主外键进行连接,通过对右表设定过滤条件,选出相应的且主键唯一的左表记录。
备注:inner join 是默认的连接方式,可缩写为join。
转化为where子句:
select * from 部门,组织 where 部门.组织编号 = 组织.编号
left outter join
格式: select * from 部门 left join 组织 on 部门.组织编号 = 组织.编号
格式: select * from 组织 left join 部门 on 组织.编号 = 部门.组织编号
目的:将左表的所有记录列出,右表中只要符合on条件的,与左表记录相拼合,不符合条件的,填以null值。
规律:
1. 选出所有符合条件的左表,如果左边与右表的关系是一对一的关系,则拼成的大表记录不会改变。
如果左边与右表的关系是多对一的关系,则拼成的大表记录也不会改变。
如果左边与右表的关系是一对多的关系,则拼成的大表记录会增加。对于每一具有一对多关系的左表记录,如果左表1:N与右表对应,那么会多出N-1条记录。例如,如果左表第一条记录1:3对应于右表,多出2条记录。如果左表第二条记录1:2对应于右表,则再多出1条记录。这样,总共多出3条记录。其他类推。
2. 如果左边与右表的关系是一对多的关系,在选出的任一记录中,假若右表有多个记录与其对应,那么,连接后的左表,主键将不再唯一。
3. 如果左边与右表的关系是一对多的关系,对于左表任一记录,如果右表没有记录与其相对应,则全部填以null值。
典型应用:将存在多关系的引用表放在左表,将存在一关系的被引用表放在右表,通过对右表设定过滤条件,选出相应的且主键唯一的左表记录。
备注:left outter join可用left join代替。在有些数据库中,如HsqlDb,只能使用left join而不能使用left outter join。
转化为where子句:
select * from 部门,组织 where 部门.组织编号 = 组织.编号
right outter join
格式: select * from 部门 right join 组织 on 部门.组织编号 = 组织.编号
格式: select * from 组织 right join 部门 on 部门.组织编号 = 组织.编号
目的:将右表的所有记录列出,左表中只要符合on条件的,与右表记录相拼合,不符合条件的,填以null值。
规律:(与left outter join相反)
典型应用:可转化成left outter join。例如
select * from 组织 right join 部门 on 部门.组织编号 = 组织.编号
与
select * from 部门 left join 组织 on 部门.组织编号 = 组织.编号
的效果一样
SQL Server SQL的Join使用图解教程
感兴趣的小伙伴,下面一起跟随小编 jb51.cc的小编两巴掌来看看吧!
对于sql的Join,在学习起来可能是比较乱的。我们知道,sql的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚。Coding Horror上有一篇文章(实在不清楚为什么Coding Horror也被墙)通过 文氏图 venn diagrams 解释了sql的Join。我觉得清楚易懂,转过来。假设我们有两张表。
Table A 是左边的表。
Table B 是右边的表。
其各有四条记录,其中有两条记录是相同的,如下所示:
代码如下:
id name id name
-- ---- -- ----
1 Pirate 1 Rutabaga
2 Monkey 2 Pirate
3 Ninja 3 Darth Vader
4 Spaghetti 4 Ninja
下面让我们来看看不同的Join会产生什么样的结果。
SELECT * FROM TableA id name id name |
【图片暂缺】 |
SELECT * FROM TableA id name id name
|
【图片暂缺】 |
SELECT * FROM TableA id name id name |
【图片暂缺】 |
SELECT * FROM TableA id name id name |
【图片暂缺】 |
SELECT * FROM TableA id name id name |
【图片暂缺】 |
代码如下:
SELECT * FROM TableA
CROSS JOIN TableB
这个笛卡尔乘积会产生 4 x 4 = 16 条记录,一般来说,我们很少用到这个语法。但是我们得小心,如果不是使用嵌套的select语句,一般系统都会产生笛卡尔乘积然再做过滤。这是对于性能来说是非常危险的,尤其是表很大的时候。
SQL Server 中的 INNER JOIN 与 LEFT JOIN 性能
我已经创建了在 9 个表上使用 INNER JOIN 的 SQL 命令,无论如何这个命令需要很长时间(超过五分钟)。所以我的人建议我将 INNER JOIN
更改为 LEFT JOIN,因为 LEFT JOIN 的性能更好,尽管我知道。修改后,查询速度明显提升。
我想知道为什么 LEFT JOIN 比 INNER JOIN 快?
我的 SQL 命令如下所示: SELECT * FROM A INNER JOIN B ON ... INNER JOIN C ON ... INNER
JOIN D
等等
更新: 这是我的架构的简要说明。
FROM sidisaleshdrmly a -- NOT HAVE PK AND FK
INNER JOIN sidisalesdetmly b -- THIS TABLE ALSO HAVE NO PK AND FK
ON a.CompanyCd = b.CompanyCd
AND a.SPRNo = b.SPRNo
AND a.SuffixNo = b.SuffixNo
AND a.dnno = b.dnno
INNER JOIN exFSlipDet h -- PK = CompanyCd,FSlipNo,FSlipSuffix,FSlipLine
ON a.CompanyCd = h.CompanyCd
AND a.sprno = h.AcctSPRNo
INNER JOIN exFSlipHdr c -- PK = CompanyCd,FSlipSuffix
ON c.CompanyCd = h.CompanyCd
AND c.FSlipNo = h.FSlipNo
AND c.FSlipSuffix = h.FSlipSuffix
INNER JOIN coMappingExpParty d -- NO PK AND FK
ON c.CompanyCd = d.CompanyCd
AND c.CountryCd = d.CountryCd
INNER JOIN coProduct e -- PK = CompanyCd,ProductSalesCd
ON b.CompanyCd = e.CompanyCd
AND b.ProductSalesCd = e.ProductSalesCd
LEFT JOIN coUOM i -- PK = UOMId
ON h.UOMId = i.UOMId
INNER JOIN coProductOldInformation j -- PK = CompanyCd,BFStatus,SpecCd
ON a.CompanyCd = j.CompanyCd
AND b.BFStatus = j.BFStatus
AND b.ProductSalesCd = j.ProductSalesCd
INNER JOIN coProductGroup1 g1 -- PK = CompanyCd,ProductCategoryCd,UsedDepartment,ProductGroup1Cd
ON e.ProductGroup1Cd = g1.ProductGroup1Cd
INNER JOIN coProductGroup2 g2 -- PK = CompanyCd,ProductGroup2Cd
ON e.ProductGroup1Cd = g2.ProductGroup1Cd
SQL Server 中的 INNER JOIN 与 LEFT JOIN 性能 - INNER JOIN vs LEFT JOIN performance in SQL Server
问题:
I''ve created SQL command that uses INNER JOIN on 9 tables, anyway this command takes a very long time (more than five minutes).我已经创建了在 9 个表上使用 INNER JOIN 的 SQL 命令,无论如何这个命令需要很长时间(超过五分钟)。 So my folk suggested me to change INNER JOIN to LEFT JOIN because the performance of LEFT JOIN is better, despite what I know.所以我的朋友建议我将 INNER JOIN 改为 LEFT JOIN 因为 LEFT JOIN 的性能更好,尽管我知道。 After I changed it, the speed of query got significantly improved.改了之后,查询速度明显提高了。
I would like to know why LEFT JOIN is faster than INNER JOIN?我想知道为什么 LEFT JOIN 比 INNER JOIN 快?
My SQL command look like below: SELECT * FROM A INNER JOIN B ON ... INNER JOIN C ON ... INNER JOIN D
and so on我的 SQL 命令如下所示: SELECT * FROM A INNER JOIN B ON ... INNER JOIN C ON ... INNER JOIN D
等等
Update: This is brief of my schema.更新:这是我的架构简介。
FROM sidisaleshdrmly a -- NOT HAVE PK AND FK
INNER JOIN sidisalesdetmly b -- THIS TABLE ALSO HAVE NO PK AND FK
ON a.CompanyCd = b.CompanyCd
AND a.SPRNo = b.SPRNo
AND a.SuffixNo = b.SuffixNo
AND a.dnno = b.dnno
INNER JOIN exFSlipDet h -- PK = CompanyCd, FSlipNo, FSlipSuffix, FSlipLine
ON a.CompanyCd = h.CompanyCd
AND a.sprno = h.AcctSPRNo
INNER JOIN exFSlipHdr c -- PK = CompanyCd, FSlipNo, FSlipSuffix
ON c.CompanyCd = h.CompanyCd
AND c.FSlipNo = h.FSlipNo
AND c.FSlipSuffix = h.FSlipSuffix
INNER JOIN coMappingExpParty d -- NO PK AND FK
ON c.CompanyCd = d.CompanyCd
AND c.CountryCd = d.CountryCd
INNER JOIN coProduct e -- PK = CompanyCd, ProductSalesCd
ON b.CompanyCd = e.CompanyCd
AND b.ProductSalesCd = e.ProductSalesCd
LEFT JOIN coUOM i -- PK = UOMId
ON h.UOMId = i.UOMId
INNER JOIN coProductOldInformation j -- PK = CompanyCd, BFStatus, SpecCd
ON a.CompanyCd = j.CompanyCd
AND b.BFStatus = j.BFStatus
AND b.ProductSalesCd = j.ProductSalesCd
INNER JOIN coProductGroup1 g1 -- PK = CompanyCd, ProductCategoryCd, UsedDepartment, ProductGroup1Cd
ON e.ProductGroup1Cd = g1.ProductGroup1Cd
INNER JOIN coProductGroup2 g2 -- PK = CompanyCd, ProductCategoryCd, UsedDepartment, ProductGroup2Cd
ON e.ProductGroup1Cd = g2.ProductGroup1Cd
解决方案:
参考一: https://stackoom.com/question/BRKL参考二: INNER JOIN vs LEFT JOIN performance in SQL Server
今天关于从SQL Server中的JOIN结果获取不同的行的介绍到此结束,谢谢您的阅读,有关SQL Server SQL中的left join right join、SQL Server SQL的Join使用图解教程、SQL Server 中的 INNER JOIN 与 LEFT JOIN 性能、SQL Server 中的 INNER JOIN 与 LEFT JOIN 性能 - INNER JOIN vs LEFT JOIN performance in SQL Server等更多相关知识的信息可以在本站进行查询。
本文标签: