SQL, кажется, самый заброшенный язык когда дело доходит до форматирования приятно и четко... И поскольку SQL-операторы могут быть невероятно детализированы и комплекс, он делает его чрезвычайно трудно для работы с. Но я нахожу, что, когда я пытаюсь отформатировать свой код SQL лучшим способом, возможным, я иногда не уверен в том, как сделать это. Я знаю стандарты для Java, C#, Python, и т.д....., но когда дело доходит до SQL я не видел слишком много инструкций или принял методы. Что такое подсказки/правила для форматирования SQL так, чтобы это было ясно, четки, и логично? Можно ли дать пример кода для иллюстрирования? Что Вы нашли, чтобы быть самым стандартным, принятым способом отформатировать SQL?
Вы можете попробовать прочитать книгу Джо Селко Стиль программирования SQL . Я уверен, что есть много людей, которые не согласны с его стилем, но это хорошее начало.
Некоторые из моих собственных «правил»
Например:
SELECT
column_1,
column_2,
CASE
WHEN column_5 = 'Blah' THEN 1
WHEN column_6 = 'Blah' THEN 2
ELSE 3
END AS column_alias
FROM
My_Table MT
INNER JOIN My_Other_Table MOT ON
MOT.column_1 = MT.column_1
WHERE
MT.column_2 = 'Some Value' AND
(
MT.column_3 = 'Some other value' OR
MT.column_4 = 'Some other value'
)
Я использую следующие правила:
select height, width, age from person where width = 20
ВЫБРАТЬ высоту, ширину, возраст FROM человека WHERE (width = 20)
Все имена таблиц в нижнем регистре. Никогда не используйте camelcase (donkeyWrench) в именах таблиц (вы выстрелите себе в голову, если будете создавать запросы вручную).
Всегда используйте круглые скобки в предложениях WHERE и HAVING. Используйте пробел между операторами.
... где ширина = 20 и высота> 20
ГДЕ (ширина = 20) И (высота> 20)
Пример:
/*Executed from xyz.php*/
SELECT
p.height, p.width, p.age,
pd.hastel, pd.hasmobile
FROM
person p
LEFT JOIN personaldata pd ON p.id_person = pd.id_person
LEFT JOIN relatives r ON pd.id_person = r.id_person
WHERE
( p.width = 20 ) AND
( (p.height > 20) AND (p.height < 15) ) AND
( pd.hastel)
ORDER BY
p.age, p.height
Обычно я следую этому типу синтаксиса для сервера MSSQL
SELECT statemenets
SELECT //optionally specify top or distinct
Field1,
Field2,
CASE WHEN (1 = 1) THEN
"1"
ELSE
"2"
END AS Field3,
...
FROM Table1 t1
INNER JOIN Table2 t2
ON t2.field1 = t1.field1 //I always reference the joined tables field name first
LEFT OUTER JOIN Table3 t3
ON (t3.field1 = t1.field1
AND t3.field2 = t2.field2) //I specify and with a new line and tabbed in
OR // I specify or(s) on thier own line this way you can distinguish from the two conditionals that need to be met
(t3.field1 = t2.field1
AND t3.field2 = t1.field2)
WHERE
(t1.Field1 = 'foo'
AND t1.field2 = 'bar')
OR
(t2.Field1 = 'foo'
AND t1.field2 = 'bar')
Derived Tables in a Select
Select
Field1,
Field2,
...
FROM (Select
Field1,
Field2,
Field3)
FROM Table1
WHERE
Field1 = '1') t1
Update Statements
UPDATE Table1
SET
Field1 = 1,
Field2 = 2,
Field3 = 3
WHERE
(Field1 = 2
AND Field3 = 2)
OR
(Field3 = 1)
Insert Statements
INSERT INTO Table1
(Field1,
Field2,
Field3,
...)
VALUES
(1,
2,
3,
...)
If Statements
IF (some condition) BEGIN
END ELSE BEGIN
END
Procedures
CREATE PROCEDURE Foo (
Bar INT,
Foo VARCHAR(20)
) AS
BEGIN
//Your Code Here
END