공부/Database 복습

7.Database 안시 조인

ChoiDooSic 2021. 8. 1. 01:23

/*
    # ANSI JOIN
    
     - ANSI (American National Standards Insititute)
       미국에서 여러가지 IT표준을 재정하는 단체
     - 모든 RDBMS들은 ANSI 표준을 따르는 쿼리문을 가지고 있다
*/

 

-- ANSI CROSS JOIN
SELECT * FROM employees CROSS JOIN departments;


--ANSI INNER JOIN : 조인 조건에 맞는 행만 등장하는 JOIN
SELECT
    *
FROM
         employees
    INNER JOIN departments USING ( department_id );


-- ANSI OUTER JOIN : 조인 조건에 맞지 않는 행도 등장하는 JOIN
--LEFT OUTER JOIN: 왼쪽 테이블의 등장하지 못한 행이 등장한다.

-- RIGHT OUTER JOIN: 오른쪽 테이블의 등장하지 못한 행이 등장한다.

 

SELECT
    *
FROM
    employees
    LEFT OUTER JOIN departments USING ( department_id );

사람은 있으나 소속 부서가 없는 경우이다. 그냥 조인을 하였을때는 나오지 않는다

SELECT
    *
FROM
    employees
    RIGHT OUTER JOIN departments USING ( department_id );

부서는 있으나 소속된 사원들이 없는 경우 그냥 조인을 하였을때는 나오지 않는다


-- FULL OUTER JOIN: 각 테이블에서 등장하지 못했던 행들이 등장한다.
SELECT
    *
FROM
    employees
    FULL OUTER JOIN departments USING ( department_id );

-- ANSI JOIN을 사용하면 조인 조건과 행 조회 조건을 쉽게 구분할 수 있다
SELECT
    *
FROM
         employees
    INNER JOIN departments USING ( department_id )
WHERE
    department_id BETWEEN 100 AND 200;


/*
    # ANSI JOIN을 이용하여 다음을 풀어보세요
    
    1. first_name이 H로 시작하는 사원들의 사원번호/이름/부서명을 조회해보세요
    
    2. 직장상사 이름이 Mattew인 사원들의 사번/이름/월급/부서명을 조회해보세요
    
    3.Alberto와 동일한 직책을 가진 사원들의 모든 정보를 조회해보세요
*/
--1. first_name이 H로 시작하는 사원들의 사원번호/이름/부서명을 조회해보세요
SELECT
    employee_id,first_name, department_name
FROM
    employees
INNER JOIN departments USING (department_id)
WHERE
    first_name LIKE 'H%' ORDER BY employee_id;


--2. 직장상사 이름이 Matthew인 사원들의 사번/이름/월급/부서명을 조회해보세요
SELECT
    a.employee_id,a.first_name,b.first_name,a.salary,department_name
FROM
    employees a
    INNER JOIN departments USING (department_id)
    INNER JOIN employees b ON a.manager_id = b.employee_id
WHERE
    b.first_name = 'Matthew';

  employees b가 뒤로 와야하는 이유는 이 친구가 앞에 있을때에는 뒤에오는 department USING 절이 누구를 조인할지 알수없기때문이다. 셀프조인이라서.

-- 3.Alberto와 동일한 직책을 가진 사원들의 모든 정보를 조회해보세요
SELECT
    a.*
FROM
    employees a
INNER JOIN employees b ON a.job_id = b.job_id
WHERE
    b.first_name = 'Alberto';

'공부 > Database 복습' 카테고리의 다른 글

6.Database 조인  (0) 2021.08.01
5.Database 정렬  (0) 2021.07.26
4.Database 그룹 함수  (0) 2021.07.19
3.Database 함수  (0) 2021.07.19
2.Database WHERE  (0) 2021.07.18