-- JOIN ON (ANSI 표준 조인)
-- 1. FROM절 뒤, WHERE절 앞
-- 2. JOIN 키워드 뒤에는 조인할 테이블명을 명시
-- 3. ON 키워드 뒤에는 조인 조건을 명시
-- 4. 조인 조건 서술부(ON절) 일반 조건 서술부(WHERE)를 분리해서 작성하는 방법
-- 5. ON절을 이용하면 JOIN 이후의 논리연산이나 서브쿼리와 같은 추가 서술이 가능
SELECT
A.emp_no , A.emp_nm , A.addr , A.dept_cd , B.dept_nm
FROM tb_emp A
JOIN tb_dept B -- 1번 2번
ON A.dept_cd = B.dept_cd -- 3번 -- ON절로 JOIN 조건을 다른 WHERE 조건과 구분 할수 있다.
WHERE A.addr LIKE '%용인%'
AND A.emp_nm LIKE '김%'
ORDER BY A.emp_no
;
-- 1980년대생 사원들의 사번, 사원명, 부서명, 자격증명, 취득일자를 조회
SELECT * FROM tb_emp; -- 사번, 사원명
SELECT * FROM tb_dept; -- 부서명
SELECT * FROM tb_certi; -- 자격증명
SELECT * FROM tb_emp_certi; -- 취득일자
SELECT
E.emp_no, E.emp_nm, D.dept_nm, C.certi, ec.acqu_de
-- FROM tb_emp E, tb_dept D, tb_emp_certi EC, tb_certi C
FROM tb_emp E, tb_dept D, tb_emp_certi EC, tb_certi C
WHERE E.dept_cd = D.tb_dept_cd
AND EC.certi_cd = C.certi_cd
AND E.emp_no = EC.emp_no
AND E.birth_de BETWEEN '19800101' AND '19891231'
;
-- 1980년대생 사원들의 사번, 사원명, 부서명, 자격증명, 취득일자를 조회
SELECT
E.emp_no, E.emp_nm, D.dept_nm, C.certi_nm, EC.acqu_de
FROM tb_emp E
JOIN tb_dept D
ON E.dept_cd = D.dept_cd
JOIN tb_emp_certi EC
ON E.emp_no = EC.emp_no
JOIN tb_certi C
ON EC.certi_cd = C.certi_cd
WHERE E.birth_de BETWEEN '19800101' AND '19891231'
;
-- JOIN ON 구문으로 카테시안 곱 만들기
SELECT
*
FROM test_a A, test_b B
;
SELECT
*
FROM test_a A
CROSS JOIN test_b B
;
-- # NATURAL JOIN
-- 1.NATURAL JOIN은 동일한 이름을 갖는 컬럼들에 대해 자동으로 조인조건을 생성하는 기법입니다.
-- 2.즉, 자동으로 2개 이상의 테이블에서 같은이름을 가진 컬럼을 찾아 INNER조인을 수행합니다.
-- 3.이 때 조인되는 동일 이름의 컬럼은 데이터 타입이 같아야 하며,
-- ALIAS나 테이블명을 자동 조인 컬럼 앞에 표기하면 안됩니다.
-- 4.SELECT * 문법을 사용하면, 공통 컬럼은 집합에서 한번만 표기됩니다.
-- 5. 공통 컬럼이 n개 이상이면 조인 조건이 n개로 처리됩니다.
-- 사원 테이블과 부서 테이블을 조인 (사번, 사원명, 부서코드, 부서명)
SELECT
a.emp_no, a.emp_nm,
dept_cd, --b.dept_cd, : natural join의 3번 규칙
b.dept_nm
FROM tb_emp A
NATURAL JOIN tb_dept B;
--ON A.dept_cd = B.dept_cd
-- pk와 fk의 이름이 똑같고 데이터 코드도 똑같다. (natural join 조건 성립)
-- # USING절 조인
-- [natural 조인에서 할수 없는 일을 조금 보완]
-- 1. NATURAL 조인에서는 자동으로 이름과 타입이 일치하는 모든 컬럼에 대해
-- 조인이 일어나지만 USING을 사용하면 원하는 컬럼에 대해서만 선택적 조인을
-- 부여할 수 있습니다.
-- 2. USING절에서도 조인 컬럼에 대해 ALIAS나 테이블명을 표기하시면 안됩니다.
SELECT
a.emp_no, a.emp_nm,
dept_cd, --b.dept_cd, : natural join의 3번 규칙과 동일하게 using절에도 적용된다.
b.dept_nm
FROM tb_emp A
INNER JOIN tb_dept B
USING (dept_cd);
-- # INNER JOIN의 SELECT * 문 사용
-- 열 중복 제거 안함 . DEPT_CD 와 DEPT_CD1 컬럼 생성
-- 15개의 컬럼 생성
SELECT
*
FROM tb_emp A
INNER JOIN tb_dept B
ON A.dept_cd = B.dept_cd;
-- # NATURAL JOIN의 SELECT * 문 사용
-- 14개의 컬럼 생성 중복 되는 dept_cd가 하나만 나옴.
SELECT
*
FROM tb_emp A
NATURAL JOIN tb_dept B;
-- # USING절 JOIN의 SELECT * 문 사용
-- 14개의 컬럼 생성 중복 되는 dept_cd가 하나만 나옴.
SELECT
*
FROM tb_emp A
INNER JOIN tb_dept B
USING (dept_cd);
'데이터베이스' 카테고리의 다른 글
데이터베이스_SQL기본(집합연산자)_ 22.06.27(day06) (0) | 2022.06.27 |
---|---|
데이터베이스_SQL기본(OUTERJOIN)_예제_ 22.06.24(day05) (0) | 2022.06.24 |
데이터베이스_SQL기본(JOIN)_예제_ 22.06.24(day05) (0) | 2022.06.24 |
데이터베이스_SQL기본(JOIN)_교안_ 22.06.24(day05) (0) | 2022.06.24 |
데이터베이스_SQL기본(ORDER BY)_실전문제_ 22.06.23(day04) (0) | 2022.06.23 |