[SQLD] 표준조인

younghyun·2023년 6월 7일
0

SQLD

목록 보기
7/18

순수 관계 연산자

SELECT, PROJECT, JOIN, DIVIDE

[67번]
Join시 적절한 Join조건이 없으면 카티시안 곱이 발생한다.
3개의 엔티티를 Join하기 위해서는 가운데 엔티티가 WHERE 절에 최소 2번이 나타나야 한다.

INNER JOIN

JOIN 조건에서 동일한 값이 있는 행만 반환
WHERE에서 사용하던 JOIN을 FROM에서 정의, USING 조건절이나 ON 조건절을 필수적으로 사용해야 함

SELECT EMP.DEPTNO, EMPNO, ENAME, DNAME
FROM EMP, DEPT 
WHERE EMP.DEPTNO = DEPT.DEPTNO;

SELECT EMP.DEPTNO, EMPNO, ENAME, DNAME 
FROM EMP 
  INNER JOIN DEPT 
  ON EMP.DEPTNO = DEPT.DEPTNO; 

// INNER는 디폴트이므로 생략 가능하다
SELECT EMP.DEPTNO, EMPNO, ENAME, DNAME 
FROM EMP 
  JOIN DEPT 
  ON EMP.DEPTNO = DEPT.DEPTNO;

NATURAL JOIN

두 테이블 간의 동일한 이름을 갖는 모든 컬럼들에 대해 EQUI JOIN을 수행
추가로 USING, ON, WHERE 절에서 JOIN 조건을 정의할 수 없음
JOIN이 되는 테이블의 데이터 성격과 컬럼명이 동일해야 하는 제약 조건이 있음

SELECT DEPTNO, EMPNO, ENAME, DNAME 
FROM EMP 
NATURAL JOIN DEPT;

USING 조건절

NATURAL JOIN에서 모든 일치되는 컬럼에 대해 JOIN이 이루어지지만
FROM 절의 USING 조건절을 이용하면 원하는 컬럼에 대해 선택적으로 EQUI JOIN 할 수 있다

[70번] USING 조건절은 접두사를 붙일 수 없다.

USING (T.STADIUM_ID = S.STADIUM_ID)  // 잘못된 표현
USING (STADIUM_ID)  // 맞는 표현

CROSS JOIN

일반 집합 연산자의 PRODUCT 개념으로 테이블 간 JOIN 조건이 없는 경우 생길 수 있는 모든 데이터 조합

  • 결과는 양쪽 집합의 M+N 건의 데이터 조합 발생
  • NATURAL JOIN의 경우 WHERE 절에서 JOIN 조건을 추가할 수 없지만, CROSS JOIN의 경우 WHERE 절에 JOIN 조건을 추가할 수 있다.

[71번] CROSS JOIN

// 카타시안 프로덕트를 만들기 위한 SQL 문장
SELECT ENAME, DNAME
FROM EMP CROSS JOIN DEPT
ORDER BY ENAME;

OUTER JOIN

INNER JOIN과 대비하여 OUTER JOIN이라고 불리며, JOIN 조건에서 동일한 값이 없는 행도 반환할 때 사용

[77번]

// ORACLE에서는 +로 OUTER JOIN 구문을 처리한다.
WHERE A.게시판ID = B.게시판ID(+)
AND B.삭제여부(+) = 'N'
AND A.사용여부 = 'Y'

// SQL 서버
LEFT OUTER JOIN 게시글 B
ON A.게시판ID = B.게시판ID AND B.삭제여부 = 'N'
WHERE A.사용여부 = 'Y'

이를 통해 B를 중심으로 OUTER JOIN임을 알수있다.
따라서 게시글이 존재하지 않는 게시판도 조회되어야 한다.

LEFT OUTER JOIN

왼쪽 테이블 먼저 다 읽고 우측 테이블 읽기

profile
🌱 주니어 백엔드 개발자입니당

0개의 댓글