是否加入SQL语句

时间:2020-04-22 03:59:26

标签: sql join

假设我有一个SELECT语句,并且我使用表名,例如:

select cust.name from cust,order where cust.id = order.id ;

我没有使用JOIN语句, 问题是给定的语句是否为JOIN

3 个答案:

答案 0 :(得分:1)

是的,这是一个连接语句。要执行连接时,必须选择所有必需的表。

当您在From中选择所有必需的表并在WHERE中使用联接,时,它将变成implicit join,如下所示。

select 
  cust.name 
from customer c, [order] o
where c.id = o.id ;

当您使用具有JOIN语法的两个表联接时,如下所述它被称为explicit join

select 
  cust.name 
from customer c
join [order] o
on c.id = o.id ;

答案 1 :(得分:1)

您似乎正在尝试使用隐式联接语法编写联接查询。看起来应该像这样:

select cust.name from cust, order where cust.id = order.id;

但是实际上,order是几乎每个SQL版本中的保留关键字,因此您应该使用双引号将其转义:

select cust.name from cust, "order" where cust.id = "order".id;

但是,现在最好使用现代的显式联接语法,因此请使用:

select cust.name from cust inner join "order" on cust.id = "order".id;

并考虑将order表重命名为保留关键字以外的其他名称。

答案 2 :(得分:0)

,是用SQL编写JOIN的一种古老方法。它的基本含义是CROSS JOIN,尽管FROM子句中的语义略有不同。

在1990年代(是的最后一个千年),它被正确,显式,标准,可读的JOIN语法取代。尽管我不喜欢逗号,但它们是SQL语言的一部分。我确实希望它们会被弃用,但这尚未发生(这意味着更新的数据库没有义务支持语法)。

我想您知道您应该使用:

select c.name
from cust c join
     order o
    on c.id = o.id ;

(此外,order对于表来说确实是个坏名字,因为它是Oracle关键字。)

在谈论数据库时,“连接”一词可能意味着多种含义。

  1. 它可以表示JOIN运算符,它是FROM子句中的特定运算符。
  2. 这可能意味着FROM子句中的“ join”操作。根据此定义,,是一个“联接”操作,等效于CROSS JOIN
  3. 这可能意味着合并任何多个表中的数据-基本上使用基础的“联接”算法。根据此定义,即使INEXISTS等不在FROM子句中,它们也可能是“ join”操作。