假设我有一个SELECT
语句,并且我使用表名,例如:
select cust.name from cust,order where cust.id = order.id ;
我没有使用JOIN
语句,
问题是给定的语句是否为JOIN
?
答案 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关键字。)
在谈论数据库时,“连接”一词可能意味着多种含义。
JOIN
运算符,它是FROM
子句中的特定运算符。FROM
子句中的“ join”操作。根据此定义,,
是一个“联接”操作,等效于CROSS JOIN
。IN
,EXISTS
等不在FROM
子句中,它们也可能是“ join”操作。