Learn SQL and Databases the Easy Way
Plain-English guides to SQL, SQL Server performance, database design, data analysis and Delphi, written by a developer who works with databases every day. No jargon, lots of real examples.
Where Do You Want to Start?
New to SQL
Write your first queries and learn to filter, sort and summarise data.
Designing a Database
Build tables that keep your data clean, consistent and easy to query.
Going Further
Speed up queries, protect your data and write smarter SQL.
My Queries Are Slow
Find out why SQL Server is slow and fix it step by step.
Delphi + SQL Server
Build fast business apps in Delphi that work with SQL Server.
SQL for Data Analysis
Clean, summarise and report on your data with SQL.
Latest Articles
- Cohort and Retention Analysis in SQL (Step by Step)
Group customers by the month they first bought and track how many come back. Build a retention triangle in SQL Server and MySQL, step by step. - SQL vs Python (pandas) for Data Analysis: Which Should You Use?
The same analysis in SQL and pandas side by side, a cheat sheet that maps one to the other, where each is stronger, and how analysts use both together. - Funnel Analysis in SQL: Find Where Users Drop Off (Step by Step)
Build a conversion funnel in SQL: count users per step, enforce step order, calculate drop-off with LAG, add a conversion window and compare mobile vs desktop. - Many-to-Many Relationships in SQL: Junction Tables Explained Simply
How to store many-to-many relationships in SQL with a junction table: composite keys, foreign keys, indexes, queries and the comma-list mistake. - Delphi Procedures, Functions and Units Explained Simply
Split Delphi code into procedures, functions and units: value, const, var and out parameters, default parameters, overloads and the unit structure. - How to Connect Delphi to SQL Server with FireDAC (Step by Step)
Connect Delphi to SQL Server with FireDAC: TFDConnection settings, Windows vs SQL login, connecting in code, the ADO alternative and common errors. - EXISTS vs IN vs JOIN in SQL: Which One Should You Use?
The same question answered with EXISTS, IN and JOIN: when each one is right, why JOIN can duplicate rows, the NOT IN NULL trap, and what really matters for speed. - SQL for Data Analysis: A Step-by-Step Roadmap
What to learn, in what order, to use SQL for real data analysis: 9 stages with free tutorials, an 8-week study plan and a first portfolio project. - Aging Report in SQL Server: Group Unpaid Invoices into 0-30, 31-60, 61-90 and 90+ Days
Build an accounts receivable aging report in SQL Server step by step: open amount per invoice, days overdue, aging buckets per customer, totals, and common mistakes.