Recommended resources
The freely available resources this lesson will direct you to.
Hello! Welcome to your third lesson in the "Connecting Product Data with Joins" module.
Introduction
In our last lesson, you learned how to use INNER JOIN to combine data from two separate tables, like users and events. We saw that when tables share column names (like user_id), you must specify which table you're referring to using the table_name.column_name syntax.
While functional, typing out full table names like user_signup_and_demographic_data repeatedly can make your queries long, hard to read, and prone to typos. Today's lesson addresses this directly. We will focus on a simple but powerful technique that is a professional standard for writing clean SQL: table aliases.
The learning outcome for this lesson is to use table aliases (AS) to simplify and clarify queries with joins. By the end of this session, you'll be able to write JOIN queries that are more concise, readable, and maintainable—a crucial skill for anyone who wants to write queries that are easy to share and debug.
1. The Problem: Verbose Queries and Ambiguous Columns
Let's revisit the query structure from our last lesson, where we joined a users table and an events table:
SELECT
users.email,
events.event_name
FROM
users
INNER JOIN
events
ON
users.user_id = events.user_id;
This query is clear, but notice the repetition of users and events. Now, imagine your product's database has more descriptive (and longer) table names, like production_users_table and frontend_analytics_events. The query would quickly become unwieldy.
An even bigger issue arises when the columns you want to select have the same name in both tables. For example, both tables might have an id column or a created_at timestamp. If you just write SELECT id, how does the database know which table's id you want? It doesn't, and it will return an "ambiguous column" error.
This short video explains this exact problem.
Joins in MySQL | Intermediate MySQL
The video 'Joins in MySQL' by Alex The Analyst clearly demonstrates the 'ambiguous column' error that occurs when a column name exists in both tables being joined.
Please watch from 02:11 to 03:00. The presenter intentionally creates an error by using a column name that's in both tables and then shows how specifying the full table name resolves it.
2. The Solution: Table Aliases
The solution to both the verbosity and ambiguity problems is the table alias. An alias is a temporary, shorter name you give to a table within a single query.
You create an alias in the FROM or JOIN clause using the AS keyword.
The syntax looks like this:
FROM table_name AS alias_nameJOIN other_table AS other_alias_name
The AS keyword is optional in most SQL dialects, so you can also just write FROM table_name alias_name, but using AS is often clearer for readability.
Let's see how this elegantly solves the problem from the previous video.
Joins in MySQL | Intermediate MySQL
Continuing with the same video, the presenter now introduces table aliases to dramatically simplify the query.
Watch from 04:25 to 06:04. Notice how he replaces the long table names with short aliases (dem and sal) and then uses those aliases in both the ON clause and the SELECT statement.
As you saw, by defining employee_demographics AS dem and employee_salary AS sal, the rest of the query becomes much cleaner.
Here is a static image showing another clear example.

3. Syntax and Best Practices
Let's formalize the syntax and explore some best practices for using aliases.
How to Use Aliases with SQL JOINs
The article 'How to Use Aliases with SQL JOINs' from learnsql.com provides a great breakdown of the syntax and the key reasons for using aliases.
Please read the sections 'SQL Table Aliases' and 'Examples of Using SQL Alias with JOIN'. Focus on the syntax example for table aliases and the first two use-cases: 'Using an Alias with Non-Unique Column Names' and 'Improve Query Readability'.
Key takeaways from the reading:
- Syntax: You define the alias directly after the table name in the
FROMorJOINclause (e.g.,FROM users u). - Usage: Once defined, you must use the alias throughout the rest of the query (
SELECT u.email,ON u.user_id = e.user_id). - Best Practice: Choose short, intuitive aliases. Often, the first letter of the table name is sufficient (e.g.,
uforusers,pforprojects). If you have multiple tables starting with the same letter, use two letters (e.g.,prforprojects,pyforpayments).
Applying this to our original example:
Before (Verbose):
SELECT
users.email,
events.event_name
FROM
users
INNER JOIN
events
ON
users.user_id = events.user_id;
After (Concise and Clear):
SELECT
u.email,
e.event_name
FROM
users AS u
INNER JOIN
events AS e
ON
u.user_id = e.user_id;
This is much easier to write and read, especially as your queries grow in complexity.
4. Practice Exercise
Now, let's apply what you've learned. As a product designer, you might want to see which users have created projects and what those projects are called.
Scenario:
You have two tables, users and projects.
users table:
| user_id | signup_date | |
|---|---|---|
| 1 | sasha@email.com | 2023-01-15 |
| 2 | leo@email.com | 2023-02-20 |
| 3 | maria@email.com | 2023-03-10 |
projects table:
| project_id | user_id | project_name | created_at |
|---|---|---|---|
| 101 | 2 | Q1 Marketing Campaign | 2023-03-01 |
| 102 | 1 | New Website Design | 2023-03-05 |
| 103 | 2 | Mobile App Redesign | 2023-04-11 |
Your Task:
Write a SQL query that returns the email of the user and the project_name for each project. Use table aliases to make your query clean and readable.
Take a moment to write the query.
Click here to see the solution
SELECT
u.email,
p.project_name
FROM
users AS u
INNER JOIN
projects AS p
ON
u.user_id = p.user_id;
Explanation:
- We select the
emailfrom theuserstable andproject_namefrom theprojectstable. - In the
FROMclause, we aliasusersasu. - In the
INNER JOINclause, we aliasprojectsasp. - The
ONclause correctly links the two tables on their common key,user_id, using the aliasesu.user_id = p.user_id. - The
SELECTclause also uses the aliases (u.email,p.project_name) for clarity and consistency.
Conclusion
Excellent work! You've now mastered a fundamental technique for writing professional-quality SQL. While it seems like a small change, using aliases consistently will have a huge impact on the clarity and maintainability of your queries, especially as you start joining multiple tables and building more complex analyses.
Key Takeaways:
- Purpose: Table aliases (
AS) create short, temporary names for tables to make queries more readable and concise. - Problem-Solving: They solve the "ambiguous column" error by providing a clear prefix for column names (e.g.,
u.idvs.p.id). - Syntax: Define aliases in the
FROMandJOINclauses (e.g.,FROM users AS u). - Best Practice: Using clear and consistent aliases is a hallmark of clean, professional SQL code. It makes collaboration and debugging much easier.
Preview of the Next Lesson
So far, our INNER JOIN queries have shown us what users have done. But as a product designer, you're equally interested in what users haven't done. Questions like, "Which users signed up but never created a project?" are vital for understanding user activation and drop-off.
In the next lesson, we will introduce the LEFT JOIN. This powerful tool will allow you to keep all the records from one table (e.g., all users) and see where they have—or don't have—matching records in another, opening up a whole new category of user behavior analysis.