这两个连接都会给我相同的结果:
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实现之间是否有所不同?
CROSS JOIN和之间有什么区别INNER JOIN?
交叉加入:
SELECT
Movies.CustomerID, Movies.Movie, Customers.Age,
Customers.Gender, Customers.[Education Level],
Customers.[Internet Connection], Customers.[Marital Status],
FROM
Customers
CROSS JOIN
Movies
Run Code Online (Sandbox Code Playgroud)
内部联接:
SELECT
Movies.CustomerID, Movies.Movie, Customers.Age,
Customers.Gender, Customers.[Education Level],
Customers.[Internet Connection], Customers.[Marital Status]
FROM
Customers
INNER JOIN
Movies ON Customers.CustomerID = Movies.CustomerID
Run Code Online (Sandbox Code Playgroud)
哪一个更好,为什么我会使用其中一个?
我查看了文档,并说它支持以下连接类型:
要执行的联接类型.默认内心.必须是以下之一:inner,cross,outer,full,full_outer,left,left_outer,right,right_outer,left_semi,left_anti.
我查看了关于SQL连接的StackOverflow答案,并且顶部几个答案没有提到上面的一些连接,例如left_semi和left_anti.他们在Spark中意味着什么?
scala apache-spark apache-spark-sql spark-dataframe apache-spark-2.0
示例查询,
SELECT a.driverID, a.dCarID, a.dDeviceID, b.carRegiNum FROM driverProfile a, carProfile b WHERE a.dManagerID = 7 AND b.carID=a.dCarID
Run Code Online (Sandbox Code Playgroud)
查询在 MySQL 上运行良好。driverProfile 和 carProfile 是两个单独的表。如果您需要更多说明,请发表评论。我被困在这里了。
感谢帮助。谢谢。
我是MySQL的新手,只有当两个表中的手机号码相同时,我才想从两个表中返回数据.我不想要任何null价值观.我怎样才能做到这一点?
例:
Table A
UserID CandidateName CurrentMobile CurrentDistrict Email Centre
1 Max 98234 Chennai aaa@a.com A
2 Raju 97364 Salem bbb@b.com B
3 Ramesh 99873 Trichy ccc@c.com C
Run Code Online (Sandbox Code Playgroud)
Table B
Name MobileNumber District
Maximus 98234 Salem
Ramesh 99873 Trichy
Venkat 98376 Chennai
Run Code Online (Sandbox Code Playgroud)
我想要以下结果:
UserID CandidateName Name CurrentDistrict District Email Centre MobileNumber
1 Max Maximus Chennai Salem aaa@a.com A 98234
3 Ramesh Ramesh Trichy Trichy ccc@c.com C 99873
Run Code Online (Sandbox Code Playgroud)
我尝试使用UNION,但它null在某些列中提供值,并返回两个表中的所有数据.
我有三张桌子:
工作
JobId
StartDate
RehireDate
Run Code Online (Sandbox Code Playgroud)
证件
PaperworkId
DocumentName
Run Code Online (Sandbox Code Playgroud)
JobPaperwork
JobId
PaperworkId
Completed
Run Code Online (Sandbox Code Playgroud)
我需要找到没有为其分配具有特定文档名称的文档的任何作业.我不确定如何构造此查询.使用NOT IN不起作用,因为它返回每个作业,因为它正在找到分配给他们的其他文书工作的作业.
这是我开始的:
select j.jobid
from Job j
inner join JobPaperwork jp on j.JobId = jp.JobID
where j.startdate > dateadd(day, -30, getdate())
and j.rehiredate is not null
and jp.PaperworkID not in (select paperworkid
from Paperwork
where documentname like '%searchterm%')
Run Code Online (Sandbox Code Playgroud) 我一直想知道结果是否会在多连接表查询中发生变化.
如果您有父表A
A B
ID|FID FID
1|2 1
2|4 2
3|5 3
4|7 4
5|8 5
6|NULL 6
7|NULL 7
8|NULL 8
Run Code Online (Sandbox Code Playgroud)
你在WHERE子句中指定了哪个表列是否重要?例如,两者之间有什么区别:
Select *
From Table A
Left Join B on A.FID = B.FID
WHERE A.FID IN (2,5,8)
Select *
From Table A
Left Join B on A.FID = B.FID
WHERE B.ID IN (2,5,8)
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助!
编辑:迈克尔已经解决了我的问题,我已经测试了它
"实际上,虽然你的答案很好(可能是他正在寻找的那个),但由于他的两个查询基本上都是对B的主键(A.FID,B.ID)进行过滤,因此它们在逻辑上是相同的(假设A.FID是B)的真正外键约束.也就是说,两个查询都会过滤掉B.ID不是2,5或8的行. - 迈克尔L.
唯一不同的是表B是主表,并且您基于B.ID查询,如:
SELECT *
FROM B
LEFT JOIN A ON A.FID = B.FID
WHERE B.FID IN (2,5,8)
Run Code Online (Sandbox Code Playgroud)
虽然这与将A作为主表相同:
SELECT *
FROM …Run Code Online (Sandbox Code Playgroud) 我有一个表用户(用户 ID、用户名、密码等)、一个表课程(课程 ID、课程名称等)和一个表 student_favouriteCourses(用户 ID、课程 ID)//两者都作为主键
如果我知道用户的 ID,我想搜索他最喜欢的所有课程。你能帮我查询加入吗?
sql ×6
sql-server ×4
join ×2
mysql ×2
apache-spark ×1
cross-join ×1
inner-join ×1
knex.js ×1
scala ×1
t-sql ×1