JOIN은 두 개의 릴레이션에서 연관된 튜플들을 결합하여, 하나의 새로운 릴레이션으로 반환한다.
<동호회>
회원ID | 사번 | 이름 |
---|---|---|
101 | B117 | 신짱구 |
102 | K230 | 김철수 |
103 | L300 | 한유리 |
<사원>
사번 | 이름 | 주소 |
---|---|---|
K230 | 김철수 | 서울 |
L300 | 한유리 | 안동 |
K400 | 임맹구 | 성남 |
두 릴레이션의 속성 값을 비교하여 특정 조건을 만족하는 튜플만 반환하는 방식이다.
세타 조인은 =
외에도 !=
, <
, >
, ≤
, ≥
와 같은 다양한 비교 연산자를 사용할 수 있는 조인의 일종이며, 보통 ON 절을 사용해 조인 조건을 명시한다.
세타조인에서 =
연산자를 사용하는 조인을 동등 조인(Equi-Join)이라 한다.
JOIN 대상 테이블에서 공통 속성을 기준으로 =(equal)
비교에 의해 같은 값을 가지는 행을 연결하여 결과 생성하는 방법이다.
SELCET 과목번호, 과목이름 FROM R1, R2 WHERE R1.학번 = R2.학번 AND R1.이름 = '푸바오';
EQUI JOIN에서 JOIN 조건이 =
일 때 동일한 속성이 두 번 나타나게 되는데, 이 중 중복된 속성을 제거하여 같은 속성을 한 번만 표기하는 방법이다.
SELECT [테이블명1.]속성명, [테이블명2.]속성명... FROM 테이블명1 NATURAL JOIN 테이블명2;
SELECT [테이블명1.]속성명, [테이블명2.]속성명... FROM 테이블명1 JOIN 테이블명2 USING(속성명);
내부 조인은 공통 존재 컬럼의 값이 같은 경우를 추출하는 기법이다.
SELECT
동호회.*, 사원.*
FROM 동호회 INNER JOIN 사원
ON 동호회.사번=사원.사번;
<결과>
회원ID | 사번 | 이름 | 사번 | 이름 | 주소 |
---|---|---|---|---|---|
102 | K230 | 김철수 | K230 | 김철수 | 서울 |
103 | L300 | 한유리 | L300 | 한유리 | 안동 |
외부 조인은 왼쪽/오른쪽 중 하나의 테이블의 모든 데이터와 그 반대에 해당하는 데이블의 동일한 데이터를 추출하는 기법 또는 양쪽의 모든 데이터를 추출하는 기법이다.
왼쪽 테이블의 모든 데이터와 오른쪽 데이블의 동일한 데이터를 추출하는 기법이다.
SELECT a.코드, 이름, 동아리명 FROM 사원 a LEFT OUTER JOIN 동아리 b ON a.코드 = b.코드;
SELECT
동호회.*, 사원.*
FROM 동호회 LEFT OUTER JOIN 사원
ON 동호회.사번=사원.사번;
<결과>
회원ID | 사번 | 이름 | 사번 | 이름 | 주소 |
---|---|---|---|---|---|
101 | B117 | 신짱구 | NULL | NULL | NULL |
102 | K230 | 김철수 | K230 | 김철수 | 서울 |
103 | L300 | 한유리 | L300 | 한유리 | 안동 |
오른쪽 테이블의 모든 데이터와 왼쪽 데이블의 동일한 데이터를 추출하는 기법이다.
SELECT
동호회.*, 사원.*
FROM 동호회 RIGHT OUTER JOIN 사원
ON 동호회.사번=사원.사번;
<결과>
회원ID | 사번 | 이름 | 사번 | 이름 | 주소 |
---|---|---|---|---|---|
102 | K230 | 김철수 | K230 | 김철수 | 서울 |
103 | L300 | 한유리 | L300 | 한유리 | 안동 |
NULL | NULL | NULL | K300 | 임맹구 | 성남 |
양쪽의 모든 데이터를 추출하는 기법이다.
SELECT
동호회.*, 사원.*
FROM 동호회 FULL OUTER JOIN 사원
ON 동호회.사번=사원.사번;
<결과>
회원ID | 사번 | 이름 | 사번 | 이름 | 주소 |
---|---|---|---|---|---|
101 | B117 | 신짱구 | NULL | NULL | NULL |
102 | K230 | 김철수 | K230 | 김철수 | 서울 |
103 | L300 | 한유리 | L300 | 한유리 | 안동 |
NULL | NULL | NULL | K300 | 임맹구 | 성남 |
서브 쿼리를 사용하여 서브 쿼리의 결과에 존재하는 데이터만 메인 쿼리에서 추출하는 조인 방법이다.
group by
나 distinct
를 통해 중복을 제거하고 사용하면 성능 향상의 효과를 얻을 수 있음SELECT * FROM A WHRER EXISTS (SELECT 1 FROM B WHERE A.name = B.name);
교차 조인조인 조건 없이 테이블의 모든 데이터 조합하여 추출하는 방식으로 Cartesian Product(카테시안 곱)을 생성한다.
SELECT * FROM A CROSS JOIN B ON A.id = B.id;
<도서>
책번호 | 책명 |
---|---|
111 | 운영체제 |
222 | 자료구조 |
333 | 컴퓨터구조 |
<도서가격>
책번호 | 가격 |
---|---|
111 | 20,000 |
222 | 25,000 |
333 | 10,000 |
444 | 15,000 |
SELECT
A.책번호, A.책명, B.책번호, B.가격
FROM 도서 A CROSS JOIN 도서가격 B;
// '도서'테이블은 A라는 별칭으로, '도서가격'테이블은 B라는 별칭으로 설정 후 조건 설정 없이 교차 조인
<결과>
A.책번호 | A.책명 | B.책번호 | B.가격 |
---|---|---|---|
111 | 운영체제 | 111 | 20,000 |
111 | 운영체제 | 222 | 25,000 |
111 | 운영체제 | 333 | 10,000 |
111 | 운영체제 | 444 | 15,000 |
222 | 자료구조 | 111 | 20,000 |
222 | 자료구조 | 222 | 25,000 |
222 | 자료구조 | 333 | 10,000 |
222 | 자료구조 | 444 | 15,000 |
333 | 컴퓨터구조 | 111 | 20,000 |
333 | 컴퓨터구조 | 222 | 25,000 |
333 | 컴퓨터구조 | 333 | 10,000 |
333 | 컴퓨터구조 | 444 | 15,000 |
셀프 조인은 자기 자신에게 별칭을 지정한 후 다시 조인하는 기법이다.
SELECT * FROM A AS parent JOIN A AS child;
<도서>
책번호 | 책명 | 선수과목_책번호 |
---|---|---|
111 | 운영체제 | 222 |
222 | 자료구조 | 555 |
333 | 컴퓨터구조 | NULL |
SELECT
A.책번호, A.책명, B.책번호, B.책명
FROM 도서 A JOIN 도서 B;
ON A.선수과목_책번호 = B.책번호;
// '도서'테이블은 A, B라는 별칭으로 따로 설정
// 테이블 내의 다른 컬럼을 조건으로 두어 셀프 조인 수행
<결과>
A.책번호 | A.책명 | B.책번호 | B.책명 |
---|---|---|---|
111 | 운영체제 | 222 | 자료구조 |
222 | 자료구조 | 555 | 컴퓨터구조 |
안티 조인은 A 테이블에는 존재하지만, B 테이블에는 존재하지 않는 값만을 선택하는 연산이다.
참고,
길벗알앤디. 『정보처리기사 실기 단기완성』. 길벗. 2023
NCS 정보처리기사 연구회(윤영빈, 서용욱, 김학배, 박인상 공저). 『수제비 2023 정보치리기사 실기』. 건기원. 2023
https://youtu.be/61rPcPhh3Sk?si=Cxelj0s1EV6NZOVe