SELECT * FROM users;Select all columns from users table
SELECT name, email FROM users;Select specific columns
SELECT DISTINCT city FROM users;Select unique values
SELECT * FROM users LIMIT 10;Limit results to 10 rows
SELECT * FROM users WHERE age > 18;Greater than
SELECT * FROM users WHERE city = 'New York';Exact match (strings in quotes)
SELECT * FROM users WHERE age BETWEEN 20 AND 30;Range (inclusive)
SELECT * FROM users WHERE name LIKE 'J%';Starts with 'J'
SELECT * FROM users WHERE name LIKE '%son%';Contains 'son'
SELECT * FROM users WHERE city IN ('NYC', 'LA', 'Chicago');Multiple values
SELECT * FROM users WHERE age > 18 AND city = 'NYC';Multiple conditions (AND)
SELECT * FROM users WHERE city = 'NYC' OR city = 'LA';Either condition (OR)
SELECT * FROM users WHERE NOT city = 'NYC';Negation
SELECT * FROM users ORDER BY name ASC;Sort ascending (A-Z)
SELECT * FROM users ORDER BY age DESC;Sort descending (Z-A)
SELECT city, COUNT(*) FROM users GROUP BY city;Group by city, count users
SELECT city, AVG(age) FROM users GROUP BY city;Group and calculate average
SELECT city, COUNT(*) FROM users GROUP BY city HAVING COUNT(*) > 5;Filter groups (after grouping)
SELECT * FROM orders JOIN users ON orders.user_id = users.id;Inner JOIN - matching rows only
SELECT * FROM orders LEFT JOIN users ON orders.user_id = users.id;Left JOIN - all orders, matching users
SELECT * FROM orders RIGHT JOIN users ON orders.user_id = users.id;Right JOIN - all users, matching orders
SELECT * FROM orders FULL OUTER JOIN users ON orders.user_id = users.id;Full JOIN - all rows from both
SELECT * FROM users, orders WHERE users.id = orders.user_id;Old school join (comma + WHERE)
SELECT COUNT(*) FROM users;Count all rows
SELECT SUM(price) FROM orders;Sum of values
SELECT AVG(age) FROM users;Average of values
SELECT MIN(age) FROM users;Minimum value
SELECT MAX(age) FROM users;Maximum value
SELECT * FROM users WHERE age > (SELECT AVG(age) FROM users);Find older than average
SELECT * FROM users WHERE id IN (SELECT user_id FROM orders);Find users with orders
SELECT name, (SELECT COUNT(*) FROM orders WHERE orders.user_id = users.id) as total_orders FROM users;Correlated subquery
INSERT INTO users (name, age) VALUES ('John', 25);Insert a new row
UPDATE users SET age = 26 WHERE name = 'John';Update rows (always use WHERE!)
DELETE FROM users WHERE age < 18;Delete rows (always use WHERE!)
SELECT name, CASE WHEN age < 18 THEN 'Minor' WHEN age < 65 THEN 'Adult' ELSE 'Senior' END as category FROM users;Conditional categories
SELECT name AS 'User Name', age AS 'User Age' FROM users;Rename columns in output
SELECT COUNT(*) as total_users FROM users;Alias for aggregate results
Start solving SQL problems or open the playground to experiment