05. 집계함수, 그룹화, INNER JOIN, UNION

다뉴기·2024년 4월 4일

백엔드 공부 - DB

목록 보기
5/11

사전 지식

집계 함수

입력이 여러 개의 Row이고 출력이 하나의 결과인것을 의미한다.

그룹화

데이터를 집계하는 것, GROUP BY로 각종 집계함수, 그룹함수와 함께 쓰인다.

조인

두 개 이상의 테이블을 서로 묶어서 하나의 결과를 만들어내는 것을 의미한다.

종류는 아래와 같다.

  • INNER JOIN
  • OUTER JOIN
  • FULL OUTER JOIN

UNION

여러 쿼리문들을 합쳐서 하나의 쿼리문으로 만들어주는 방법이다.

종류는 아래와 같다.

  • UNION
  • UNION ALL

COUNT()

Person 테이블의 모든 행의 개수를 세는 sql문이다.
사용 예시:

SELECT count(*) FROM Person;

Person 테이블의 특정 컬럼에 데이터가 있는 행을 세려면 괄호 안에 컬럼명을 쓴다.
사용 예시:

SELECT count(Height) FROM Person;

max()

최대값을 구한다.
사용 예시:

SELECT max(Height) FROM Person;

min()

최소값을 구한다.
사용 예시:

SELECT min(Height) FROM Person;

sum()

숫자 컬럼에 대해 합계를 낼 수 있다.
사용 예시:

SELECT sum(Height) FROM Person;

avg()

평균값을 구한다.
사용 예시:

SELECT avg(Height) FROM Person;

GROUP BY

사용 예시

SELECT round(Height), count(*)
FROM   Person
GROUP  BY 1; -- 혹은 GROUP BY round(Height);

위와 같이 사용하며, 1은 첫번째 컬럼을 기준으로 하겠다는 의미이고, 주석에 달아둔 내용 역시 같은 내용이다.

HAVING

사용 예시

SELECT round(Height), count(*)
FROM   Person
GROUP  BY round(Height)
HAVING count(*) > 1;

GROUP BY 절의 기준 항목이나 소그룹의 집계 함수를 이용한 조건을 표시할 수 있다.

  • having과 where은 무슨 차이가 있는가?
  • having
    • 그룹 전체, 그룹을 나타내는 결과의 집합 행에만 적용된다.
    • 집계 값이 지정된 조건을 충족하는 행만 반환하도록 지정한다.
    • 그룹을 필터링할 때 사용
    • Group By 절 뒤에 사용

  • where
    • 개별 행에 적용된다.
    • 단일 테이블에서 데이터를 가져오거나 여러 테이블과 결합하여 조건을 지정하는데 사용한다.
    • 행을 필터링 할 때 사용
    • having 절에 포함된 하위 쿼리에 있지 않으면 집계 함수와 함께 사용할 수 없다. (집계함수는 위에 서술)
    • Group By 절 앞에 사용

INNER JOIN

사용 예시

SELECT 음반.제목 앨범명, 음반.연도 발매년도, 노래.제목 곡명
FROM 수록곡
INNER JOIN 음반 ON 수록곡.음반ID = 음반.ID
INNER JOIN 노래 ON 수록곡.노래ID = 노래.ID

INNER JOIN은 따로 INNER라고 선언하지 않아도 기본적으로 INNER JOIN이 된다.

SELECT 음반.제목 앨범명, 음반.연도 발매년도, 노래.제목 곡명
FROM 노래, 음반, 수록곡
WHERE 음반.ID = 수록곡.음반ID AND 노래.ID = 수록곡.노래ID;

이 구문도 위와 같은 결과를 얻을 수 있다.


UNION

UNION ALL

사용 예시

SELECT 제목 FROM 음반
UNION ALL
SELECT 제목 FROM 노래

UNION ALL은 중복값을 지우지 않고 가져온다. 위의 코드들과 달리 1열로 나온다.

UNION

사용 예시

SELECT 제목 FROM 음반
UNION
SELECT 제목 FROM 노래

UNION ALL과 달리 중복값을 제외한 값을 가져온다.

간단하게만 작성해두었다.

0개의 댓글