DB(SQL)

[SQL] JOIN - 등가조인, 내부조인

이나피스 2022. 3. 26. 23:13
반응형

등가조인 (EQUAL JOIN) - ORACLE / 내부조인 (INNER JOIN) - ANSI

연결 시키고자 하는 컬럼의 값이 일치하는 행들만 조인되어 조회된다 (일치하지 않는 값들을 결과에서 제외)

동등비교연산자 = 사용 ("일치한다"라는 조건을 제시)

 

등가조인(EQUAL JOIN) - ORACLE

SELECT 조회할 컬럼명 나열
FROM 조회할 테이블명 나열
WHERE 연결할 컬럼에 대한 조건 제시("=")
--전체 사원들의 사번,사원명,부서코드,부서명 출력
--1)연결할 두 컬럼명이 다를 경우 EX)EMPLOYEE-'DEPT_CODE' / DEPARTMENT-'DEPT_ID'
SELECT EMP_ID,EMP_NAME,DEPT_CODE,DEPT_TITLE
FROM EMPLOYEE, DEPARTMENT
WHERE DEPT_CODE=DEPT_ID; 
--부서코드가 일치하지 않는 값은 조회되지 않음(NULL, D3, D4, D7은 조회가 안됨 자료가 없기 때문!)

--2)연결할 두 컬럼명이 같을 경우 EX)EMPLOYEE-'JOB_CODE' / JOB-'JOB_CODE'
--방법1)테이블명 붙여서 명시 [표현법]테이블명.컬럼명
SELECT EMP_ID,EMP_NAME,EMPLOYEE.JOB_CODE,JOB_NAME
FROM EMPLOYEE, JOB
WHERE EMPLOYEE.JOB_CODE=JOB.JOB_CODE;
--방법2)별칭을 붙여서 명시
SELECT EMP_ID,EMP_NAME,E.JOB_CODE,JOB_NAME
FROM EMPLOYEE E, JOB J
WHERE E.JOB_CODE=J.JOB_CODE;

--조건제시
SELECT EMP_ID, EMP_NAME, BONUS
FROM EMPLOYEE, DEPARTMENT
WHERE DEPT_CODE = DEPT_ID
AND DEPT_TITLE='인사관리부';

 

내부조인(INNER JOIN) - ANSI

//내부조인 (ANSI) : ON구문
SELECT 조회할 컬럼명 나열
FROM 기준 삼을 테이블명 1개 제시
JOIN 조인할 테이블명 1개 제시 ON (연결할 컬럼에 대한 조건 제시 ("="))

//내부조인(ANSI구문) : USING구문
SELECT 조회할 컬럼명 나열
FROM 기준 삼을 테이블명 1개 제시
JOIN 조인할 테이블명 1개 제시 USING (연결할 컬럼명 1개 제시)
--전체사원들의 사번,사원명,직급코드,직급명 조회

--연결할 두 컬럼이 같을 경우 EX)EMPLOYEE-'JOB_CODE' / JOB-'JOB_CODE'
--ON구문
SELECT EMP_ID,EMP_NAME,E.JOB_CODE,JOB_NAME
FROM EMPLOYEE E
/*INNER*/JOIN JOB J ON(E.JOB_CODE=J.JOB_CODE); --INNER 보통 생략
--USING구문(연결할 컬럼명이 같을경우만)
SELECT EMP_ID,EMP_NAME,JOB_CODE,JOB_NAME
FROM EMPLOYEE
JOIN JOB USING(JOB_CODE);--컬럼명이 동일하여 어떤 테이블 컬럼인지 명시하지 않아도 매칭

--cf.자연조인(NATURAL JOIN):등가조인 방법중 하나
--동일한 타입과 이름을 가진 컬럼을 조인 조건으로 이용하는 방법
SELECT EMP_ID,EMP_NAME,JOB_CODE,JOB_NAME
FROM EMPLOYEE
NATURAL JOIN JOB;
--두개의 테이블에 일치하는 컬럼이 단 한개만 존재할 경우 알아서 매칭

--조건제시
SELECT EMP_ID, EMP_NAME, BONUS
FROM EMPLOYEE
JOIN DEPARTMENT ON (DEPT_CODE=DEPT_ID)
WHERE DEPT_TITLE='인사관리부';

반응형