hyeonga_code

Database_34_ANSI JOIN_조인 기준, Equi JOIN, Non-equi JOIN 본문

Oracle Database

Database_34_ANSI JOIN_조인 기준, Equi JOIN, Non-equi JOIN

hyeonga 2023. 7. 31. 07:59
반응형

  /*
        -- JOIN의 기준
            -- 매칭하려는 컬럼 명이 동일한 경우
            -- 매칭하려는 컬럼의 개수가 여러 개인 경우
            -- 매칭하려는 컬럼 명이 동일하지 않은 경우
            -- JOIN KEY COLUMN의 관계가 동일한 것을 찾아 조회합니다. > 등가조인, 이퀴조인?
            -- 등가가 아닌 데이터를 조회하는 JOIN 절 > 비트윈 연산자를 가장 많이 사용합니다.
            
            EX_등급 목록 ( 월 매출에 따라 등급이 저장됩니다 )
                -- 매달 등급이 변경되는 정보입니다. > 고객 테이블에는 저장되지 않습니다.
                    -- 고객 아이디가 저장된 고객 테이블
                    -- 구매 금액이 저장되는 주문 테이블
                    -- 금액에 따라 지정되는 등급이 저장되어 있는 등급 테이블
                    -- 따로 저장해야 하는 이유
                        -- 한 테이블로 저장하게 되면 하나만 수정하는 경우 무결성이 깨질 수 있습니다.
                    -- 비등가 조인
            -- JOIN
                -- EQUAL을 사용하는 조인 = 등가 조인
                -- EQUAL을 사용하지 않는 조인 = 비등가 조인
    */
    
    -- Equi JOIN
        -- 등호 연산자를 사용합니다.
        -- USING 절을 사용한 JOIN 또는 NATURAL JOIN 절
    -- Non-equi JOIN
        -- ON 절에 등호 연산자가 아닌 다른 연산자를 포함하는 조인입니다.
SELECT e.employee_id, e.last_name, e.job_id, e.salary, j.grade_level
FROM employees e JOIN job_grades j
ON (e.salary BETWEEN j.lowest_sal AND j.highest_sal);  
            -- F 등급은 Outer 데이터가 되어 출력되지 않습니다.



    -- 143번 직원의 연봉을 수정합니다.
UPDATE employees
SET salary=3200
WHERE employee_id=143;

    -- 다시 데이터를 조회했을 때 143번의 등급이 변경되는 것을 볼 수 있습니다.
SELECT e.employee_id, e.last_name, e.job_id, e.salary, j.grade_level
FROM employees e JOIN job_grades j
ON (e.salary BETWEEN j.lowest_sal AND j.highest_sal);


    
    -- 수정한 데이터를 COMMIT 상태로 되돌립니다.
ROLLBACK;

    -- 143번의 데이터가 다시 변경된 것을 알 수 있습니다.
        -- 고객 테이블에 등급 데이터가 저장되어 있었다면 변경되지 않았을 것입니다.
SELECT e.employee_id, e.last_name, e.job_id, e.salary, j.grade_level
FROM employees e JOIN job_grades j
ON (e.salary BETWEEN j.lowest_sal AND j.highest_sal);

반응형