
MySQL Derived Table
A derived table in MySQL is a virtual table that is the result of a subquery within a SQL statement. Derived tables are sometimes referred to as inline views or subquery factoring. They are used to simplify complex queries by allowing you to treat the result of a subquery as if it were an actual table, which can be further queried or joined with other tables in your SQL statement.
The basic structure of a derived table looks like this:
SELECT column1, column2
FROM (SELECT column3, column4 FROM table1 WHERE condition) AS derived_table
In this structure:
column1
andcolumn2
are columns you want to retrieve.- The subquery
(SELECT column3, column4 FROM table1 WHERE condition)
generates the derived table. - The
AS derived_table
assigns an alias to the derived table, making it possible to reference it in the outer query.
Here are some common use cases for derived tables in MySQL:
- Complex Filtering and Transformation:
You can use derived tables to simplify complex filtering or transformations by creating a temporary result set that’s easier to work with.
SELECT employee_name, department_name
FROM (SELECT e.employee_name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id) AS employee_department;
- Aggregation and Reporting:
Derived tables are useful for generating summary data or reports based on aggregated data from other tables.
SELECT department_name, AVG(salary) AS avg_salary
FROM (SELECT e.department_id, AVG(e.salary) AS salary
FROM employees e
GROUP BY e.department_id) AS department_salary
JOIN departments d ON department_salary.department_id = d.department_id;
- Data Cleanup and Transformation:
You can use derived tables to clean, transform, or reformat data before further processing.
SELECT product_name, category_name
FROM (SELECT product_name, category_name
FROM products
WHERE category_name IS NOT NULL) AS cleaned_data;
- Joining Subqueries:
When you need to join the results of two subqueries, derived tables can help you simplify the query structure.
SELECT employee_name, department_name
FROM (SELECT employee_id, department_id FROM employees) AS emp
JOIN (SELECT department_id, department_name FROM departments) AS dept
ON emp.department_id = dept.department_id;
Derived tables can make your SQL queries more readable and maintainable, particularly when dealing with complex data transformations or reporting tasks. They are a valuable tool in the SQL toolbox for creating clear and concise queries.