MySQL INTERSECT Clause
The INTERSECT operator in SQL is used to return the common records (intersection) from two SELECT statements. It retrieves only the rows that exist in both result sets. Unfortunately, MySQL does not natively support the INTERSECT operator. However, you can achieve the same functionality using alternative approaches.
Workarounds for INTERSECT in MySQL
Since MySQL lacks a native INTERSECT support, you can simulate it using the following methods:
- Using INNER JOIN
- Using EXISTS
- Using a Common Table Expression (CTE) (if MySQL version ≥ 8.0)
1. Using INNER JOIN
You can use an INNER JOIN between two queries to get their intersection.
Syntax
Example
Find employees present in both department1 and department2.
2. Using EXISTS
The a EXISTS keyword can also be used to find the intersection of two queries.
Syntax
Example
Find students enrolled in both course_a and course_b.
3. Using Common Table Expressions (CTE)
For MySQL 8.0 and later, you can use CTEs to find the intersection.
Syntax
Example
Find products listed in both store1 and store2.
4. Using GROUP BY and HAVING
Another method is to combine both result sets with UNION ALL and then filter records that appear in both using GROUP BY and HAVING.
Syntax
Example
Find students in both math_class and science_class.
Comparison of Methods
| Method | Performance | Use Case |
|---|---|---|
| INNER JOIN | Fast for indexed columns | Best for simple intersections. |
| EXISTS | Good for subqueries | Works well with correlated subqueries. |
| CTE | Readable, modern | Requires MySQL 8.0 or later. |
| GROUP BY | Resource-intensive | Useful when combining multiple tables. |
Conclusion
While MySQL does not have a built-in INTERSECT operator, the same functionality can be achieved using INNER JOIN, EXISTS, GROUP BY, or CTEs. The best approach depends on your specific use case and the size of your dataset.

