일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- html요소
- Rename to
- Create
- 자바
- Java
- Oracle
- multiarray
- 예외처리
- 신입개발자
- 기술면접
- tcp와 udp의 차이점
- CSS display 속성
- html
- 리캡차
- 네트워크
- 스프링부트
- cs질문
- 스프링 부트
- 속성
- database
- 기술 면접
- Failed to read the 'responseText' property from 'XMLHttpRequest'
- 구글 리캡차
- css position
- position속성
- 바닐라js
- 80 to 443
- 시맨틱 태그
- css
- 자바의 장점
- Today
- Total
Building value
Oracle SQL 기본 문법[JOIN] 본문
JOIN은 둘 이상의 테이블에서 데이터를 가져와 연결하는 것을 의미합니다.
JOIN은 일반적으로 테이블 간 관계를 생성하거나 데이터를 논리적으로 결합하는 데 사용됩니다.
오라클에서는 다음과 같은 JOIN 문의 종류가 있습니다.
1 . INNER JOIN
EMP 테이블과 DEPT 테이블은 각각 EMPNO와 DEPTNO로 관계가 있습니다.
이 관계를 이용하여 두 테이블을 INNER JOIN 할 수 있습니다.
INNER JOIN을 사용하여 EMP 테이블과 DEPT 테이블을 조인하면 EMP 테이블과 DEPT 테이블에서 공통적으로
존재하는 DEPTNO 값을 기준으로 조인됩니다.
SELECT E.ENAME, D.DNAME
FROM EMP E -- E 는 별칭
INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO; -- D 는 별칭
위 쿼리는 EMP 테이블과 DEPT 테이블을 INNER JOIN 하여 EMP 테이블의 ENAME과 DEPT 테이블의 DNAME을
가져오는 쿼리입니다.
2. LEFT JOIN
EMP 테이블의 모든 직원 정보를 가져오면서, 해당 직원이 소속된 DEPT 테이블의 정보도 함께 가져오고
싶다면 LEFT JOIN을 사용할 수 있습니다.
LEFT JOIN을 사용하여 EMP 테이블과 DEPT 테이블을 조인하면 EMP 테이블의 모든 행이 선택되며,
DEPT 테이블과 일치하는 행이 있는 경우에는 DEPT 테이블의 값을 반환하고,
일치하지 않는 경우에는 NULL 값을 반환합니다.
SELECT E.ENAME, D.DNAME
FROM EMP E
LEFT JOIN DEPT D ON E.DEPTNO = D.DEPTNO;
위의 코드는 LEFT JOIN을 사용한 예시입니다.
EMP 테이블과 DEPT 테이블을 DEPTNO 컬럼을 기준으로 조인하고 있습니다.
SELECT 문에서는 EMP 테이블의 ENAME 컬럼과 DEPT 테이블의 DNAME 컬럼을 출력하고 있습니다.
3. RIGHT JOIN
RIGHT JOIN은 오른쪽 테이블을 기준으로 JOIN을 수행하는 방식입니다.
LEFT JOIN과 반대로, 오른쪽 테이블에 있는 모든 행은 결과 집합에 포함되고,
왼쪽 테이블과 조인이 가능한 행이 없는 경우 NULL 값으로 채워집니다.
RIGHT JOIN은 LEFT JOIN과 마찬가지로 OUTER JOIN의 일종입니다.
이를 사용하여 두 개의 테이블 사이의 관계를 이해하고, 적절한 결과를 생성할 수 있습니다.
SELECT E.ENAME, S.GRADE
FROM EMP E
RIGHT JOIN SALGRADE S ON E.SAL BETWEEN S.LOSAL AND S.HISAL;
이 쿼리에서는 EMP 테이블과 SALGRADE 테이블을 RIGHT JOIN을 이용하여 연결하였습니다.
EMP 테이블의 사원들의 급여(SAL)가 SALGRADE 테이블의 LOSAL과 HISAL 사이에 속하는 등급(GRADE)을 조회하였습니다.
LEFT JOIN 예시와 마찬가지로, SALGRADE 테이블의 모든 데이터를 포함하고 EMP 테이블의 일부 데이터만 연결하였습니다.
따라서 EMP 테이블에는 없지만 SALGRADE 테이블에는 있는 등급 정보도 함께 조회됩니다.
4. FULL JOIN
FULL JOIN은 두 개의 테이블에서 모든 레코드를 선택하고 조인을 수행하는 연산자입니다.
즉, INNER JOIN과 LEFT JOIN, RIGHT JOIN의 결과를 합집합으로 반환합니다.
EMP 테이블을 기준으로 예시를 들어보겠습니다.
EMP 테이블과 DEPT 테이블을 FULL JOIN 하여 모든 사원과 부서 정보를 조회해보겠습니다.
SELECT E.EMPNO, E.ENAME, D.DEPTNO, D.DNAME
FROM EMP E
FULL JOIN DEPT D ON E.DEPTNO = D.DEPTNO;
위 쿼리는 EMP 테이블과 DEPT 테이블을 DEPTNO 컬럼을 기준으로 FULL JOIN 하여
모든 사원과 부서 정보를 조회합니다.
만약 EMP 테이블이나 DEPT 테이블에는 존재하지만 다른 쪽 테이블에는 존재하지 않는 데이터가 있을 경우에도
결과에 포함됩니다.
만약 EMP 테이블과 DEPT 테이블의 DEPTNO 컬럼에 공통된 값이 없다면, NULL 값이 반환됩니다.
5. SELF JOIN
SELF JOIN은 하나의 테이블에서 서로 다른 레코드를 조인하는 것을 의미합니다.
즉, 자기 자신과 조인하는 것입니다.
EMP 테이블에서 SELF JOIN을 통해 EMPLOYEE들 중에서 서로 다른 직무를 가진 EMPLOYEE끼리 조인할 수 있습니다.
예를 들어, EMP 테이블에서 직무가 같은 EMPLOYEE들끼리 그룹을 지어서
각 그룹의 평균 급여를 구하고 싶다면, SELF JOIN을 사용하여 아래와 같이 쿼리를 작성할 수 있습니다.
SELECT e1.JOB, AVG(e1.SAL)
FROM EMP e1
JOIN EMP e2
ON e1.JOB = e2.JOB
GROUP BY e1.JOB;
위 쿼리에서는 EMP 테이블을 두 번 사용하여 e1과 e2라는 별칭을 사용하였습니다.
e1과 e2를 조인할 때, e1.JOB = e2.JOB의 조건을 사용하여 직무가 같은 EMPLOYEE들을 조인하였습니다.
이렇게 SELF JOIN을 사용하여 직무가 같은 EMPLOYEE들끼리 그룹을 지어 평균 급여를 구할 수 있습니다.
'RDBMS > Oracle DB' 카테고리의 다른 글
Oracle SQL 기본 문법[문자열 함수] (0) | 2023.03.14 |
---|---|
Oracle SQL 기본 문법[GROUP BY.GROUPING] (0) | 2023.03.14 |
Oracle SQL 기본 문법[GROUP BY.중첩함수,ROLLUP,CUBE,HAVING] (0) | 2023.03.13 |
Oracle SQL 기본 문법[GROUP BY] (0) | 2023.03.13 |
Oracle SQL 기본 문법[ORDER BY] (0) | 2023.03.13 |