SQL Labs
Back to Home

Help & Cheat Sheet

Quick reference guide for SQL and keyboard shortcuts

Keyboard Shortcuts

+
Enter
Run SQL queryWorks in Practice & Playground
+
S
Save code (Playground only)
+
/
Toggle comment

SQL Cheat Sheet

Basic Queries

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

Filtering with WHERE

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

Sorting & Grouping

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)

JOINs

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)

Aggregate Functions

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

Subqueries

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

Modifying Data

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!)

CASE (Conditional)

SELECT name, CASE WHEN age < 18 THEN 'Minor' WHEN age < 65 THEN 'Adult' ELSE 'Senior' END as category FROM users;

Conditional categories

Aliases

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

Quick Tips

  • SQL is case-insensitive — SELECT, select, and SeLeCt all work the same
  • String values need quotes — Use 'text' not text
  • Column names don't need quotes — Use name not "name" (unless contains spaces)
  • Always use WHERE with UPDATE/DELETE — Or you'll update/delete all rows!
  • Semicolons are optional — But recommended to end statements

Ready to practice?

Start solving SQL problems or open the playground to experiment