此外怎么办LEFT JOIN,RIGHT JOIN和FULL JOIN适合吗?
我知道SQL Server中的连接.
例如.Table1,Table2有两个表.
他们的桌子结构如下.
create table Table1 (id int, Name varchar (10))
create table Table2 (id int, Name varchar (10))
Run Code Online (Sandbox Code Playgroud)
表1数据如下:
Id Name
-------------
1 A
2 B
Run Code Online (Sandbox Code Playgroud)
表2数据如下:
Id Name
-------------
1 A
2 B
3 C
Run Code Online (Sandbox Code Playgroud)
如果我执行下面提到的两个SQL语句,则两个输出都是相同的
select *
from Table1
left join Table2 on Table1.id = Table2.id
select *
from Table2
right join Table1 on Table1.id = Table2.id
Run Code Online (Sandbox Code Playgroud)
请解释上述SQL语句中左右连接的区别.
交叉连接在两组元组上执行笛卡尔积.
SELECT *
FROM Table1
CROSS JOIN Table2
Run Code Online (Sandbox Code Playgroud)
哪种情况下这样的SQL操作特别有用?
每当我们面前有任何查询描述时,我们都会尝试应用启发式和头脑风暴来构建查询。
是否有任何系统的分步或数学方法可以根据给定的人类可读描述构建 SQL 查询?
例如,如何确定 SQL 查询是否需要联接而不是子查询、是否需要 group by、是否需要 IN 子句等等。
例如,任何研究数字电子学的人都会知道卡诺图或奎因·麦克劳斯基方法等方法。这些是简化数字逻辑的一些系统方法。
是否有类似这样的方法来手动分析sql查询以避免每次头脑风暴?
我的数据库教授告诉我们使用:
SELECT A.a1, B.b1 FROM A, B WHERE A.a2 = B.b2;
Run Code Online (Sandbox Code Playgroud)
而不是:
SELECT A.a1, B.b1 FROM A INNER JOIN B ON A.a2 = B.b2;
Run Code Online (Sandbox Code Playgroud)
据推测,Oracle不喜欢JOIN-Syntaxes,因为这些JOIN语法比笛卡尔积的WHERE限制更难优化.
我无法想象为什么会出现这种情况.唯一的性能问题可能是解析器需要更多地解析几个字符.但在我眼里,这一点可以忽略不计.
我发现了这个Stack Overflow问题:
这篇文章在Oracle文档中:https://docs.oracle.com/cd/B19306_01/server.102/b14200/queries006.htm
Oracle建议您使用FROM子句OUTER JOIN语法而不是Oracle join运算符.
有人可以通过链接向我提供Oracle的最新建议.因为她不承认StackOverflow(这里可以回答所有人),10g文档在这里是过时的.
如果我错了,Oracle真的不喜欢JOINS现在比那还好,但是我找不到文章.我只是想知道谁是对的.
非常感谢能帮助我的每个人!
我在 MS Access 中有两个表,用于跟踪班级辅导员和他们辅导的班级。这两个表的结构如下:
tbl_促进者
facilID -> a unique autonumber to keep track of individual teachers
facilLname -> the Last name of the facilitator
facilFname -> the First name of the facilitator
Run Code Online (Sandbox Code Playgroud)
tbl_facilitatorClasses
classID -> a unique autonumber to keep track of individual classes
className -> the name of the class (science, math, etc)
primeFacil -> the facilID from the first table of a teacher who is primary facilitator
secondFacil -> the facilID from the first table of another teacher …Run Code Online (Sandbox Code Playgroud) 有什么不同?
SELECT a.name, b.name
FROM a, b;
SELECT a.name, b.name
FROM a
CROSS JOIN b;
Run Code Online (Sandbox Code Playgroud)
如果没有区别那为什么两者都存在呢?
我一直在尝试完全理解 sql 连接的概念,维恩图在这方面帮助了我很多。我发现它们适用于所有类型的连接,但不适用于自然连接。
自然连接的维恩图是什么样子的?
我的SQL Server数据库中有3个表.
它们链接在一起,如图所示(线条连接到图片中的右侧行)

我有一个查询,它应该返回所有补偿tblreparations信息,其中包含有关修复内容的一些信息,但它会返回3次修复,一次为客户端(荷兰语中的klant)分配给它的每台笔记本电脑,而补偿表(荷兰语的修理)laptopID每行只包含一个
这是查询:
SELECT AankopenReparaties.Id,
AankopenReparaties.KlantenId,
AankopenReparaties.actietype,
AankopenReparaties.voorwerptype,
laptopscomputers.merk,
laptopscomputers.model,
laptopscomputers.info,
AankopenReparaties.info,
AankopenReparaties.Prijs,
AankopenReparaties.lopend
FROM AankopenReparaties, laptopscomputers
WHERE (aankopenreparaties.lopend = 'lopend');
Run Code Online (Sandbox Code Playgroud)
它返回这个

它应该只有一行,因为赔偿表(aankopenreparaties)只包含一行一个 laptopID
有谁知道如何解决这一问题?
请帮助,因为它应尽快修复(这是学校的任务)
我试图过滤我的结果,只显示一个住在特定城市酒店的人的名字。到目前为止我所拥有的是
select guestName
from Guest
join Hotels on hotelNo=1
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,结果页面会列出数据库中的每个来宾名称,而不是留在hotelNo1 中的名称。
我有两个桌子,旅馆和兴趣点。我想找出每家酒店与每种兴趣之间的距离。我尝试使用CROSS JOIN,但是老板告诉我不要使用CROSS JOIN。还有其他办法吗?隐式联接和ON 1 = 1也不允许。有人告诉我要使用联接和方括号,但我不了解如何在不使用交叉联接的情况下执行交叉联接。我正在使用oracle sql
CROSS JOIN 和 INNER JOIN 有什么区别?IE
Run Code Online (Sandbox Code Playgroud)table 1 +ID +NAME + LAST__NAME +-----+-----+----------- +1 +John + Doe +2 +Phil + Smith +3 +Jane + Peterson table2 +ID+Department +--+---------- +1 + TI +2 + Sales +3 + TI
SELECT *
FROM table1
INNER JOIN table2
ON table1.id=table2.id;
SELECT *
FROM table1
CROSS JOIN table2
Run Code Online (Sandbox Code Playgroud)
我想知道结果之间有什么区别
sql ×12
join ×8
database ×6
inner-join ×3
sql-server ×3
oracle ×2
cross-join ×1
heuristics ×1
left-join ×1
ms-access ×1
mysql ×1
natural-join ×1
outer-join ×1
performance ×1
postgresql ×1
right-join ×1
self-join ×1
union ×1
venn-diagram ×1
where-clause ×1