·10 min read
SQL Cheat Sheet: Complete Quick Reference
Everything you need to write SQL queries in one reference. From basic SELECT to advanced window functions.
Basic Queries
SELECT * FROM users; SELECT name, email FROM users; SELECT DISTINCT country FROM users; SELECT name, salary * 1.1 AS new_salary FROM employees;
Filtering with WHERE
SELECT * FROM users WHERE age > 18;
SELECT * FROM users WHERE name LIKE 'A%';
SELECT * FROM users WHERE city IN ('NYC', 'LA');
SELECT * FROM users WHERE age BETWEEN 18 AND 30;
SELECT * FROM users WHERE email IS NOT NULL;
SELECT * FROM users WHERE age > 18 AND city = 'NYC';
SELECT * FROM users WHERE age < 20 OR age > 60;Sorting and Limiting
SELECT * FROM users ORDER BY name ASC; SELECT * FROM users ORDER BY created_at DESC; SELECT * FROM users ORDER BY name LIMIT 10; SELECT * FROM users ORDER BY name LIMIT 10 OFFSET 20;
JOINs
-- INNER JOIN (matching rows only) SELECT u.name, o.total FROM users u INNER JOIN orders o ON u.id = o.user_id; -- LEFT JOIN (all from left + matches) SELECT u.name, o.total FROM users u LEFT JOIN orders o ON u.id = o.user_id; -- RIGHT JOIN (all from right + matches) SELECT u.name, o.total FROM users u RIGHT JOIN orders o ON u.id = o.user_id;
Aggregation
SELECT COUNT(*) FROM users; SELECT department, AVG(salary) FROM employees GROUP BY department; SELECT category, SUM(amount) FROM orders GROUP BY category HAVING SUM(amount) > 1000; SELECT MIN(age), MAX(age), AVG(age) FROM users;
Subqueries
SELECT * FROM users WHERE id IN ( SELECT user_id FROM orders WHERE total > 100 ); SELECT name, (SELECT COUNT(*) FROM orders o WHERE o.user_id = u.id) AS order_count FROM users u;
INSERT, UPDATE, DELETE
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
UPDATE users SET status = 'active' WHERE id = 1;
DELETE FROM users WHERE id = 1;Window Functions
SELECT name, salary, RANK() OVER (ORDER BY salary DESC) AS rank FROM employees; SELECT name, department, salary, AVG(salary) OVER (PARTITION BY department) AS dept_avg FROM employees;
CTEs
WITH active_orders AS ( SELECT user_id, SUM(total) AS total_spent FROM orders WHERE status = 'completed' GROUP BY user_id ) SELECT u.name, a.total_spent FROM users u JOIN active_orders a ON u.id = a.user_id;
Practice Tools
Format your queries with the SQL Formatter and convert data with CSV to SQL.