SQL 집합 연산자
- UNION: 두 집합의 합집합을 반환, (중복 값 X)
- UNION ALL: 두 집합의 합집합을 반환, (중복 값 O)
- INTERSECT: 두 집합의 교집합을 반환
- EXCEPT: 첫 번째 집합에서 두 번째 집합을 제외한 차집합을 반환
- INNER JOIN(JOIN): 두 테이블 간의 일치하는 행을 연결
1. UNION (중복 X 합집합)
- 두 집합의 합집합을 반환, (중복 값 X)
# table 1 # table 2
+------+ +------+
| nums | | nums |
+------+ +------+
| 1 | | 3 |
| 2 | | 4 |
| 3 | | 5 |
+------+ +------+
# 합집합 쿼리
SELECT nums FROM table1
UNION
SELECT nums FROM table2;
# 결과
+------+
| nums |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+------+
2. UNION ALL (중복 O 합집합)
- 두 집합의 합집합을 반환, (중복 값 O)
# table 1 # table 2
+------+ +------+
| nums | | nums |
+------+ +------+
| 1 | | 3 |
| 2 | | 4 |
| 3 | | 5 |
+------+ +------+
# 중복 허용 합집합 쿼리
SELECT nums FROM table1
UNION ALL
SELECT nums FROM table2;
# 결과
+------+
| nums |
+------+
| 1 |
| 2 |
| 3 |
| 3 |
| 4 |
| 5 |
+------+
3. INTERSECT (교집합)
- 두 집합의 교집합을 반환
# table 1 # table 2
+------+ +------+
| nums | | nums |
+------+ +------+
| 1 | | 3 |
| 2 | | 4 |
| 3 | | 5 |
+------+ +------+
# 교집합 쿼리
SELECT nums FROM table1
INTERSECT
SELECT nums FROM table2;
# 결과
+------+
| nums |
+------+
| 3 |
+------+
4. EXCEPT (차집합)
- 첫 번째 집합에서 두 번째 집합을 제외한 차집합을 반환
# table 1 # table 2
+------+ +------+
| nums | | nums |
+------+ +------+
| 1 | | 3 |
| 2 | | 4 |
| 3 | | 5 |
+------+ +------+
# 차집합 쿼리
SELECT nums FROM table1
EXCEPT
SELECT nums FROM table2;
# 결과
+------+
| nums |
+------+
| 1 |
| 2 |
+------+
5. INNER JOIN (JOIN)
- 두 테이블 간의 일치하는 행을 연결
- INNER JOIN은 JOIN으로 생략하여 사용하기도 합니다.
- 'ON E.DepartmentID = D.DepartmentID' 와 'USING (DepartmentID)' 동일
# Employee 테이블
+----+--------+--------+--------------+
| ID | Name | Salary | DepartmentID |
+----+--------+--------+--------------+
| 1 | Alice | 50000 | 1 |
| 2 | Bob | 60000 | 2 |
| 3 | Chris | 70000 | 1 |
+----+--------+--------+--------------+
# Department 테이블
+--------------+----------------+
| DepartmentID | DepartmentName |
+--------------+----------------+
| 1 | HR |
| 2 | Finance |
+--------------+----------------+
# INNER JOIN 쿼리
SELECT E.ID, E.Name, E.Salary, D.DepartmentName
FROM Employee AS E
JOIN Department AS D ON E.DepartmentID = D.DepartmentID;
# JOIN Department AS D USING (DepartmentID); (위와 동일 코드)
# 결과
+----+--------+--------+----------------+
| ID | Name | Salary | DepartmentName |
+----+--------+--------+----------------+
| 1 | Alice | 50000 | HR |
| 2 | Bob | 60000 | Finance |
| 3 | Chris | 70000 | HR |
+----+--------+--------+----------------+
본 게시글은 ChatGPT의 도움을 받아 작성하였습니다.
'Language > MySQL' 카테고리의 다른 글
CONCAT 함수 (0) | 2024.01.05 |
---|---|
재귀 함수 (0) | 2024.01.04 |
DataBase (데이터베이스) (2) | 2024.01.03 |
REGEXP (정규 표현식) (2) | 2024.01.02 |
SQL문 기본 구조 (0) | 2023.12.25 |