Back to articles list Articles Cookbook
5 minutes read

How to Write SQL Queries Anyone Can Understand

Writing SQL that works is one thing. Writing SQL that someone else can read and say, "Oh, I get it!" is a whole different level. And honestly? It's one of the most useful things you can learn if you work with data.

Whether you're building reports, analyzing customer behavior, or answering a quick question from your boss, you’ll probably use SQL. And if that SQL is messy or confusing, you'll slow everyone down – including yourself.

This guide will help you write SQL queries that are easy to read, simple to tweak, and actually make sense to other people – even if you're still new to SQL.

Want to practice SQL with beginner-friendly exercises? Try the SQL Basics course on LearnSQL.com.

Why Writing Understandable SQL Matters

SQL isn’t just for machines. Sure, the database runs your queries, but real people have to read them too. And if your SQL is messy or confusing, you’re not just making life harder for others – you’re making it harder for yourself.

Writing clear SQL saves time. It makes it easier to fix bugs, collaborate with teammates, and revisit old code later without scratching your head. Think of it like writing a note to your future self or a teammate – make it clear enough so it doesn’t need translation.

Readable SQL also shows you care. It’s part of being a good communicator. And when you’re on a team, that goes a long way.

Have you ever opened a giant 100-line query with no comments and unclear variable names? Now imagine trying to fix it under pressure. Not fun.

Understand SQL's Processing Order

You might write SQL top-down, but the database doesn’t read it that way. Here's the actual order it follows:

  1. FROM
  2. WHERE
  3. GROUP BY
  4. HAVING
  5. SELECT
  6. ORDER BY
  7. LIMIT

Understanding this helps you structure your logic and spot mistakes more easily.

Break Long Queries Into Parts (Using CTEs)

Instead of cramming everything into one long query, use Common Table Expressions (CTEs) to divide the logic into manageable steps.

Here’s a version using a subquery:

SELECT *
FROM (
  SELECT customer_id, COUNT(*) AS order_count
  FROM orders
  GROUP BY customer_id
) AS subquery
WHERE order_count > 5;

Now here’s the same logic using a CTE:

WITH orders_cte AS (
  SELECT customer_id, COUNT(*) AS order_count
  FROM orders
  GROUP BY customer_id
)
SELECT *
FROM orders_cte
WHERE order_count > 5;

This version is easier to follow. It tells the story step by step and makes your code easier to reuse, test, and maintain.

Use All-Caps for SQL Keywords

Capitalizing keywords like SELECT, FROM, and WHERE helps them stand out and improves readability. It’s a common practice that makes queries easier to scan.

Indent Your Code

Indentation shows how different parts of the query relate to each other. When you use subqueries or complex logic, indentation makes the structure clear. Compare these:

Without indentation:

SELECT customer_id FROM (SELECT customer_id, COUNT(*) AS total_orders FROM orders GROUP BY customer_id) AS subquery WHERE total_orders > 5;

With indentation:

SELECT customer_id
FROM (
    SELECT customer_id, COUNT(*) AS total_orders
    FROM orders
    GROUP BY customer_id
) AS subquery
WHERE total_orders > 5;

One Clause Per Line

Breaking queries into separate lines for each clause (SELECT, FROM, WHERE, etc.) makes them easier to scan and debug:

SELECT customer_id,
       COUNT(*) AS order_count
FROM orders
WHERE status = 'delivered'
GROUP BY customer_id;

Use Meaningful Aliases

Avoid short, vague aliases like a, b, or t1. Instead, use aliases that describe what the table is:

SELECT o.customer_id
FROM orders AS o

Or even better:

SELECT orders.customer_id
FROM orders

Only use aliases when needed, and make sure they help – not confuse.

Use AS to Rename Columns

If you’re creating new columns – like totals or averages – use AS to give them clear names:

SELECT COUNT(*) AS total_orders

This makes your results easier to understand and keeps your output clear and professional.

Avoid SELECT *

Grabbing all columns using SELECT * might seem easy, but it can cause problems:

  • It includes unnecessary or sensitive data
  • It slows down your queries
  • It makes your code harder to understand and maintain

Instead, list the columns you actually need:

SELECT customer_id, order_date, total_amount
FROM orders

Add Helpful Comments

Use -- to add comments in SQL. Comments explain why your query does something, which is often more useful than what it does.

Example:

-- Only show active customers who ordered in the last 30 days
WHERE customer_status = 'active'
  AND order_date >= CURRENT_DATE - INTERVAL '30 days'

Comments are like notes to your future self – or to the next person working on the query.

Use Indexes When Needed

If you often filter or join by a specific column, that column might benefit from an index. Indexes help the database find data faster. If you’re not sure which columns are indexed, ask your database admin or check your schema.

Don’t Repeat Yourself

If you’re calculating something complex, do it once and reuse it – don’t repeat the logic. CTEs are perfect for this:

WITH order_totals AS (
  SELECT customer_id, SUM(total_amount) AS total_spent
  FROM orders
  GROUP BY customer_id
)
SELECT *
FROM order_totals
WHERE total_spent > 1000;

Use Tools That Help

Here are some beginner-friendly tools that can make writing SQL easier:

  • SQL Formatter – Automatically cleans up your code with proper spacing and structure. Try one in VS Code or your favorite SQL editor.
  • Online Beautifiers – Sites like org let you paste in messy queries and get back a clean version instantly.
  • SQL Linters – These tools check your queries for mistakes or inconsistent formatting and suggest improvements. Great for learning best practices as you go.

Using these tools helps you build better habits and write clearer SQL faster.

Ready to Keep Learning?

You’ve made it this far – and that already puts you ahead of the game. If you want to keep building your skills in a practical and enjoyable way, the best next step is hands-on practice.

Here are some helpful resources from LearnSQL.com:

Pick one messy query from your own work and clean it up using what you’ve learned. Then do another. Pretty soon, writing clean, easy-to-understand SQL will feel natural.