JOIN vs UNION
우선과 JOIN 연산과 UNION 연산이 각각 어떤 연산인지 짚고 넘어가자
JOIN
JOIN 연산은 서로 다른 테이블들의 공통점을 기반으로 데이터를 합치는 것이다.
JOIN으로 기존의 다양한 column들을 가져와 새로운 column들이 있는 테이블을 생성한다.
UNION
UNION은 두가지 혹은 더 많은 개수의 SELECT를 이용해 데이터를 합친다.
UNION으로 같은 column의 데이터들을 합쳐서 새로운 row들이 있는 테이블을 생성한다.
+ 참고로 UNION 연산은 중복을 허용하지 않으며 UNION ALL은 중복을 허용한다.
비교 예시
다음과 같이 주어진 데이터가 있다고 하자
mysql> SELECT * FROM students;
+-----------+----------+------+
| StudentID | name | age |
+-----------+----------+------+
| 1 | Hojin | 19 |
| 2 | Antoo | 10 |
| 3 | student3 | 13 |
| 4 | student4 | 14 |
| 5 | student5 | 15 |
| 6 | student6 | 16 |
+-----------+----------+------+
mysql> SELECT * FROM csmajors;
+-----------+-----------+------------+
| StudentID | name | language |
+-----------+-----------+------------+
| 1 | Jene | python |
| 7 | csmajor7 | GO |
| 8 | csmajor8 | Swift |
| 9 | csmajor9 | java |
| 10 | csmajor10 | javascript |
+-----------+-----------+------------+
JOIN
mysql> SELECT students.StudentID, students.name, students.age, csmajors.language
-> FROM students
-> INNER JOIN csmajors
-> ON students.StudentID=csmajors.StudentID;
+-----------+-------+------+----------+
| StudentID | name | age | language |
+-----------+-------+------+----------+
| 1 | Hojin | 19 | python |
+-----------+-------+------+----------+
UNION
mysql> SELECT students.StudentID, students.name
-> FROM students
-> UNION
-> SELECT csmajors.StudentID, csmajors.name
-> FROM csmajors;
+-----------+-----------+
| StudentID | name |
+-----------+-----------+
| 1 | Hojin |
| 2 | Antoo |
| 3 | student3 |
| 4 | student4 |
| 5 | student5 |
| 6 | student6 |
| 1 | Jene |
| 7 | csmajor7 |
| 8 | csmajor8 |
| 9 | csmajor9 |
| 10 | csmajor10 |
+-----------+-----------+
엑셀 함수에 비유하여 설명해보자면 JOIN은 VLOOKUP이고 UNION은 한 시트의 아래로 같은 형식의 다른 시트를 복붙하는 것으로 생각하면 쉽다.
다음과 같은 데이터가 있을 때 LEFT JOIN, RIGHT JOIN 연산 후 UNION을 통해 FULL OUTER JOIN(합집합)을 구할 수 있다.
하지만 JOIN을 하지 않고 UNION만 하려는 경우 데이터를 단순히 위아래로 병합하는 것이기 때문에 구조가 다른 두 테이블을 병합할 수 없다.
JOIN은 테이블의 구조가 달라도 같은값을 가지는 속성을 통해 테이블을 연결할 수 있다는 것과 UNION은 테이블의 구조가 다르면 연산 자체가 불가능하다는 것이 가장 큰 차이점이다.
Inner Join vs Intersect
INNER JOIN
INNER JOIN의 사용법은 다음과 같다.
SELECT 조회할 컬럼
FROM 테이블1
(INNER) JOIN 테이블2
ON 테이블1.컬럼 = 테이블2.컬럼
[WHERE 추가 조건]
테이블 1과 테이블2를 결합해서 정보를 가져온다.
INNER JOIN 구문 앞 뒤로 연결할 테이블명을 기술하고 ON절에는 각 테이블에서 공통적으로 가지고 있는 컬럼을 작성하면 된다.
사용 예시
SELECT ename, dname
FROM emp
INNER JOIN dept
ON emp.deptno = dept.deptno
WHERE ENAME = 'han';
조인의 대상이 되는 두 테이블에서 공통적으로 존재하는 컬럼인 deptno을 ON절에 기술하여 두 테이블을 연결한다.
연산의 결과는 다음과 같다.
WHERE절에 기술된 ENAME 칼럼 값인 HAN까지 적용하면
다음과 같은 최종 결과를 얻을 수 있다.
INTERSECT
INTERSECT 연산은 테이블 간에 교집합을 구하고 싶을 때 사용하는 연산이다.
SELECT deptno FROM emp
INTERSECT
SELECT deptno FROM dept;
INTERSECT 연산 시에는 SELECT 항목의 데이터 타입 그리고 순서도 똑같아야 한다.
그림으로 표현하면 다음과 같이 두 테이블에서 공통적으로 존재하는 값만 조회할 수 있다.
참고
'CS > 데이터베이스' 카테고리의 다른 글
[데이터베이스] Anomaly (이상 현상) (0) | 2022.07.22 |
---|---|
[데이터베이스] EQUI JOIN vs Non-EQUI JOIN (등가 vs 비등가 조인) (0) | 2022.07.22 |
[데이터베이스] SQL vs NoSQL 개념, 장단점, 비교 (0) | 2022.07.21 |
[데이터베이스] Join 이란 ? (0) | 2022.07.21 |
[데이터베이스] 키(Key) 개념 및 종류 (0) | 2022.07.21 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!