SQL

easyjw·2025년 5월 21일
post-thumbnail

조인이란?

데이터는 테이블에 흩어져 저장되어 있으므로 사용자가 원하는 형태로 데이터를 조작하려면 특별한 방법이 필요함.
이를 위해 사용하는 기법이 -> 조인

조인은 한개 이상의 테이블과 테이블을 서로 연결하여 사용하는 기법을 말함.

조인 기법 종류

곱집합: 가능한 모든 행을 조인함
동등 조인: 조인 조건이 정확히 일치하는경우에 결과를 출력
비동등 조인: 조인 조건 이 정확히 일치하지않는경우에 결과를 출력
외부조인: 조인 조건이 정확히 일치하지않아도 모든 결과를 출력한다.
자체 조인: 자체 테이블엣 조인 하고자 할때 사용

조인 사용 규칙

  • select 절에는 출력할 열 이름 기술
  • from 절에는 접근하려는 테이블 이름을 기술
  • where 절에는 조인 조건을 기술
  • from 절 외의 절에는 조회의 명확성을 위해 열 이름 앞에 테이블 이름을 붙임

동등 조인: 똑같은 데이터 끼리 연결하기

동등 조인(equi join)이란 양쪽 테이블에서 조인 조건이 일치하는 행만 가져오는 가장 일반적이고 자주 쓰는 조인입니다.

등호(=) 연결 연산자를 사용하여 조건값이 정확하게 일치할때만 행을 가져오기때문에 equi-join 혹은 inner join이라고도 부릅니다. 기본키(PK) 와 외래 키(FK)관계를 이용하여 조인하기도 하고 키가 아니더라도 다양한 조건으로 조인 할수있다.

예제 6-1

select A.employee_id, B.department_id,B.department_name, C.location_id,C.city FROM hr.employees A , hr.departments B, hr.locations C 
where A.department_id = B.department_id
And B.location_id = C.location_id

외부 조인: 모든 데이터를 연결 하기

동등 조인은 데이터 값이 정확히 일치하는 경우에만 결과를 출력함 == 데이터 값이 일치하지 않는다면 결과가 조회 되지않는다.

외부 조인(outer join)은 조건을 만족하지 않는 행도 모두 출력하기위한 조인 기법입니다.

외부조인의 특징

  • 외부 조인은 동등 조인 조건을 만족하지 못해 누락되는 행을 출력하기위해 사용합니다.
  • 외부 조인은 (+) 기호를 사용합니다.
  • (+) 기호는 조인할 행이 없는, 즉 데이터값이 부족한 테이블의 열 이름 뒤에 기술합니다.
  • (+) 기호는 외부 조인 하려는 한쪽에만 기술 할수 있습니다, 테이블 양쪽에는 기술할수 없습니다.
  • (+) 기호를 붙이면 데이터 값이 부족한 테이블에 null 값을 갖는 행이 생성되어 데이터 값이 충분 한 테이블의 행들이 null 행에 조인됩니다.

예제 6-2

select A.employee_id, A.first_name, A.last_name, B.department_id, B.department_name
From hr.employees A, hr.departments B
where A.department_id= B.department_id(+)

order by A.employee_id

자체 조인 : 자기 자신의 데이터와 연결하기

자기 자신의 테이블을 조인하는 것을 자체 조인(self join)이라고 함

자체 조인을 사용하려면 별칭을 사용해야 함.

자체 조인의 특징

  • 자기자신의 테이블을 이용하여 조인함
  • 같은 테이블을 사용하기 때문에 각기 다른 별칭을 사용함으로써 마치 서로 다른 두개의 테이블을 조인하는것처럼 보임.
  • 자체조인을 할때 테이블은 동일한 열로 구성되어있기 때문에 조회할때 반드시 '별칭.이름'의 형태로 명확하게 구별하여 조회해야함. 그렇지 않으면 오류 발생

예제 6-3

SELECT A.employee_id, A.first_name, A.last_name, A.manager_id,

       B.first_name||' '||B.last_name manager_name

FROM   hr.employees A, hr.employees B

WHERE  A.manager_id = B.employee_id

ORDER BY A.employee_id;

집합 연산자: 집합으로 연결하기

조인기법 외에도 테이블에서 데이터를 조회하는 방식이 한가지 더있음-> 그것이 바로 집합연산자임.
집합 연산자는 SELECT문을 여러개 연결하여 작성하며, 각 SELECT문의 조회결과를 하나로 합치거나 분리할수있음
집합연산자는 합집합, 교집합, 차집합의 논리와 같음

집합연산자의 종류

UNION: SELECT문의 조회결과의 합집합. 중복되는 행은 한번만 출력함 | 합집합

UNION ALL: SELECT문의 조회결과의 합집합. 중복되는 행도 그대로 출력함 | 합집합

INTERSET: SELECT문의 조회결과의 교집합. 중복되는 행만 출력함 | 교집합

MINUS: 첫번째 SELECT문의 조회결과에서 두번째 조회 결과를 뺸다 | 차집합

집합 연산자 규칙

  • SELECT 문에서 기술한 열과 두번째 SELECT문에서 기술한 열은 왼쪽부터 순서대로 일대일로 대응하며, 열개수와 데이터 타입이 일치해야함. 열의 순서가 다르거나 데이터 타입이 일치하지않으면 오류 발생
  • SELECT문에 대한 연산은 위에서 아래로 수행됨.
  • ORDER BY 절은 SELECT문의 맨끝에 기술

UNION

SQL을 이용해 SELECT문의 실행 결과를 집합하나로 만들수있음.
즉, 각기 다른 두개이상의 SELECT문을 실행한 결과를 하나로 묶어서 출력할수있음.
=> UNION연산자는 집합을 하나로 묶을 때 사용하며, 중복행은 한번만 출력하는 합집합 연산자임.

예제 6-4

SELECT department_id 
FROM HR.employees 
UNION
SELECT department_id 
FROM HR.departments;

UNION ALL

UNION ALL연산자는 UNION 연산자와 동일한 기능을 함.
다만 UNION 연산자가 중복 행을 한번 만 출력하는데 반해 UNION ALL 연산자는 중복행과 상관없이 양쪽에서 조회된 결과를 모두 출력함.

예제 6-5

SELECT department_id 
FROM HR.employees 
UNION ALL
SELECT department_id 
FROM HR.departments
ORDER BY department_id;

INTERSET

INTERSET 연산자는 양쪽 SELECT문의 결과에 존재하는 데이터만 출력함.
즉, 양쪽 SELECT 문 조회결과의 교집합을 출력함.

예제 6-6

SELECT department_id
FROM   HR.employees
INTERSECT
SELECT department_id
FROM   HR.departments
ORDER BY department_id;

MINUS

MINUS 연산자는 첫번재 SELECT문의 집합에서 두번째 SELECT문의 집합을 뺀 결과를 출력함
첫번째 SELECT문의 집합에 대해 양쪽 테이블의 교집합을 뺀 결과를 출력하는것과 같음

예제 6-7

SELECT department_id 
FROM HR.departments
MINUS
SELECT department_id 
FROM HR.employees 

0개의 댓글