ORACLE SQL JOIN을 알아보자

HaeHae·2021년 5월 28일
0
post-thumbnail

JOIN ?👉👈

SQL에서 두 개 이상의 테이블을 연결해 데이터를 검색하는 방법을 말한다. 테이블들은 적어도 한 개의 컬럼을 공유하고 있어야 한다.

INNER JOIN : 내부조인, 교집합
LEFT / RIGTH JOIN : 외부조인, 부분집합
OUTER JOIN : 합집합

간단한 쿼리로 먼저 조인에 대해 알아보자. 오라클의 교육용 DB HR을 기반으로 한다.

  • JOIN 기본👊
    JOIN에는 LEFT JOIN, FULL JOIN 등 다양한 방식이 존재한다. 그중 먼저 JOIN 쿼리 하나만으로 쪼인하는 법을 알아보자.
    SELECT   employee_id, first_name, department_id,  department_name
    FROM employees, departments;

    결과는 오류. 스키마를 찾아보면, 두 테이블 모두 department_id를 보유하고 있기 때문에, SELECT 절에서 어떤 테이블로 가야 할지 알 수 없다. 따라서 어느 테이블을 검색할지 SELECT 의 department_id 컬럼에 범위를 추가해줘야 한다.

    		SELECT  employee_id, first_name, employees.department_id,  department_name
    		FROM employees, departments;
    		```

그런데 여기서 또 문제가 하나 발생한다. 바로 조건을 주지 않았을 때다. 조건을 주지 않거나, 조건 오류가 발생하면 두 테이블이 가져올 수 있는 모든 조합이 return된다. 그래서 아래와 같은 조건을 줘야 한다.
where employees.department_id = departments.department_id;

-JOIN ON✊

 SELECT 검색할 컬럼
 FROM 테이블1 JOIN 테이블2 ON(조건)

조건이 ON 안에 들어가 있어 별도 WHERE 구문을 써주지 않아도 된다.
예시)

SELECT  employee_id, first_name, e.department_id,  department_name
FROM employees e JOIN departments d ON(e.department_id = d.department_id);

-JOIN USING 🙌

조인의 조건 컬럼명이 같을 때 사용할 경우, 자동으로 조건 설정이 된다. 별도로 = 를 넣지 않아도 자동 설정.

SELECT employee_id, department_name
FROM employees JOIN departments USING(department_id);

-LEFT OUTER JOIN 🤛

조인 기준, 왼쪽에 있는 모든 자료가 포함된다. 출력 시 NULL값까지 포함한다. 테이블 A와 B가 있을 때, A LEFT JOIN B ON(조건)의 형식으로 쓸 수 있으며 A 테이블의 모든 데이터를 조회할 수 있다.

SELECT 컬럼
FROM 테이블 A LEFT OUTER JOIN 테이블B ON(조건) JOIN 테이블C(조건2)
select employee_id, first_name, e.department_id, job_title
from employees e LEFT OUTER JOIN departments d ON(e.department_id = d.department_id)
JOIN jobs j ON(e.job_id = j.job_id);

-RIGHT OUTER JOIN 🤜

조인 기준, 오른쪽에 있는 모든 자료를 포함한다. LEFT OUTER JOIN과 마찬가지로 NULL값 포함. A RIGTH JOIN B ON(조건)의 형식으로 쓸 수 있으며 B테이블의 모든 데이터를 조회할 수 있다.

SELECT 컬럼
FROM 테이블 A RIGHT JOIN 테이블B ON(조건)
WHERE ~ 
ORDER BY~ 

주의사항
LEFT, RIGHT 조인을 사용할 경우, 공통된 컬럼을 SELECT 할 때, 컬럼이 어느 테이블에 있는지에 따라 결괏값이 바뀐다. 본인이 찾고 싶은 데이터의 컬럼,테이블이 어떤 것인지 반드시 확인해야 한다.

다음 포스팅> SELF JOIN, FULL JOIN, SUBQUERY

profile
고양이랑 살려고 개발하는 사람

0개의 댓글