此外怎么办LEFT JOIN,RIGHT JOIN和FULL JOIN适合吗?
这两个连接都会给我相同的结果:
SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK
Run Code Online (Sandbox Code Playgroud)
VS
SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK
Run Code Online (Sandbox Code Playgroud)
表现或其他方面的陈述是否有任何区别?
不同的SQL实现之间是否有所不同?
无视性能,我会从下面的查询A和B得到相同的结果吗?C和D怎么样?
-- A
select *
from a left join b
on <blahblah>
left join c
on <blahblan>
-- B
select *
from a left join c
on <blahblah>
left join b
on <blahblan>
-- C
select *
from a join b
on <blahblah>
join c
on <blahblan>
-- D
select *
from a join c
on <blahblah>
join b
on <blahblan>
Run Code Online (Sandbox Code Playgroud) 在我看来,你可以使用NOT EXISTS,NOT IN或LEFT JOIN WHERE为NULL在SQL查询中做同样的事情.例如:
SELECT a FROM table1 WHERE a NOT IN (SELECT a FROM table2)
SELECT a FROM table1 WHERE NOT EXISTS (SELECT * FROM table2 WHERE table1.a = table2.a)
SELECT a FROM table1 LEFT JOIN table2 ON table1.a = table2.a WHERE table1.a IS NULL
Run Code Online (Sandbox Code Playgroud)
我不确定我的语法是否正确,但这些是我见过的一般技术.为什么我会选择使用一个而不是另一个?性能有所不同......?哪一个是最快/最有效的?(如果它取决于实施,我何时会使用每一个?)
我在理解sql中的连接时遇到了麻烦,并且遇到了这个我认为可能对我有用的图像.问题是我不完全理解它.例如,图像右上角的连接,它将整个B圆圈的颜色设置为红色,但只有A的重叠.图像使得它看起来像圆圈B是sql语句的主要焦点,但是sql语句本身,从A开始(从A中选择,加入B),向我传达了相反的印象,即A将成为sql语句的焦点.
同样,下面的图像只包含来自B圈的数据,那么为什么在连接语句中包含A呢?
问题:从右上角顺时针工作并在中心完成,有人可以提供有关每个sql图像表示的更多信息,解释
a)为什么在每种情况下都需要连接(例如,特别是在没有数据来自A或B的情况下,即只有A或B而不是两者都被着色的情况)
b)以及任何其他细节可以澄清为什么图像是sql的良好表示

我知道连接的用法,但有时当我无法确定哪个连接适合左边或右边时,我会遇到这种情况.
这是我被困的查询.
SELECT count(ImageId) as [IndividualRemaining],
userMaster.empName AS ID#,
CONVERT(DATETIME, folderDetails.folderName, 101) AS FolderDate,
batchDetails.batchName AS Batch#,
Client=@ClientName,
TotalInloaded = IsNull(@TotalInloaded,0),
PendingUnassigned = @PendingUnassigned,
InloadedAssigned = IsNull(@TotalAssigned,0),
TotalProcessed = @TotalProcessed,
Remaining = @Remaining
FROM
batchDetails
Left JOIN folderDetails ON batchDetails.folderId = folderDetails.folderId
Left JOIN imageDetails ON batchDetails.batchId = imageDetails.batchId
Left JOIN userMaster ON imageDetails.assignedToUser = userMaster.userId
WHERE folderDetails.ClientId =@ClientID and verifyflag='n'
and folderDetails.FolderName IN (SELECT convert(VARCHAR,Value) FROM dbo.Split(@Output,','))
and userMaster.empName <> 'unused'
GROUP BY userMaster.empName, folderDetails.folderName, …Run Code Online (Sandbox Code Playgroud) 我在尝试理解半连接的概念以及它与传统连接的不同之处时遇到了麻烦.我已经尝试了一些文章,但对解释不满意,请有人帮我理解一下吗?
我想提出一个简单的问题,这可能听起来真的很愚蠢,但我做了很多研究而且什么也听不懂.
想象一下,我有两个表(table1和table2)和两个列(table1.column1和table2.column2).
我想要做的基本上是这样的:
SELECT column1 FROM table1 where table2.column2 = '0'
Run Code Online (Sandbox Code Playgroud)
我不知道这是否可行.
提前致谢,
sql ×10
join ×6
database ×4
inner-join ×2
sql-server ×2
mysql ×1
mysqli ×1
oracle ×1
outer-join ×1
set-theory ×1
sqlite ×1
t-sql ×1
union ×1