티스토리 뷰

DB

SQL 조인

tioon 2023. 8. 11. 03:31
조인이란?

-데이터베이스에서 두개 이상의 테이블로부터 결합하여 하나의 테이블로 만드는 기능입니다.
관계형 데이터베이스에서의 핵심 기능이며, 조인을 사용해 다양한 테이블을 만들 수 있습니다.
조인은 기본적으로 카타시안 곱으로 구현되며 카타시안 곱 연산 수행도중 특정 값 조건이 일치하는 행들만 뽑습니다.

 

 

동등(EQUI) 조인 VS 비동등(NON EQUI 조인)
  • 동등 조인
    -두 테이블 간의 조인 조건이 등호 연산자(=)를 사용하여 두 컬럼 값이 일치하는 경우에만 행을 결합하는 조인입니다.
SELECT e.emp_name, d.dept_name
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id;
  • 비동등 조인
    -두 테이블 간의 조인 조건이 등호가 아닌 다른 연산자(< , > , <= , >=)를 사용하여 두 컬럼이 조건에 일치하는 경우에만 행을 결합하는 조인입니다.
SELECT e.emp_name, e.salary, s.grade_id
FROM employees e
JOIN salary_grades s ON e.salary BETWEEN s.min_salary AND s.max_salary;

 

 

 

 

조인테이블

조인은 2가지의 방식으로 사용할 수 있습니다. 두 가지 방식 다 같은 결과를 가져오며, 표현방식만 차이가 있습니다.

  1. from절에서  조인 사용하기
SELECT name FROM person1 JOIN person2
ON person1.name = person2.name;

 

  2. from절에서 테이블 생성 후 추가연산을 where절에서 명시

   SELECT name FROM person1, person2 where person1.name = person2.name;

 

 

 

 

 

 

조인의 종류

 

  • Inner join
    내부 조인으로 테이블 사이에서 공통된 속성을 기준으로 결합하는 조인 (Inner를 생략해도 가능)
SELECT o.order_id, o.product, c.customer_name
FROM orders o
INNER JOIN customers c ON o.customer_id = c.customer_id;
  • Left outer join
    왼쪽 외부 조인으로 테이블 사이에서 공통된 속성을 기준으로 결합하는 조인인데, 왼쪽 테이블은 모든 튜플이 다 살아있음 (null값을 넣어서 왼쪽테이블 튜플들을 살림)
SELECT o.order_id, o.product, c.customer_name
FROM orders o
LEFT OUTER JOIN customers c ON o.customer_id = c.customer_id;
  • Right outer join
    오른쪽 외부 조인으로 테이블 사이에서 공통된 속성을 기준으로 결합하는 조인인데, 오른쪽 테이블은 모든 튜플이 다 살아있음 (null값을 넣어서 오른쪽테이블 튜플들을 살림)
SELECT o.order_id, o.product, c.customer_name
FROM orders o
RIGHT OUTER JOIN customers c ON o.customer_id = c.customer_id;
  • Full outer join
    전체 외부 조인으로 양쪽의 테이블의 모든 튜플이 다 살아있음 (null값을 넣어 튜플들을 살림)
SELECT o.order_id, o.product, c.customer_name
FROM orders o
FULL OUTER JOIN customers c ON o.customer_id = c.customer_id;
  • Cross join
    카타시안 곱(Cartesian Product)라 불리며, 두 테이블의 모든 가능한 행 조합을 반환하는 조인입니다. 특정 조건은 없으며, 가능한 모든 조합을 반환합니다.
SELECT o.order_id, o.product, c.customer_name
FROM orders o
CROSS JOIN customers c;

 

 

 

자연조인 

-두 테이블간의 동일한 이름을 갖는 모든 칼럼들에 대해 동등(EQUI)조인을 수행하는 조인입니다. 
다른 조인들과는 다르게 추가 조건 명시를 할 수 없고, 조건과 상관 없이 동일한 이름의 모든 칼럼에 대해서 수행합니다.
자연조인은 NATURAL JOIN으로 표현하는 방법도 있고, USING으로 표현하는 방법이 있습니다.

SELECT o.order_id, o.product, c.customer_name
FROM orders o
NATURAL JOIN customers c;    // JOIN customer USING (~~) 으로도 표현가능함

 

 

 

 

조인의 조건명시
  • ON 조건절
    -두 테이블 간의 조인 조건을 명시적으로 지정할 수 있습니다. 즉, 컬럼 명이 다르더라도 JOIN 조건을 사용할 수 있고,
    두 테이블의 모든 컬럼을 참조할 수 있고, 다양한 조건(비동등 조인)을 사용할 수 있습니다.
SELECT name
FROM (person1 JOIN person2) 
ON (person1.name = person2.name);

 

  • USING 조건절
    -ON과 달리 같은 이름을 가진 칼럼들 중에서 원하는 칼럼만 선택적으로 조인할 수 있습니다.
    즉, 두 테이블간의 공통된 칼럼이 있어야하며, 서로 다른 이름의 칼럼은 조인을 할수 없습니다.
SELECT order_id, product, customer_name
FROM orders
INNER JOIN customers USING (customer_id);

 

'DB' 카테고리의 다른 글

SQL 서브쿼리  (0) 2023.08.11
SQL 집합 연산  (0) 2023.08.11
SQL 함수  (0) 2023.08.10
WHERE 조건절  (0) 2023.08.10
트랜잭션이란? (feat.TCL)  (0) 2023.08.10
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함