Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 마크다운
- docker 소개
- github
- SQL
- 정보처리기사
- mybatis
- 필기
- dql
- MVC 패턴
- 쿠버네티스 기본 개념
- 기본 API
- 쿠버네티스
- DB
- 데이터베이스
- VS Code
- 깃허브
- Flutter
- DB 개요
- ORACLE 기초
- java 기초
- 웹개발 기초
- java
- 기초 선택자
- oracle
- DDL
- 도커
- docker
- view
- DB 모델링
- 프로그래밍 기초
Archives
- Today
- Total
핑구
04. JOIN 본문
📅 2021.09.13
JOIN
- 하나 이상의 테이블에서 데이터를 조회하기 위해 사용하며, 수행 결과는 하나의 Result Set으로 출력된다. 겹치는 컬럼을 연결하여 데이터를 불러온다.
- 여러 테이블에서 자료를 가져와야 하는데, JOIN을 사용하지 않는 경우 하나의 결과로는 출력될 수 없기 때문에 여러 개의 결과를 함께 봐야 한다.
내부 조인(INNER JOIN)
- JOIN의 기본으로 일치하는 값이 없는 행은 조인 되지 않는다.
- JOIN 방법
- 오라클 전용 구문 : FROM절에 ','로 구분하여 합칠 테이블 명을 기술하고, WHERE절에 합치기에 사용할 컬럼 명을 명시하여 조건에 해당하는 경우만 출력한다.
컬럼 명이 같은 경우에는 어느 테이블에 있는지 명확하게 알 수 없기 때문에 열의 정의가 애매하다는 오류가 발생한다. 따라서 어느 테이블의 컬럼인지 알 수 있도록 테이블 이름을 명시하여야 한다. (ex. JOB.JOB_CODE) FROM 절에 해당 테이블의 별칭을 지정한 후, 별칭으로 명시하는 것도 가능하다.-- 컬럼 명이 다른 경우 SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE FROM EMPLOYEE, DEPARTMENT WHERE DEPT_CODE = DEPT_ID; -- 컬럼 명이 같은 경우 SELECT EMP_ID, EMP_NAME, EMPLOYEE.JOB_CODE, JOB_NAME FROM EMPLOYEE, JOB WHERE EMPLOYEE.JOB_CODE = JOB.JOB_CODE; -- 컬럼 명이 같은 경우 (별칭 사용) SELECT EMP_ID, EMP_NAME, E.JOB_CODE, JOB_NAME FROM EMPLOYEE E, JOB J WHERE E.JOB_CODE = J.JOB_CODE;
- ANSI 표준 구문 : FROM에 테이블 이름을 직접 적지 않고, JOIN을 사용하여 연결한다. 연결에 사용하려는 컬럼 명이 다른 경우 ON()을 사용하여 JOIN하고, 같은 경우 USING()을 사용하여 JOIN한다.
컬럼 명이 같은 경우 ON()을 사용하고, 테이블 명을 명시하여도 정상적으로 작동하나, 보통 USING()을 사용한다.
테이블 명을 적지 않기 때문에 WHERE 절을 이용하지 않아도 된다.-- 컬럼 명이 다른 경우 SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE FROM EMPLOYEE JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID); -- 컬럼 명이 같은 경우 SELECT EMP_ID, EMP_NAME, JOB_CODE, JOB_NAME FROM EMPLOYEE JOIN JOB USING (JOB_CODE);
- 오라클 전용 구문 : FROM절에 ','로 구분하여 합칠 테이블 명을 기술하고, WHERE절에 합치기에 사용할 컬럼 명을 명시하여 조건에 해당하는 경우만 출력한다.
외부 조인(OUTER JOIN)
- 내부 조인과 다르게 일치하는 값이 없는 행도 포함되며, OUTER JOIN을 반드시 명시하여야 한다.
- JOIN 방법
- 오라클 전용 구문
- LEFT [OUTER] JOIN : 합치기에 사용한 두 테이블 중 왼쪽에 기술된 테이블의 컬럼 수를 기준으로 JOIN한다.
맞춰주는 쪽에 (+)를 붙여 표시한다.SELECT EMP_NAME, DEPT_TITLE FROM EMPLOYEE, DEPARTMENT WHERE DEPT_CODE = DEPT_ID(+);
- RIGHT [OUTER] JOIN : 합치기에 사용한 두 테이블 중 오른쪽에 기술된 테이블의 컬럼 수를 기준으로 JOIN한다.
맞춰주는 쪽에 (+)를 붙여 표시한다.
SELECT EMP_NAME, DEPT_TITLE FROM EMPLOYEE, DEPARTMENT WHERE DEPT_CODE(+) = DEPT_ID;
- FULL [OUTER] JOIN: 합치기에 사용된 두 테이블이 가진 모든 행을 결과에 포함시키는 경우 사용된다.
오라클 구문에서 FULL OUTER JOIN은 사용할 수 없다. 양쪽에 (+)를 붙이는 경우 'outer-join된 테이블은 1개만 지정할 수 있습니다'라는 오류가 발생한다.
- LEFT [OUTER] JOIN : 합치기에 사용한 두 테이블 중 왼쪽에 기술된 테이블의 컬럼 수를 기준으로 JOIN한다.
- ANSI 표준 구문
- LEFT [OUTER] JOIN
JOIN 앞에 LEFT OUTER를 붙여 표시하며, OUTER는 생략 가능하다.SELECT EMP_NAME, DEPT_TITEL FROM EMPLOYEE LEFT OUTER JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID);
- RIGHT [OUTER] JOIN
JOIN 앞에 RIGHT OUTER를 붙여 표시하며, OUTER는 생략 가능하다.SELECT EMP_NAME, DEPT_TITLE FROM EMPLOYEE RIGHT OUTER JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID);
- FULL [OUTER] JOIN
JOIN 앞에 FULL OUTER를 붙여 표시하며, OUTER는 생략 가능하다.SELECT EMP_NAME, DEPT_TITLE FROM EMPLOYEE FULL OUTER JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID);
- LEFT [OUTER] JOIN
- 오라클 전용 구문
CROSS JOIN
- 카테시안 곱이라고도 하며 조인되는 테이블의 각 행들이 모두 매핑된 데이터가 출력된다. 출력되는 데이터의 수는 행의 컬럼 수 * 또 다른 행의 컬럼 수이다. WHERE 절 없이 오라클 전용 구문 INNER JOIN을 사용한 경우의 결과와 같다.
NON_EQU JOIN
- 다른 JOIN의 경우 지정한 컬럼 값이 일치하는 경우에 해당 값을 가지고 오는데, NON_EQU JOIN의 경우 지정한 범위에 포함되는 경우 해당 행들을 연결시킨다.
SELF JOIN
- 같은 테이블을 JOIN하는 것으로 해당 테이블에서 여러 개의 컬럼을 비교, 정렬하는 경우에 사용된다. 이때 FROM 절에는 같은 테이블을 두 번 기재하며, 별칭으로 구분하여 사용해 주어야 한다.
다중 JOIN
- 하나 이상의 테이블에서 데이터를 조회하기 위해 사용하며, 수행 결과는 하나의 Result Set으로 나온다. ANSI 표준 구문의 경우 JOIN 순서가 매우 중요하다.
- JOIN 방법
- 오라클 전용 구문 : FROM 절에 사용하는 테이블 명을 모두 기술한 후, 해당 테이블에 맞는 조건을 모두 WHERE 절에 추가한다.
오라클 전용 구문의 경우 순서가 변경되어도 실행 가능하다.SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE, LOCAL_NAME FROM EMPLOYEE, DEPARTMENT, LOCATION WHERE DEPT_CODE = DEPT_ID AND LOCAL_CODE = LOCATION_ID;
- ANSI 표준 구문 : 여러 개의 JOIN을 붙여서 사용하며, JOIN이 순서대로 실행되기 때문에 오라클 전용 구문과는 다르게 순서가 매우 중요하다. 만약 JOIN이 실행될 때 JOIN에 존재하는 테이블이 FROM 절에 있는 테이블과 아무런 연관이 없는 경우 오류가 발생할 수 있다. 따라서 연관 있는 테이블끼리의 JOIN이 선행되어야 한다.
SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE, LOCAL_NAME FROM EMPLOYEE JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID) JOIN LOCATION ON(LOCAL_CODE = LOCATION_ID);
- 오라클 전용 구문 : FROM 절에 사용하는 테이블 명을 모두 기술한 후, 해당 테이블에 맞는 조건을 모두 WHERE 절에 추가한다.
'JAVA 웹 개발 > 2. Oracle' 카테고리의 다른 글
06. DDL(CREATE) (0) | 2022.08.13 |
---|---|
05. 서브쿼리 (0) | 2022.06.08 |
03. GROUP BY HAVING (0) | 2022.06.08 |
02. 함수 (0) | 2022.06.08 |
01. DQL(SELECT) (0) | 2022.05.23 |