Соглашение о выборе SQL - PullRequest
       20

Соглашение о выборе SQL

1 голос
/ 11 февраля 2009

Мы столкнулись со следующей «проблемой». Мне нравится использовать следующее письмо:

SELECT  Id, Name
FROM    Table1
JOIN    Table2 ON Table1.FK1 = Table2.FK1

но мой коллега использует:

SELECT  Id, Name
FROM    Table1 JOIN Table2 
ON      Table1.FK1 = Table2.FK1

Есть ли лучшая практика для этого? Я думаю, что это более удобно, если все используемые таблицы выровнены.

Ответы [ 13 ]

10 голосов
/ 11 февраля 2009

Я предпочитаю первый

8 голосов
/ 11 февраля 2009

Мы бы на самом деле сделали:

SELECT Id, Name
    FROM Table1
    JOIN Table2 
        ON Table2.FK1 = Table2.FK1
5 голосов
/ 11 февраля 2009

Компания, в которой я работаю, имеет приложение, которое использует объектную модель для генерации sql. Он генерирует его со вторым синтаксисом большую часть времени. Так много соединений, а затем на условиях. Очень сложно пытаться расшифровать, какое условие применимо к какой таблице, когда у вас много таблиц.

Поэтому я предпочитаю ставить предложение ON вместе с таблицей, к которой я присоединяюсь. Намного легче определить, какие предложения объединения вы использовали для таблицы и какие условные предложения являются частью вашего оператора соединения. А правильное соединение - это залог успеха. Я также предпочитаю скобки.

SELECT primarytable.whatever
FROM primarytable
     INNER JOIN secondarytable ON (primarytable.primarykey = secondarytable.foreignkey)
     INNER JOIN othertable ON (primarytable.foreignkey = othertable.primarykey AND othertable.somefield = 1)
     LEFT OUTER JOIN outertable ON (secondarytable.foreignkey = outertable.primarykey)
WHERE primarytable.somefield IS NOT NULL
2 голосов
/ 11 февраля 2009

Я использую что-то похожее на Джон Прайс Стиль:

with Foo as (
    select Id, Name
        from Table1
           join Table2 on 
               Table2.FK = Table1.PK and
               Table2.Foo = Table1.Bar
           join Table3 on 
               Table3.FK = Table1.PK and
               Table3.Foo = Table1.Bar
        where
            Table1.Foo > 1 and
            Table1.Bar < 100
),
Bar as (
    ...
)
select * from Bar;

Некоторые комментарии:

правильный отступ логических блоков: соединение идет внутри с , с внутри выбора на висит в конце строки для правильного стиля K & R. То же самое касается с круглыми скобками.

а также

учитывая раскраску кода, мне нравятся строчные ключевые слова намного лучше, чем UPPER CASE ВЕЗДЕ.
2 голосов
/ 11 февраля 2009
SELECT  Id, Name
FROM Table1
    JOIN Table2 ON Table2.FK1 = Table2.FK1

Я предпочитаю этот. И пиво.

1 голос
/ 11 февраля 2009

Мой стиль:

select c.Id, c.Name
from Parent p
join Child c on c.ParentID = p.Id
where p.Id = 123
  • Если бы существовал длинный список выбора, я хотел бы написать каждый столбец, выбранный в отдельной строке, или я бы записал все столбцы из одной таблицы в одну строку и все столбцы из другой таблицы в другую линия.

  • Если бы в on или where был длинный список условий, я бы написал каждое условие в отдельной строке.

Реальные WTF:

  • Вы не используете псевдонимы для своих таблиц.
  • Вы пишете SQL всеми заглавными буквами. Я не могу это прочитать.
  • Вы не используете редактор с элементарной подсветкой синтаксиса, что заставляет вас полагаться на выравнивание, чтобы сказать, какие слова что означают.
0 голосов
/ 13 февраля 2009
select
    a.Id,
    b.field2,
    b.field3
from
    table1 a
join
    table2 b
        on a.Id = b.a_id
where
    a.field1 = 'hello'
and b.field2 = 'there'

Использование четырех пробелов в качестве вкладки позволяет "и" выстраиваться в строке where.

0 голосов
/ 13 февраля 2009
select
  Dept.COL1 as "Deptment Name"
, Emp.COL1 as "Employee Name"

from
Table1 Dept
inner join Table2 Emp on Emp.FK1 = Dept.Id

where
    Dept.COL2 = "something"
and Emp.COL2 = "another"

Это стиль, который я использую при разработке запроса для извлечения данных. Вы можете удалить любой из элементов в предложении select и where, просто закомментировав их (за исключением первого). Это очень удобно для отладки.

Если вы хотите, чтобы они выглядели красиво и легко распознавалось, то выровняйте «as» в select и «=» в предложении where, безусловно, поможет.

0 голосов
/ 11 февраля 2009

Я всегда так делаю:

     SELECT t1.ID, t1.Name
       FROM Table1 t1
 INNER JOIN Table1 t2 ON t1.FK1 = t2.FK1
      WHERE t1.Name = 'Bob'

Я считаю, что правильное выравнивание команд SQL облегчает чтение. Конечно, если вы не используете моноширинный шрифт в редакторе кода, это не будет работать вообще

Я не могу сказать, что знаю какую-либо «лучшую практику» для этого.

0 голосов
/ 11 февраля 2009

Я предпочитаю первое - оно позволяет мне легко комментировать объединенные таблицы при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...