Присоединиться или нет в SQL заявлении - PullRequest
0 голосов
/ 22 апреля 2020

Предположим, у меня есть оператор SELECT, и я использую имя таблицы, например:

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

Я не использовал оператор JOIN, Вопрос в том, является ли данный оператор JOIN или нет?

Ответы [ 3 ]

1 голос
/ 22 апреля 2020

Вы, кажется, пытаетесь написать запрос на соединение, используя неявный синтаксис соединения. Это должно выглядеть примерно так:

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 во что-то отличное от зарезервированного ключевого слова.

1 голос
/ 22 апреля 2020

Да, это оператор соединения. Когда вы хотите выполнить соединение, вы должны выбрать все необходимые таблицы.

Когда вы выбираете все необходимые таблицы в From и используете соединение , в ГДЕ это становится 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 ;
0 голосов
/ 22 апреля 2020

, - это архаичный c способ записи JOIN s в SQL. В основном это означает CROSS JOIN, хотя в предложении FROM семантика немного отличается.

В 1990-х годах он был заменен - ​​да, в прошлом тысячелетии - на надлежащий, явный, стандартный, читаемый JOIN синтаксис. Как бы мне не нравились запятые, они являются частью языка SQL. Я знаю, что sh они будут устаревшими, но это еще не произошло (это означает, что более новые базы данных не будут обязаны поддерживать синтаксис).

Я думаю, вы знаете, что вам следует использовать:

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

(Кроме того, order - это действительно плохое имя для таблицы, потому что это ключевое слово Oracle.)

Слово "соединение" может означать несколько вещей, когда говорить о базах данных.

  1. Это может означать оператор JOIN, который является конкретным c оператором в предложении FROM.
  2. Это может означать "соединение" операция в предложении FROM. По этому определению , является операцией «соединения», которая эквивалентна CROSS JOIN.
  3. . Это может означать объединение данных из любых нескольких таблиц - в основном с использованием базовых алгоритмов «соединения». По этому определению IN, EXISTS и т. Д. Могут быть операциями «соединения», даже если они не включены в предложение FROM.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...