我有四个表要加入并一起显示输出。我不确定 Oracle SQL Developer 的语法是如何工作的。我知道这对程序员来说是一个简单的问题,我希望有人可以就代码的外观提出建议。
这些表是:
JNL1
JNL2
JNL3
JNL4
所有这四个表之间的共同键是ItemID
.
查询会是什么样子?谢谢
这真的取决于你想要什么样的连接(外部或不),但你可以使用默认的 SQL 语法。
例如,不使用JOIN
关键字加入:
select * from JNL1, JNL2, JNL3, JNL4,
where
JNL1.ItemID = JNL2.ItemID AND
JNL2.ItemID = JNL3.ItemID AND
JNL3.ItemID = JNL4.ItemID;
此外,您可以使用多个INNER JOINS
例如
SELECT whatever
FROM JNL1 AS a
INNER
JOIN JNL2 AS b
ON b.ItemID = a.ItemID
INNER
JOIN JNL2 AS c
ON c.ItemID = b.ItemID
INNER
JOIN JNL2 AS d
ON d.ItemID = c.ItemID
它在 Oracle 中的工作方式与在其他数据库引擎中一样:
SELECT *
FROM JNL1 j1
INNER JOIN JNL2 j2 ON j1.ItemID = j2.ItemID
INNER JOIN JNL3 j3 ON j1.ItemID = j3.ItemID
INNER JOIN JNL4 j4 ON j1.ItemID = j4.ItemID
当您需要时,存在一种典型的 Oracle 语法LEFT JOIN
:
标准 SQL:
SELECT *
FROM JNL1 j1
LEFT JOIN JNL2 j2 ON j1.ItemID = j2.ItemID
LEFT JOIN JNL3 j3 ON j1.ItemID = j3.ItemID
LEFT JOIN JNL4 j4 ON j1.ItemID = j4.ItemID
等效于以下 Oracle 语法:
SELECT *
FROM JNL1 j1,
JNL2 j2,
JNL3 j3,
JNL4 j4,
WHERE j1.ItemID=j2.ItemID(+)
AND j1.ItemID=j3.ItemID(+)
AND j1.ItemID=j4.ItemID(+)
如果要输出所有表中的行,并且每个表中的列相同,UNION ALL
则可以。请注意,这不是JOIN
数据库意义上的,尽管它有点是英语意义上的:
SELECT * FROM JNL1
UNION ALL SELECT * FROM JNL2
UNION ALL SELECT * FROM JNL3
UNION ALL SELECT * FROM JNL4
ORDER BY
如果需要,您可以在末尾添加一个。
UNION
类似于UNION ALL
,但它将省略所有值都重复的行。