- 조인 (Join)
- 두 개의 테이블을 연결하여 데이터를 검색하는 방법
- 서로 다른 테이블에 저장된 관련된 데이터를 가져와서 하나의 결과로 표시 (하나의 테이블)
- ANSI SQL 조인 방식
- FROM 절에서 두 테이블명 사이에 조인 종류에 따라 CROSS, INNER, OUTER 중 선택하고 JOIN 키워드 같이 입력
- 조인에 대한 조건은 ON절에 저장하고 나머지 조건은 WHERE절에 작성
- CROSS, INNER, OUTER 키워드는 생략도 가능
- 형태
-
SELECT * FROM 테이블A [CROSS|INNER|OUTER] JOIN 테이블B ON 조인조건 WHERE 기타조건;
-
- Non-ANSI SQL 조인 방식
- FROM절에 테이블을 쉼표로 구분하여 작성
- 조인조건과 기타조건을 구분하지 않고 모두 WHERE 절에 작성
- 형태
-
SELECT * FROM 테이블A, 테이블B WHERE 조인조건과 기타조건;
-
- ERD (Entity Relationship Diagram)
- 테이블 간의 관계를 설명해주는 다이어그램
- 데이터베이스의 구조와 관계를 한눈에 파악 가능
- 조인의 종류
- Cross Join
- 한쪽 테이블의 각 행마다 다른쪽 테이블의 모든 행이 각각 한번씩 매칭되는 조인
- 카티션 곱(Cartesian Product)라고도 부른다.
- 크로스 조인 결과 행의 개수는 테이블A 행의 개수*테이블B 행의 개수
- 형태
-
SELECT * FROM 테이블A [CROSS] JOIN 테이블B WHERE 기타조건;
-
- Inner Join (내부 조인)
- 각 테이블에서 조인조건에 일치하는 데이터만 가져오는 조인
- Equi Join과 Non-Equi Join
- Equi Join
- 조인조건에 = 연산자 사용
- Non-Equi Join
- 조인조건에 = 연산지 외에 비교 연산자 사용
- Equi Join
- 다중 조인
- JOIN - ON 아래에 또다시 JOIN - ON
- 형태
-
SELECT * FROM 테이블A [INNER] JOIN 테이블B ON 조인조건 WHERE 기타조건;
-
- 예시
-
SELECT 사원번호, 직위, 사원.`부서번호`, 부서명 FROM 사원 INNER JOIN 부서 ON 사원.`부서번호` = 부서.`부서번호` WHERE 이름 = '이소미';
-
- LEFT/RIGHT Outer Join (외부 조인)
- 조건에 맞지 않은 행도 함께 출력할 수 있다.
- 두 테이블에서 한쪽은 데이터가 있고 한쪽에는 없을 경우 데이터가 있는 쪽을 기준으로 데이터 출력
- 테이블명 사이에 LEFT나 RIGHT를 넣어서 OUTER JOIN (OUTER은 생략 가능)
- 형태
-
SELECT * FROM 테이블A LEFT|RIGHT [OUTER] JOIN 테이블B ON 조인조건 WHERE 기타조건;
-
- LEFT JOIN
- 왼쪽에 있는 테이블을 기준으로 오르쪽 테이블의 데이터를 매칭
- 매칭데이터 없을 시 NULL 표시
- RIGHT JOIN
- 오른쪽에 있는 테이블을 기준으로 왼쪽 테이블의 데이터를 매칭
- 매칭데이터 없을 시 NULL 표시
- FULL OUTER JOIN
- LEFT OUTER JOIN에 RIGHT OUTER JOIN을 합한 형태
- 두 OUTER JOIN 중간에 UNION 연산자 사용
- SELF JOIN
- 동일한 테이블 내에서 한 컬럼이 다른 컬럼을 참조하는 조인
- 조인 조건에 동일한 테이블명을 두번 작성하여 조인한다. 이때 테이블명을 다른 별명으로 지정하여 다른 테이블인 것처럼 사용해야 한다.
- 컬럼명도 다 똑같기 때문에 테이블의 별명.컬럼명 형태로 구분해야 한다.
- Cross Join
'SQL' 카테고리의 다른 글
[SQL] 데이터 타입 (0) | 2024.03.22 |
---|---|
[SQL] 서브 쿼리 (0) | 2024.03.22 |
[SQL] WHERE 문 (GROUP BY, HAVING), 집계 함수 (0) | 2024.03.22 |
[SQL] 단일행 함수 (문자형, 숫자형, 날짜시간, 형변환, 제어흐름) (0) | 2024.03.22 |
[SQL] 연산자 (논리, 집합, NULL, IN/BETWEEN, LIKE) (0) | 2024.03.22 |