SQL coding style

Цель — стараться сделать код как можно более вертикально компактным, но читаемым.

Правила:

  1. названия таблиц, полей, алиасов всегда только в нижнем регистре с подчёркиванием
  2. все зарезервированные слова и системные вызовы всегда только в верхнем регистре
  3. названия всех таблиц должны иметь алиасы
  4. всем полям желательно иметь алиасы
  5. ANSI join-style («explicit join notation»)
  6. названия всех выбираемых полей на новой строке с одним отступом от «SELECT»
  7. «CASE» разносится на несколько строк с внутренним отступом(см. пример)
  8. название таблицы пишется на одной строе с «FROM», «JOIN» и т.п.
  9. условия для «JOIN» пишутся вместе с «ON» и «AND», при этом строка сдвигается на один отступ влево
  10. «WHERE» пишется без отступа, на этой же строке первое условие для «WHERE»
  11. остальные условия для WHERE пишутся на новой строке с одним отступом
  12. для вложенных запросов открывающая скобка ставится на новой строке без отступа, весь вложенный запрос пишется с одним отступом, закрывающая скобка — на новой строке без отступа, вместе с «AS»
SELECT DISTINCT 
	person.a AS person_main_field, 
	name, 
	pp.id, 
	number, 
	CASE
		WHEN photo_group.photo IS NOT NULL
		THEN photo_group.photo
		ELSE photo_person.photo
	END AS photo,
	CASE
		WHEN photo_group.photo IS NOT NULL
		THEN 'arts'
		ELSE 'persons'
	END AS photo_folder
FROM pp AS pp WITH(nolock)
INNER JOIN p AS person WITH(nolock)
	ON person.personId = pp.personId
LEFT JOIN photos AS photo_person WITH(nolock)
	ON person.groupId = -1
	AND photo_person.refer_type = 2
	AND photo_person.refer_id = person.person_id
	AND photo_person.is_last = 1
LEFT JOIN photos photo_group WITH(nolock)
	ON person.groupId <> -1
	AND photo_group.refer_type = 3
	AND photo_group.refer_id = person.group_id
	AND photo_group.is_last = 1
WHERE pp.programId IN ( 1, 2, 3 )
	 AND GETDATE() BETWEEN pp.startAt AND pp.endAt

LEAVE A COMMENT