Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL Developer中的连接表_Sql_Oracle_Join - Fatal编程技术网

Oracle SQL Developer中的连接表

Oracle SQL Developer中的连接表,sql,oracle,join,Sql,Oracle,Join,我有四个表,我想连接它们并一起显示输出。我不确定Oracle SQL Developer的语法是如何工作的。我知道这对于程序员来说是一个简单的问题,我希望有人能对代码的外观提出建议 表格包括: JNL1 JNL2 JNL3 JNL4 这四个表之间的共同键是ItemID 查询是什么样子的?谢谢如果您想输出所有表中的行,并且如果每个表中的列都相同,UNION all将起作用。注意,这不是数据库意义上的JOIN,尽管它有点像英语意义上的JOIN: SELECT * FROM JNL1 UNION A

我有四个表,我想连接它们并一起显示输出。我不确定Oracle SQL Developer的语法是如何工作的。我知道这对于程序员来说是一个简单的问题,我希望有人能对代码的外观提出建议

表格包括:

JNL1
JNL2
JNL3
JNL4
这四个表之间的共同键是
ItemID


查询是什么样子的?谢谢

如果您想输出所有表中的行,并且如果每个表中的列都相同,
UNION all
将起作用。注意,这不是数据库意义上的
JOIN
,尽管它有点像英语意义上的JOIN:

SELECT * FROM JNL1
UNION ALL SELECT * FROM JNL2
UNION ALL SELECT * FROM JNL3
UNION ALL SELECT * FROM JNL4
如果需要,您可以在末尾添加一个
ORDER BY


UNION
类似于
UNION ALL
,但它将忽略所有值都重复的行。

这实际上取决于您想要的联接类型(外部联接或非外部联接),但您可以使用默认SQL语法

例如,不使用
JOIN
关键字进行连接:

select * from JNL1, JNL2, JNL3, JNL4,
where 
JNL1.ItemID = JNL2.ItemID AND
JNL2.ItemID = JNL3.ItemID AND
JNL3.ItemID = JNL4.ItemID;
此外,您还可以使用多个
内部联接
,例如

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中工作,就像在其他DB引擎中一样:

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语法:

标准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(+)

语法不是由工具(SQL Developer)决定的,而是由数据库系统(Oracle)决定的。查看有关如何编写联接的Oracle手册:当我运行时,它给了我一个错误:使用UNION、INTERSECT或EXCEPT运算符组合的所有查询在其目标listsOK中必须具有相同数量的表达式,这基本上意味着我误解了您的问题。我想您可能是指“附加”意义上的“连接”-我猜是因为没有表定义,我猜错了:)其他答案使用实际的数据库连接,所以它们可能就是您想要的。