Bookmark this lesson. Come back to it before every interview. This is every SQL command you need, organized by category, with syntax and examples.
| Command | Syntax | Example |
|---|---|---|
| SELECT | SELECT cols FROM table | SELECT first_name, email FROM customers |
| WHERE | WHERE condition | WHERE city = 'Mumbai' |
| ORDER BY | ORDER BY col [ASC|DESC] | ORDER BY price DESC |
| LIMIT | LIMIT n [OFFSET m] | LIMIT 10 OFFSET 5 |
| DISTINCT | SELECT DISTINCT col | SELECT DISTINCT city FROM customers |
| LIKE | WHERE col LIKE 'pattern' | WHERE email LIKE '%@gmail.com' |
| IN | WHERE col IN (val1, val2) | WHERE status IN ('pending', 'completed') |
| BETWEEN | WHERE col BETWEEN a AND b | WHERE price BETWEEN 1000 AND 5000 |
| IS NULL | WHERE col IS NULL | WHERE phone IS NULL |
| CASE | CASE WHEN cond THEN val END | CASE WHEN price > 10000 THEN 'Premium' END |
| ALIAS | SELECT col AS alias | SELECT COUNT(*) AS total |
| Join Type | What It Returns | Use Case |
|---|---|---|
| INNER JOIN | Matching rows from both tables | Customer + their orders |
| LEFT JOIN | All left rows + matching right | All customers, even without orders |
| RIGHT JOIN | All right rows + matching left | All orders, even without customer (rare) |
| FULL OUTER JOIN | All rows from both tables | Find unmatched records on both sides |
| CROSS JOIN | Every combination (cartesian) | Generate all possible pairs |
| SELF JOIN | Table joined to itself | Find pairs, hierarchies, comparisons |
| Function | Purpose | Example |
|---|---|---|
| COUNT(*) | Count all rows | SELECT COUNT(*) FROM orders |
| COUNT(col) | Count non-NULL values | SELECT COUNT(phone) FROM customers |
| COUNT(DISTINCT col) | Count unique values | SELECT COUNT(DISTINCT city) FROM customers |
| SUM(col) | Total of values | SELECT SUM(total_amount) FROM orders |
| AVG(col) | Average of values | SELECT AVG(price) FROM products |
| MIN(col) | Smallest value | SELECT MIN(price) FROM products |
| MAX(col) | Largest value | SELECT MAX(total_amount) FROM orders |
| GROUP BY | Group rows for aggregation | GROUP BY category |
| HAVING | Filter groups (not rows) | HAVING COUNT(*) > 5 |
| Function | Purpose | Syntax |
|---|---|---|
| ROW_NUMBER() | Unique sequential number | ROW_NUMBER() OVER (ORDER BY col) |
| RANK() | Rank with gaps for ties | RANK() OVER (ORDER BY col DESC) |
| DENSE_RANK() | Rank without gaps | DENSE_RANK() OVER (ORDER BY col DESC) |
| LAG(col, n) | Value from n rows before | LAG(order_date, 1) OVER (ORDER BY date) |
| LEAD(col, n) | Value from n rows after | LEAD(price) OVER (ORDER BY price) |
| SUM() OVER | Running total | SUM(amount) OVER (ORDER BY date) |
| AVG() OVER | Moving average | AVG(amount) OVER (ROWS 6 PRECEDING) |
| PARTITION BY | Window groups | OVER (PARTITION BY category ORDER BY price) |
| Command | Syntax | Example |
|---|---|---|
| INSERT | INSERT INTO table (cols) VALUES (vals) | INSERT INTO customers (first_name) VALUES ('Test') |
| UPDATE | UPDATE table SET col = val WHERE cond | UPDATE products SET price = 999 WHERE product_id = 1 |
| DELETE | DELETE FROM table WHERE cond | DELETE FROM orders WHERE status = 'cancelled' |
| Command | Syntax | Example |
|---|---|---|
| CREATE TABLE | CREATE TABLE name (col type constraints) | CREATE TABLE users (id INT PRIMARY KEY) |
| ALTER TABLE | ALTER TABLE name ADD/MODIFY/DROP col | ALTER TABLE users ADD phone VARCHAR(15) |
| DROP TABLE | DROP TABLE name | DROP TABLE temp_data |
| TRUNCATE | TRUNCATE TABLE name | TRUNCATE TABLE logs |
| CREATE INDEX | CREATE INDEX name ON table(col) | CREATE INDEX idx_email ON customers(email) |
| Constraint | Purpose | Example |
|---|---|---|
| PRIMARY KEY | Unique row identifier | customer_id INT PRIMARY KEY |
| FOREIGN KEY | References another table | FOREIGN KEY (customer_id) REFERENCES customers(customer_id) |
| UNIQUE | No duplicate values | email VARCHAR(100) UNIQUE |
| NOT NULL | Cannot be empty | first_name VARCHAR(50) NOT NULL |
| CHECK | Value must satisfy condition | CHECK (price > 0) |
| DEFAULT | Fallback value if not provided | status VARCHAR(20) DEFAULT 'active' |
FROM — Identify the tables
JOIN — Combine tables
WHERE — Filter individual rows
GROUP BY — Create groups
HAVING — Filter groups
SELECT — Choose columns
DISTINCT — Remove duplicates
ORDER BY — Sort results
LIMIT/OFFSET — Restrict output
Key Point: Knowing the execution order is the single most important concept for writing correct SQL. WHERE runs before GROUP BY. HAVING runs after. SELECT runs near the end. This is why you cannot use column aliases in WHERE.
Key Point: This cheat sheet covers every SQL command you need for QA work and interviews. Bookmark it and review before every interview.