在复杂的数据分析和开发场景中,我们经常需要对多张表的数据进行比对和关联查询,以满足复杂业务需求。SQL 提供了丰富的查询方式,包括 JOIN
、UNION
和子查询,这些技术在处理多表关联、交叉比对以及过滤特定数据时非常高效。
本文将详细介绍 JOIN
、UNION
和子查询 的核心用法,并通过实际案例展示如何利用这些方法进行数据比对与查询优化。
一、核心概念与区别
1. JOIN(连接查询)
JOIN
主要用于多表之间的行级数据关联,可以根据相关字段将多张表的数据合并在一起。
- INNER JOIN:返回两张表中符合匹配条件的记录。
- LEFT JOIN:返回左表的所有记录,如果右表没有匹配,返回
NULL
。 - RIGHT JOIN:返回右表的所有记录,如果左表没有匹配,返回
NULL
。 - FULL JOIN(部分数据库支持):返回两张表中所有匹配和不匹配的记录。
示例:
SELECT *
FROM orders o
INNER JOIN customers c
ON o.customer_id = c.customer_id;
2. UNION(合并查询)
UNION
将多次 SELECT
查询的结果合并到一起,返回去重后的记录。
- UNION ALL:合并结果但不去重,性能更高。
示例:
SELECT name FROM employees
UNION
SELECT name FROM managers;
3. 子查询(Subquery)
子查询是一种嵌套查询,可以在 SELECT
、FROM
和 WHERE
等语句中使用,通常用于复杂的条件筛选或分层查询。
- EXISTS / NOT EXISTS:判断子查询结果是否存在,适合在关联过滤中使用。
- IN / NOT IN:用于判断某字段是否在子查询结果集范围内。
示例:
SELECT name FROM customers
WHERE customer_id IN (SELECT customer_id FROM orders WHERE amount > 1000);