Я только что читал об элементах NATURAL JOIN/USING - SQL92, которые (к сожалению?) отсутствуют в текущем репертуаре SQL Server.
Кто-нибудь пришел из СУБД, которая поддерживала их на SQL Server (или другую несуществующую СУБД), были ли они полезными, как они звучат, или банкой червей (что также звучит возможно!)?
Ответ 1
Я никогда не использую NATURAL JOIN
, потому что мне не нравится возможность того, что объединение может сделать что-то, чего я не намерен, потому что в обеих таблицах существует какое-то имя столбца.
Я иногда использую синтаксис USING
join, но так же часто оказывается, что мне нужно более сложное условие соединения, чем USING
может поддерживать, поэтому я все-таки преобразовываю его в эквивалентный синтаксис ON
.
Ответ 2
Вы считали бы СУБД, которая была действительно реляционной?:
в учебнике D [действительно реляционная язык], единственным оператором объединения является называется JOIN, и это означает "естественный присоединиться"... Не должно быть другого вида присоединиться... Немногие имели опыт использования надлежащего реляционный язык. Из тех, кто есть, я сильно подозреваю, что ни один из они когда-либо жаловались на некоторые воспринимаемые неудобства при спаривании столбцы в соответствии с их именами
Источник: " Значение имен столбцов" Хью Дарвен
Ответ 3
Связанный вопрос SO: является NATURAL JOIN лучше, чем SELECT FROM WHERE с точки зрения производительности?
NATURAL JOIN - это не удобный ярлык: он просто опасен. Это довольно редко встречается в СУБД.
ИСПОЛЬЗОВАНИЕ явственно, но, учитывая его ограничения, вы не можете использовать его везде, поэтому ON будет согласованным, no?
Ответ 4
Я не вижу значения синтаксиса USING или NATURAL - как вы столкнулись, только ON последовательно реализуется, поэтому лучше всего с точки зрения переносимости.
Быть явным также лучше для обслуживания, кроме того, альтернативы могут быть слишком ограниченными для решения ситуаций. Я также предпочел бы, чтобы моя кодовая база была последовательной.
Ответ 5
Это вопрос удобства. Не обязательно, но он должен иметь свое место, например, в интерактивном запросе (каждое нажатие клавиши приближает нас к RSI) или некоторые простые случаи написания вручную SQL даже в производственном коде (да, я писал и даже видел JOIN USING
в серьезном коде, написанном мудрыми программистами, кроме меня. Но я отвлекаюсь).
Я нашел этот вопрос при поиске подтверждения того, что SS не хватает этой функции, и я получил ее. Меня только смущает количество ненависти против этого синтаксиса, которое я отношу к синдрому Sour Grapes. Я чувствую себя забавно, когда читаю лекции с покровительствующим тоном. Сладости (читай: синтаксический сахар) плохо для вашего здоровья. Вы все равно не нуждаетесь в этом.
Что приятно в синтаксисе JOIN USING
, так это то, что он работает не только в именах столбцов , но также в псевдонимах столбцов, например:
-- foreign key "order".customerId references (customer.id)
SELECT c.*, c.id as customerId, o.* from customer c
join "order" o using (customerId);
Я не согласен с "Присоединение к использованию будет лучше, если только (...)". Или аргумент, что вам могут потребоваться более сложные условия. С другой точки зрения, зачем использовать JOIN ON
? Почему бы не быть чистым и не переместить все условия в предложение WHERE
?
SELECT t1.*, t2.* from t1, t2 where t2.t1_id = t1.id;
Теперь я могу сойти с ума и спорить, как это самый чистый способ выразить свое участие, и вы можете сразу начать добавлять дополнительные условия в предложение where, которое вам обычно нужно в любом случае, бла-бла-бла...
Таким образом, вы не должны пропустить этот особый синтаксис слишком дорого, но там нечего радоваться за то, что он этого не сделал ( "Фу, это было близко. Так хорошо, чтобы не ПРИСОЕДИНЯЙТЕСЬ ИСПОЛЬЗОВАТЬ. Мне было очень жаль" ).
Итак, хотя я лично использую JOIN ON
99% времени, я не чувствую, что Schadenfreude не существует JOIN USING
или NATURAL JOIN
.