This plan is built around the SQL reasoning loop: follow row flow -> check null behavior -> verify grouping -> confirm operator choice.
How to use this plan well
Each study block should do four things:
- read the query in execution order
- predict row count before trusting output columns
- classify each miss as join,
NULL, grouping, or operator-choice weakness
- write down the exact rule that would have prevented the miss
flowchart LR
Read["Read FROM and JOIN first"] --> Predict["Predict row flow"]
Predict --> Check["Check NULLs, grouping, and operators"]
Check --> Review["Review why misses happened"]
Review --> Read
How long should you study?
Typical candidates need 35 to 80 focused hours.
| Your time |
Recommended timeline |
Good fit |
| 12 to 15 hrs/week |
30 days |
intensive path with recent SQL exposure |
| 6 to 9 hrs/week |
60 days |
balanced path for most candidates |
| 3 to 5 hrs/week |
90 days |
part-time path with slower reinforcement |
30-day intensive plan
| Week |
Focus |
Output |
| 1 |
SELECT, expressions, predicates, and NULL behavior |
core drills and rule notes |
| 2 |
inner joins, outer joins, grouping, and aggregates |
join and grouping tie-break sheet |
| 3 |
subqueries, EXISTS, set operators, and conditional logic |
weak-lane notes and mixed sets |
| 4 |
DDL, DML, transactions, and final review |
mixed review and readiness check |
60-day balanced plan
| Phase |
Weeks |
Focus |
| 1 |
1 to 2 |
query basics, predicates, and NULL semantics |
| 2 |
3 to 4 |
joins, preserved rows, and row-count control |
| 3 |
5 to 6 |
grouping, aggregates, and HAVING placement |
| 4 |
7 |
subqueries, set operators, DML, and transactions |
| 5 |
8 |
weak-lane repair and mixed review |
90-day part-time plan
| Month |
Focus |
Goal |
| 1 |
syntax, predicates, and NULL |
stop losing points to basic semantics |
| 2 |
joins, grouping, and subqueries |
get stronger at row-flow judgment |
| 3 |
DML, transactions, and exam-style tie-breaks |
finish with mixed-set confidence |
If misses cluster here, do this next
| Miss pattern |
Weak lane |
Fix next |
| you predict the wrong result shape |
row flow |
review execution order and join effect on row count |
| preserved rows vanish |
outer joins and predicates |
review ON versus WHERE filtering |
| anti-match answers surprise you |
null semantics |
review NOT IN, NOT EXISTS, and nullable values |
| totals are wrong |
grouping |
review join grain, COUNT behavior, and HAVING |
What strong prep usually does
- reads queries in execution order instead of starting with the
SELECT list
- keeps a short confusion table for
WHERE vs HAVING, IN vs EXISTS, and NOT IN vs NOT EXISTS
- writes down why the right answer changes row shape, not just which syntax token appears
- uses Oracle docs to settle edge-rule disputes, then comes back here for compression
Final 72 hours
| Keep doing |
Stop doing |
| rereading the cheat sheet and glossary |
opening unrelated advanced database topics |
| tracing queries line by line |
trusting what “looks business-correct” |
reviewing NULL and outer-join edge cases |
treating null logic like ordinary equality |
| checking Oracle docs for disputed syntax |
trusting unsupported shorthand over Oracle docs |
Route yourself well