일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 해시
- 블록체인
- K-MOOC
- biginteger사용법
- 오블완
- national instruments
- attribute
- 자바문자열구분
- CSS 기초
- html기초
- 혁신의기술2:신뢰의미래 블록체인을 만나다
- 자바스크립트
- 딥러닝
- 2차원배열정렬
- 우선순위큐
- K-MOOC 단국대학교 홍보단
- Node
- 디스크블록할당
- stringreader
- 시스템프로그래밍
- StringBuilder
- 블록체인강의
- 블록체인 강의
- StringTokenizer
- 머신러닝
- 자바입력받기
- 티스토리챌린지
- Entity
- 단국대학교 k-mooc
- 컴파일시스템
- Today
- Total
열정 실천
009. 조인 JOIN ⨝ (세타조인, 동등조인, 자연조인, 외부조인, 세미조인) _ JOIN ON, EXISTS 본문
조인 연산자
- 세타 조인(theta join)
- 동등 조인(equi join)
- 자연 조인(natural join)
- 외부 조인(outer join)
- 세미 조인(semi join)
세타 조인
두 테이블을 임의의 비교 연산자( =, ≠, <, >, ≤, ≥ )를 사용하여 결합하는 조인 방식
예시)
SELECT *
FROM A
JOIN B
ON A.age > B.age;
이는 JOIN 키워드와 ON절을 사용한 명시적 조인 방식이다.
SELECT *
FROM A, B
WHERE A.age > B.age;
이처럼 FROM, WHERE절로 암시적 조인 방식으로도 표현가능 하다.
두 쿼리는 같은 동작을 수행하지만 쿼리가 복잡할수록 가독성이 좋은 명시적 조인 방식(첫번째 쿼리)를 사용하는 것이 더 좋다.
동등 조인
두 테이블을 동등(=) 조건을 만족하는 경우에만 결합하는 조인 방식
예시)
SELECT *
FROM Employees E
JOIN Departments D
ON E.department_id = D.department_id;
자연 조인
두 테이블 간에 동일한 속성(열)을 기준으로 자동으로 결합하는 조인 방식 (중복 제외)
예시)
SELECT *
FROM Employees
NATURAL JOIN Departments;
Employees와 Departments 테이블에 공통되는 속성인 department_id를 기준으로 자동 조인이 이루어진다.
외부 조인
두 테이블을 결합할 때, 조건을 만족하지 않는 튜플들도 포함시켜 결과를 반환하는 조인 방식
- 왼쪽 외부 조인 (Left Outer Join): 왼쪽 테이블의 모든 튜플을 반환하며, 오른쪽 테이블에서 일치하는 데이터 반환. 없으면 NULL을 반환.
- 오른쪽 외부 조인 (Right Outer Join): 오른쪽 테이블의 모든 튜플을 반환하며, 왼쪽 테이블에서 일치하는 데이터 반환. 없으면 NULL을 반환.
- 전체 외부 조인 (Full Outer Join): 두 테이블 모두의 모든 튜플을 반환하며, 어느 쪽에든 일치하지 않으면 NULL을 반환.
SELECT *
FROM Employees E
LEFT OUTER JOIN Departments D
ON E.department_id = D.department_id;
SELECT *
FROM Employees E
RIGHT OUTER JOIN Departments D
ON E.department_id = D.department_id;
SELECT *
FROM Employees E
FULL OUTER JOIN Departments D
ON E.department_id = D.department_id;
세미 조인
두 테이블을 결합할 때, 조건을 만족하는 튜플을 왼쪽 테이블에서만 반환하는 조인 방식
EXISTS 절을 이용해 조건을 만족하는지 여부만 확인하고, 실제로 서브쿼리에서 반환된 값을 사용하진 않는다.
결과적으로, 하나의 테이블에서만 데이터를 반환하며, 조건을 만족하는지 여부만 중요!!
SELECT *
FROM Employees E
WHERE EXISTS (
SELECT 1
FROM Departments D
WHERE E.department_id = D.department_id
);
위에 있는 내부조인 쿼리와 달리 E와 D의 id가 같을 때 E의 데이터만 반환한다.