Используете ли вы ключевое слово OUTER при написании левого / правого соединения в SQL? - PullRequest
10 голосов
/ 16 ноября 2009

Я часто вижу людей, которые пишут SQL следующим образом:

SELECT * from TableA LEFT OUTER JOIN TableB ON (ID1=I2)

Я сам пишу просто:

SELECT * from TableA LEFT JOIN TableB ON (ID1=I2)

Для меня ключевое слово "OUTER" похоже на шум линий - оно не добавляет никакой дополнительной информации, просто загромождает SQL. Это даже необязательно в большинстве RDBMS, которые я знаю. Итак ... почему люди все еще пишут это? Это привычка? Переносимость? (Действительно ли ваш SQL действительно переносим?) Что-то еще, о чем я не знаю?

Ответы [ 8 ]

11 голосов
/ 16 ноября 2009

OUTER действительно является излишним, как вы пишете, поскольку все OUTER объединения являются либо LEFT или RIGHT, а взаимно все LEFT или RIGHT объединения являются OUTER. Так что синтаксически это в основном шум, как вы выразились. Это необязательно даже в ISO SQL. Что касается того, почему люди используют его, я полагаю, что некоторые чувствуют необходимость настаивать на том, чтобы соединение было OUTER, даже если ключевое слово влево или вправо уже говорит об этом. В этом отношении, INNER также является излишним!

5 голосов
/ 16 ноября 2009

ДА

По моему мнению, это просто проясняет ситуацию: чем яснее и яснее вы заявляете о своих намерениях, тем лучше (особенно для тех, кто пытается прочитать и понять ваш код позже).

Но это только мое мнение - это технически не нужно, так что вы можете использовать его - или оставить его.

2 голосов
/ 16 ноября 2009

Одна вещь, которую несколько месяцев на Stackoverflow показали мне, это то, сколько SQL написано и / или поддерживается людьми, которые вообще не имели никакого отношения к SQL или реляционным базам данных.

По этой причине я думаю, что чем яснее вы можете быть, тем лучше будет следующий программист, когда будет смотреть на ваш код.

2 голосов
/ 16 ноября 2009

Нет. Я использую

  • JOIN
  • LEFT JOIN
  • RIGHT JOIN
  • ПОЛНОЕ НАРУЖНОЕ СОЕДИНЕНИЕ
  • CROSS JOIN

Для меня нет никакой двусмысленности.

1 голос
/ 16 ноября 2009

Я использую «внутреннее соединение», «левое соединение», «правое соединение» и «полное внешнее соединение». «присоединиться» без «внутреннего» делает это несколько двусмысленным для меня; «left» и «right» являются самоописательными, а «full» - это такой зверь, что заслуживает особого синтаксиса:)

1 голос
/ 16 ноября 2009

Это просто вопрос вкуса, я думаю, что люди используют его, потому что считают, что это приводит к более читаемому коду. Например, я предпочитаю использовать также необязательное ключевое слово AS, поскольку SELECT ... FROM table AS t выглядит для меня более читабельным, чем SELECT ... FROM table t.

0 голосов
/ 16 ноября 2009

Я думаю, что в 2009 году такого понятия, как portable SQL , в любом случае не существует ... В какой-то момент вам нужно написать специфичные для СУБД операторы (например, получение первых N строк).

Лично я нахожу синтаксис JOIN избыточным, а вместо этого я разделяю имена таблиц запятыми.

0 голосов
/ 16 ноября 2009

Я сам использую ключевое слово OUTER. Я согласен, что это всего лишь вопрос вкуса, но если его опустить, мне кажется, что это немного неаккуратно, но не так плохо, если пропустить ключевое слово INNER (неаккуратно) или написать ключевые слова SQL в нижнем регистре (очень небрежно).

...