在显式vs隐式内连接中是否存在效率差异?例如:
SELECT * FROM
table a INNER JOIN table b
ON a.id = b.id;
Run Code Online (Sandbox Code Playgroud)
与
SELECT a.*, b.*
FROM table a, table b
WHERE a.id = b.id;
Run Code Online (Sandbox Code Playgroud) 我正在检查一些旧的SQL语句,以便记录它们并可能增强它们.
DBMS是Oracle
我不明白这样的陈述:
select ...
from a,b
where a.id=b.id(+)
Run Code Online (Sandbox Code Playgroud)
我对(+)操作员感到困惑,并且无法在任何论坛上得到它...(在引号内搜索+也不起作用).
无论如何,我使用了SQLDeveloper的"解释计划",我得到了一个输出说HASH JOIN, RIGHT OUTER,等等.
如果我(+)在查询结束时删除运算符会有什么不同吗?数据库是否必须满足某些条件((+)如有一些索引等)才可以使用?如果你能给我一个简单的理解,或者我能读到的一些好的链接,那将会非常有帮助.
谢谢!
在我们正在迁移(通用化)的基于Oracle的应用程序中找到以下内容:
SELECT
Table1.Category1,
Table1.Category2,
count(*) as Total,
count(Tab2.Stat) AS Stat
FROM Table1, Table2
WHERE (Table1.PrimaryKey = Table2.ForeignKey(+))
GROUP BY Table1.Category1, Table1.Category2
Run Code Online (Sandbox Code Playgroud)
(+)在WHERE子句中做什么?我以前从未见过这样的用法.
我遇到过这样的代码,我需要使用ANSI标准重新编写,我想确保我保持连接正确.那么,这是什么惯例?
使用此约定的其他类型连接的语法是什么?
使用这个约定,(+) 总是在表达式的右边?
我在哪里可以了解更多相关信息?
我想知道SQL中的这个语句实际上是做什么的:
select *
from table
where A (+)= B
Run Code Online (Sandbox Code Playgroud)
我反对:
select *
from table
where A = B
Run Code Online (Sandbox Code Playgroud)
并看到了差异,但不知道如何形成关于(+)=的功能的解释.在我看来,(+)=告诉它使其满足条件A = B可用,如果组件不可用则忽略/输入为"空".
此外,此语句在create view语句中运行.
提前致谢.
我正在努力将Oracle Sql查询转换为Linq,并且不确定如何继续.这是Sql查询:
SELECT *
FROM CustomerShip,
(SELECT DISTINCT b.ShipSeq AS shipSeq
FROM Orders a,
CustomerShip b
WHERE a.OrderId IN (SELECT OrderId
FROM Orders
WHERE CustomerId = @CustomerId
AND OrderType <> 'A')
AND b.CustomerId = @CustomerId
AND b.ShipSeq = a.CustShip
AND OrderStatus <> 'C'
GROUP BY b.ShipSeq) i
WHERE CustomerId = @CustomerId
AND (Address NOT LIKE '%RETAIL%STORE%')
AND ShipSeq = i.ShipSeq(+)
ORDER BY ShipTo DESC, OrderDate DESC;
Run Code Online (Sandbox Code Playgroud)
转换为linq时,我试图将其分解为三个单独的查询.
var query1 = from c in CustomerShip
where c.CustomerId == customerId
&& !c.Address.Contains("RETAIL") …Run Code Online (Sandbox Code Playgroud)