# SQL Quick Reference

## Basic Query

```sql
SELECT col1, col2 FROM table WHERE condition ORDER BY col LIMIT n OFFSET m;
```

## JOINs

| Join | Result |
|------|--------|
| INNER JOIN | Only matches |
| LEFT JOIN | All left + matches from right |
| RIGHT JOIN | All right + matches from left |
| FULL OUTER | All from both |

## Aggregates

| Function | Purpose |
|----------|---------|
| COUNT(*) | Number of rows |
| SUM(col) | Sum of values |
| AVG(col) | Average |
| MIN(col), MAX(col) | Min/Max |

## WHERE vs HAVING

| Clause | When |
|--------|------|
| WHERE | Before GROUP BY; row-level filter |
| HAVING | After GROUP BY; group-level filter |

## Normalization

| Form | Rule |
|------|------|
| 1NF | Atomic values, no repeating groups |
| 2NF | 1NF + no partial dependencies |
| 3NF | 2NF + no transitive dependencies |

## Common Patterns

```sql
-- Pagination
SELECT * FROM t ORDER BY id LIMIT 10 OFFSET 20;

-- Exists check
SELECT * FROM users u WHERE EXISTS (SELECT 1 FROM orders o WHERE o.user_id = u.id);

-- Top N per group (simplified)
SELECT * FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY group_col ORDER BY sort_col) rn FROM t) WHERE rn <= 5;
```
