Home

SQL style guide

What is a style guide?

Programming style, also known as code style, is a set of rules or guidelines used when writing the source code for a computer program. It is often claimed that following a particular programming style will help programmers read and understand source code conforming to the style, and help to avoid introducing errors. (Source: Wikipedia)

The SQL style guide below is a work in progress and will evolve as we learn more SQL syntax:


-- this is a comment
SELECT *
FROM table_name -- this is another comment (e.g. TODO)
;

SELECT
  column_name,
  column_name,
  column_name
FROM table_name
LIMIT n_rows
;

SELECT
  column_name,
  column_name,
  column_name
FROM table_name
ORDER BY
  column_name,
  column_name DESC,
  column_name
;
SELECT
  column_name,
  column_name,
  column_name
FROM table_name
ORDER BY 1, 2 DESC, 3
;

SELECT
  column_name,
  SQL_FUNCTION(column_name) AS alias_column_name, -- e.g. UPPER(column)
FROM table_name
;

SELECT
  column_name,
  CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE elsecondition
  END AS alias_column_name
FROM table_name
;

SELECT *
FROM table_name
WHERE condition1
  AND condition2 -- river formatting optional, can just use `tab` or `4 spaces`
   OR condition3
;   

SELECT DISTINCT
  column_name,
  column_name  
FROM table_name
;

SELECT
  column_name,
  column_name,
  ...
  AGGREGATION_FUNCTION(column_name),
  AGGREGATION_FUNCTION(column_name)
  ...
FROM table_name
GROUP BY 1, 2 ...
;
SELECT
  column_name,
  column_name,
  ...
  AGGREGATION_FUNCTION(column_name),
  AGGREGATION_FUNCTION(column_name)
  ...
FROM table_name
GROUP BY 1, 2 ...
HAVING aggregation_condition1
   AND aggregation_condition2
    OR aggregation_condition3   
;

SELECT
  column_name,
  column_name,
  ...
  AGGREGATION_FUNCTION(column_name),
  AGGREGATION_FUNCTION(column_name),
  ...
FROM table_name
GROUP BY
  column_name,
  column_name ...
;
SELECT
  column_name,
  column_name,
  ...
  AGGREGATION_FUNCTION(column_name),
  AGGREGATION_FUNCTION(column_name),
  ...
FROM table_name
GROUP BY
  column_name,
  column_name ...
HAVING aggregation_condition1
   AND aggregation_condition2
    OR aggregation_condition3   
;

SELECT
  table_alias_1.column_name,
  table_alias_2.column_name
FROM table_name_1 table_alias_1  
INNER JOIN table_name_2 table_alias_2
  ON table_alias_1.column_key = table_alias_2.column_key
INNER JOIN table_name_3 table_alias_3
  ON table_alias_1.column_key = table_alias_3.column_key
;

SELECT
  column_name,
  column_name,
  ...
FROM table_name_1

UNION [ALL]

SELECT
  column_name,
  column_name,
  ...
FROM table_name_2

ORDER BY
  column_name,
  column_name DESC,
  column_name

LIMIT BY n
;

SELECT
  column_name,
  (SELECT AGGREGATION_FUNCTION(column_name) FROM table_name) AS alias_column_name
FROM table_name
;  

SELECT *
FROM table_name
WHERE column_name IN (SELECT column_name FROM table_name)
;

SELECT *
FROM (
  SELECT
    column_name,
    column_name
  FROM table_name    
  )
WHERE ...  
GROUP BY ...
;

WITH cte_name_1 AS (
  SELECT
    column_name,
    column_name,
    ...
  FROM table_name
  )

, cte_name_2 AS (
  SELECT
    column_name,
    column_name,
    ...
  FROM table_name
  )

SELECT *
FROM table_name
INNER JOIN cte_name_1
  ON table_name.column_key = cte_name_1.column_key
INNER JOIN cte_name_2
  ON table_name.column_key = cte_name_2.column_key
;


Do’s:

Avoid:

Optional: