SQL
Basic syntax
SELECT, FROM, LIMIT
sql
SELECT
*
FROM
crm
LIMIT
10;
WHERE
sql
SELECT
*
FROM
crm
WHERE
register_date > '2020-01-01'
LIMIT
10;
AND
sql
SELECT
*
FROM
crm
WHERE
register_date > '2020-01-01'
AND is_priority = true
LIMIT
10;
IN
sql
SELECT
user_id,
last_activity,
segment
FROM
crm
WHERE
segment in ('foo', 'bar');
ORDER BY
sql
SELECT
*
FROM
crm
WHERE
register_date > '2020-01-01'
ORDER BY
register_date
LIMIT
10;
DISTINCT
sql
SELECT DISTINCT
(segment)
FROM
crm;
JOIN (+ inner, left, right)
sql
SELECT
*
FROM
products as p
JOIN stock as s ON p.product_id = s.product_id
LIMIT
10;
GROUP BY, AVG, COUNT, SUM, MIN, MAX, AS
sql
SELECT
segment,
AVG(stayonpage) AS avg_stayonpage
FROM
crm
GROUP BY
segment
LIMIT
10;
Transformations
sql
-- cast string to datetime
TO_TIMESTAMP(date_created,'YYYY-MM-DD HH:MI:SS')
-- cast datetime to strong
to_char(timestamp_column, 'YYYY-MM')
-- timedelta
WHERE date_created < (NOW() - '3 months'::interval)::TEXT
CRUD
sql
-- rename table
ALTER TABLE OG_NAME
rename TO NEW_NAME;
CTE
A common table expression is a temporary result set which you can reference within another SQL statement including SELECT, INSERT, UPDATE or DELETE.
sql
WITH
cte_film AS (
SELECT
film_id,
title,
(
CASE
WHEN length < 30 THEN 'Short'
WHEN length < 90 THEN 'Medium'
ELSE 'Long'
END
) length
FROM
film
)
SELECT
film_id,
title,
length
FROM
cte_film
WHERE
length = 'Long'
ORDER BY
title;
Resources
- Mode SQL Tutorial
- SQL Style Guide
- SQLBolt - Learn SQL with simple, interactive exercises.