📔모두의 SQL
ORM만 쓰다보니 헷갈리는 SQL 개념을 잡는다.
조인(Join)
조인 기법의 종류
곱집합(cartesian product)
가능한 모든 행을 조인
동등 조인(equi join or inner join)
조인 조건이 정확히 일치하는 경우에 결과 출력
비동등 조인(non equi join)
조인 조건이 정확히 일치하지 않는 경우에 결과를 출력
외부 조인(outer join)
조인 조건이 정확히 일치하지 않아도 모든 결과를 출력
자체 조인(self join)
자체 테이블에서 조인하고자 할 때 사용
동등 조인 예시
-- employees 테이블과 departments 테이블과 locations 테이블을 조인 예시
SELECT A.employee_id, A.department_id, B.department_name, C.location_id, C.city
FROM employees A, departments B, locations C
WHERE A.department_id = B.department_id
AND B.location_id = C.location_id;외부 조인
외부 조인은 조건을 만족하지 않은 행도 모두 출력하기 위한 조인 기법.
아래처럼 쉽게 생각해보자.
양쪽 테이블 중 전부 출력하고 싶은 테이블 쪽을 먼저 생각한다.
(+)는 다른 쪽 테이블 쪽 조인 조건에 붙인다.
자체 조인
자체 조인을 사용하려면 별칭을 사용해야 한다.
집합 연산자
집합 연산자를 이용해도 테이블을 연결할 수 있다. 간단하게 합집합, 교집합, 차집합이라 생각하면 된다.
종류
UNION
SELECT 문의 조회 결과의 합집합. 중복되는 행은 한 번만 출력한다. (합집합)
UNION ALL
SELECT 문의 조회 결과의 합집합. 중복되는 행도 그대로 출력한다. (합집합)
INTERSET
SELECT 문의 조회 결과의 교집합. 중복되는 행만 출력한다. (교집합)
MINUS
첫 번째 SELECT 문의 조회 결과에서 두 번째 조회 결과를 뺀다. (차집합)
서브쿼리
서브쿼리의 결과는 메인 쿼리의 조건으로 사용된다.
메인 쿼리와 서브 쿼리의 연결 형태는 연산자에 따라 의미가 다르다.
연산자 구분
종류
사용처
단일 행 연산자
=, >, >=, <, <=, <>, !=
단일 행 서브쿼리, 다중 열 서브쿼리
다중 행 연산자
IN, NOT IN, EXISTS, ANY, ALL
다중 행 서브쿼리, 다중 열 서브쿼리
단일 행 서브쿼리
다중 행 서브쿼리
다중 열 서브쿼리
FROM 절 서브쿼리: 인라인 뷰
FROM 절에서도 서브쿼리를 사용할 수 있다!
Last updated
Was this helpful?