此符号 (<>) 对此选择语句有何作用?



以下代码从数据库中检索了74,700行。

select * from Orders O
      inner join customers C
     on O.CustomerID <> c.CustomerID

= =检索830记录的相同代码。

 select * from Orders O
      inner join customers C
     on O.CustomerID = c.CustomerID

这是什么不等于符号对我的搜索查询?外部连接也有相同的区别。

谢谢。

<>是sql中的"非equals"操作员。

查询正在获取customerId列不同的所有对或订单和客户。您真正想要的可能是没有有效客户ID的订单:

select o.*
from orders o left join
     customers c
     on o.CustomerID = c.CustomerID
where c.CustomerId is null;

(实际上,如果您设置了适当的外键关系,这似乎不太可能。)

或更可能没有订单的客户:

select c.*
from customers c left join
     orders o 
     on o.CustomerID = c.CustomerID
where o.CustomerId is null;

on Operator

从逻辑上讲,每个SQL查询都是按以下顺序执行的:

FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY

您可以从MSDN的官方文档中进一步阅读有关此信息。选择(Transact-SQL)

这意味着on谓词与表之间的基本匹配有关,而WHERE子句过滤结果。

红衣主教平均值1:n或侧面匹配的数量。在您的示例中,ON A.CUSTOMER_ID = B.CUSTOMER_ID将返回从源表

的每个匹配集返回一行

LEFTRIGHT请参阅源表是哪个侧。默认情况下, 左被视为源表。

因此,如果表A有3行,则在ID = 3的位置,即使表B只有一个ID为3,您也会返回3行;表A中的每一行均分别处理。

良好的联接仅使用返回唯一连接所需的列数,以免返回不必要的重复值。即使您打算使用CROSS JOIN,您仍然需要确保为您的目的使用独特的匹配集。

相关地,加入是什么意思?

这是一个真正的问题:表代表什么?它们如何回答问题?关系意味着价值,信息,问题或回答的问题。

当您知道批处理或proc做什么或它的目的是脚本的目的时,识别愚蠢的查询变得更容易。

结论

  • ON ID = ID-选择匹配行。
  • ON ID <> ID-返回源表中每个行的每个不匹配行。本质上是十字架加入减去实际的联接行。

良好的做法是使用on识别匹配的唯一行和在源表侧面过滤此结果的独特行。

在您可以使用!=也不等于SQL

当值不等于

时,不相等的 <>运算符返回true

代码on O.CustomerID <> c.CustomerID似乎将订单表的每一行与客户表的每一行都不等于它。这是SQL小提琴中的一个示例。

http://sqlfiddle.com/#!9/e05f92/2/0

您可以看到,在顶部选择中(使用一个=符号的一个),它仅选择customerID订单等于customer customeruction

的行

在底部选择中(使用&lt;>使用),它加入了每个客户行,每个可能的订单行不相等,这就是为什么您获得&lt;>查询的结果很多。

相关内容

  • 没有找到相关文章

最新更新