Module 1: Introduction and Overview
- SQL fundamentals
- Why SQL can be both straightforward and complex
- Recommendations for thorough testing
- Retrieving data with SELECT
- Expressions
- Literals
- Correctly handling NULL values
- Executing queries
- Analysing query plans
- Improving query performance
- Returning partial results with FETCH and OFFSET
- Choosing the best alternatives
- Avoiding common pitfalls
Module 2: Querying Multiple Tables
- Implementing different types of joins
- Inner joins
- Cross joins
- Left, right, and full outer joins
- Equijoins vs. theta joins
- Performance implications of joins
- Adding filter conditions to outer joins
- Writing self joins
- Joining a table to itself
- Chaining self joins
- Solving time-interval problems
- Combining queries with set operators
- UNION
- UNION ALL
- INTERSECT
- EXCEPT
Module 3: Aggregate Functions
- Summarising data with aggregate functions
- COUNT, SUM, AVG, MIN, MAX
- Managing NULL values
- Identifying duplicates
- Grouping data
- GROUP BY
- Using HAVING condition
- Calculating moving averages
- Building crosstab reports
- Extending group queries
- Nested grouped aggregates
- Joins with grouping
- Subtotals with CUBE and ROLLUP
Module 4: Performing Extensive Analysis with Analytic Functions
- The OVER clause
- Ordering before applying functions
- Dividing result sets into partitions
- Calculating ranks
- RANK and DENSE_RANK
- ROW_NUMBER with ordered sets
- Calculating percentiles
- Extending aggregates
- Multi-level partitioning
- Running totals
- Comparing row and aggregate values
- Top-N queries
- Defining sliding window boundaries
Module 5: Building Subqueries
- Self-contained subqueries
- In conditions and column expressions
- Multilevel subqueries
- Avoiding issues with NULL results
- Handling multirow subqueries
- Finding gaps in number sequences
- Correlated subqueries
- Referencing values from the outer query
- EXISTS vs. IN
- Detecting duplicates
- Avoiding unintentional correlations
- Common table expressions
- Reusable subqueries
- Recursive subqueries
- Navigating hierarchical data
Module 6: Breaking Down Complex Queries
- Overcoming SQL limitations
- Reducing complexity while improving performance