AS, INNER/OUTER/FULL JOIN, UNION

Daeun Kim·2022년 11월 6일
0

SQL

목록 보기
9/31

여러 테이블을 결합하는 구문
INNER / OUTER / FULL JOIN, UNION 함수 등이 있다.

  1. AS문
    테이블에 있는 열에 다른 이름을 부여하는 구문
    결과값에서 테이블과 다른 열 이름으로 표시하고 싶을 때 유용하다.
    AS 연산자는 쿼리의 가장 마지막에 실행되므로, WHERE/GROUP BY 구문에 사용할 수 없다 (SELECT 구문 부분에 사용해야 한다)
    SELECT의 대상인 열이 2개 이상인 경우 AS는 이름을 바꾸고 싶은 열 바로 다음에 붙는다.
SELECT SUM(판매금액) AS 대상금액
FROM customer

SELECT 고객아이디, SUM(판매금액) AS 대상금액
FROM customer
GROUP BY 고객수

SELECT 고객아이디 AS 고객명, SUM(판매금액) 
FROM customer
GROUP BY 고객수

AS가 없는 경우 SUM이 뭔지 명시되지 않은 상태로 결과값만 표시되나, 위와 같이 입력하면 결과값 열이름을 대상금액로 바꿔서 표시할 수 있다.

열이름에 공백이 없을때는 그냥 적으면 되지만, 열 이름에 공백을 넣고싶을 때는 큰따옴표""로 열 이름을 입력한다.

  1. INNER JOIN
    JOIN연산이란 여러 테이블을 하나로 결합하는 것
    INNER JOIN이란 두 테이블에 모두 존재하는 값을 추출하는 함수이다 (교집합)
SELECT * FROM 테이블1
INNER JOIN 테이블2
ON 테이블1.열이름1=테이블2.열이름2

SELECT * FROM registrations
INNER JOIN logins
ON registration.name=logins.name

SELECT reg_id,logins.name FROM registrations
INNER JOIN logins
ON registration.name=logins.name

벤다이어그램상 테이블1이 왼쪽, 테이블2가 오른쪽에 온다 (이후 다른 함수에서 중요)
3번쿼리의 경우 name열이 양쪽 테이블에 있으므로 SELECT의 대상으로 name을 쓸 때는 어떤 테이블의 값인지 지정해줘야 한다.

열이름1,2는 테이블마다 다를 수 있지만 같은 값을 지칭하고 있는 열이라면 열이름은 상관없다.

  1. FULL OUTER JOIN
    OUTER JOIN은 결합되는 테이블 중 한쪽에만 있는 값을 추출한다.
    FULL OUTER JOIN / LEFT / RIGHT 로 나뉜다.

FULL OUTER JOIN은 두 테이블의 열값을 합친 값이다 (모든 테이블에 있는 모든 값)
INNER JOIN과 마찬가지로 두 테이블의 순서가 바뀌어도 결과값은 동일하다.
두 테이블의 열값을 합쳤을 때 테이블1에만 있는 값의 경우 테이블2의 값은 NULL로 표시한다.
해당 NULL 값만 (교집합을 삭제한 값) 보고 싶을 때는 WHERE 조건을 통해 필터링이 가능하다.

SELECT * FROM 테이블1
FULL OUTER JOIN 테이블2
ON 테이블1.열이름1=테이블2.열이름2

SELECT * FROM registrations
FULL OUTER JOIN logins
ON registration.name=logins.name

SELECT * FROM 테이블1
FULL OUTER JOIN 테이블2
ON 테이블1.열이름1=테이블2.열이름2
WHERE 테이블.id IS null OR 테이블2.id IS null

SELECT * FROM 테이블1
FULL OUTER JOIN 테이블2
ON 테이블1.열이름1=테이블2.열이름2
FULL OUTER JOIN 테이블3
ON 테이블1.열이름1=테이블3.열이름3
WHERE 테이블.id IS null OR 테이블2.id IS null

JOIN은 쿼리 내에 2개 이상 사용할 수 있다 (연결을 위한 추가적인 연산자/함수 필요없음).
단, WHERE 함수를 동시에 사용할 때는 WHERE 함수가 JOIN 이 모두 입력된 맨 아래에 입력되어야 한다.

  1. LEFT/RIGHT OUTER JOIN
    LEFT OUTER JOIN 는 왼쪽 테이블에 있는 기준 값만 추출하는 함수이다.
    한쪽만 추출되므로 쿼리에서 테이블의 순서가 중요하다.
    왼쪽 테이블에 있는 기준 값을 기준으로 오른쪽 테이블의 값이 연결되어서 추출된다 (테이블 단위의 vlookup정도라고 이해해도 될듯)
    오른쪽 테이블에는 없는 값 등을 WHERE 구문을 통해 추가적으로 필터링할 수 있다.
SELECT * FROM 테이블1
LEFT (OUTER) JOIN 테이블2
ON 테이블1.열이름1=테이블2.열이름2

SELECT * FROM 테이블1
LEFT (OUTER) JOIN 테이블2
ON 테이블1.열이름1=테이블2.열이름2
WHERE 테이블2.id IS null

FULL OUTER와는 달리 테이블1에 없는 값은 애초에 추출되지 않으므로, WHERE에 테이블1 IS null을 추가할 필요가 없다.
RIGHT OUTER JOIN은 LEFT에서 테이블 순서만 바꾼 것과 완전히 동일하다.

LEFT/RIGHT OUTER JOIN은 쿼리 입력시 OUTER을 생략할 수 있다.

  1. UNION 연산자
    UNION 연산자는 2개 이상의 SELECT 구문의 결과값을 결합할 수 있다.
SELECT 열이름 FROM 테이블1
UNION
SELECT 열이름 FROM 열이름2
profile
공부하는 것들을 적는 블로그.

0개의 댓글