SQL에서 조인은 공통된 조건으로 테이블을 합치는 기능을 합니다.
어떻게 합쳐지는 것일까요?
관계형 DBMS에서 아주 중요한 기능인 정규화는 하나로 되어있는 것을 더 작은 조각으로 분리하는 기술을 말합니다.
정규화를 수행하면 하나의 테이블이 여러 개의 테이블로 나누어지고, 정규화를 하기 전에는 하나의 테이블에 있었던 데이터들이 여러 개의 테이블의 나뉘어서 저장이 되고 이렇게 여러 개의 테이블에 나눠져 저장된 데이터를 조합해서 가져오는 것이 JOIN이라는 기술입니다.
SELF JOIN
셀프 조인은 말 그대로 자신의 테이블로 조인을 하는 것을 말합니다.
원하는 데이터가 하나의 테이블에 전부 들어있는 경우 사용합니다.
SELECT *
FROM MEMBER M JOIN MEMBER M2
ON M.ID = M2.WRITE_ID
구문입니다. 대신 같은 테이블을 사용하기 때문에
별칭을 지정해 주어야 합니다.
CROSS JOIN
크로스 조인은 보통 더미 테이블을 만들 때 사용됩니다.
SELECT * FROM MEMBER CROSS JOIN NOTICE;
CROSS JOIN은 MEMBER의 레코드 개수와 NOTICE테이블의 레코드 개수를 곱해 데이터를 조회합니다.
데이터가 많은 경우 데이터베이스를 느려지게 하는 원인이 될 수 있으므로 신중히 사용합니다.
UNION, UNION ALL
여러 개의 SQL문을 하나의 SQL문으로로 합치는 역할을 합니다.
여기서 제약조건은 합 집합으로 표현 하기원 하는 두 테이블의 칼럼의 개수가 같아야 하며, 데이터 타입이 동일해야 합니다.
UNION은 중복을 제거하여 정렬하기 때문에 속도가 저하되지만
UNION ALL은 중복을 제거하지 않기 때문에 성능이 더 좋습니다.
UNION
SELECT TABLE1_ID FROM TABLE1
UINON
SELECT TABEL2_ID FROM TABLE2;
레코드행이 같은 ID를 제외하고 레코드가 출력됩니다.
UNION ALL
SELECT TABLE1_ID FROM TABLE1
UNION ALL
SELECT TABEL2_ID FROM TABLE2;
중복을 제외하지 않고 두 테이블에 존재하는 ID전부를 합집합으로 가져옵니다.
union과 join의 차이점은 join은 데이터의 수평적 결합이고 unon은 두 개의 테이블에 데이터 존재 여부를 검사하지 않고 무조건 합치는 기능을 합니다.
INTERSECT
INTERSECT는
여러 개의 테이블에 데이터가 동시에 존재하는 교집합을 구합니다.
만약 intersect를 사용하지 않고 교집합을 구하기 위해서는
select id from
(select DISTINCT id from member
union all
select DISTINCT writer_id from notice
)
group by id
having count(*) >=2;
처럼 그룹을 지어준 뒤 having절에서 조건을 주어야 하는데
intersect를 사용하게 되면 교집합을 쉽게 구할 수 있다.
SELECT WRITER_ID FROM NOTICE
INTERSECT
SELECT ID FROM MEMBER;
'웹 프로그래밍 기초 > 자바기반의 웹&앱 응용SW 개발자' 카테고리의 다른 글
자바기반의 웹&앱 응용 SW개발자 양성과정 34일차 -54 (0) | 2020.04.19 |
---|---|
자바기반의 웹&앱 응용 SW개발자 양성과정 33일차 -53 (0) | 2020.04.17 |
자바기반의 웹&앱 응용 SW개발자 양성과정 31일차 -51 (0) | 2020.04.13 |
자바기반의 웹&앱 응용 SW개발자 양성과정 30일차 -50 (0) | 2020.04.10 |
자바기반의 웹&앱 응용 SW개발자 양성과정 29일차 -49 (0) | 2020.04.09 |
댓글