본문 바로가기
카테고리 없음

[데이터베이스] MySQL을 통한 집계와 서브쿼리에 대한 내용 정리

by dwoi 2023. 4. 20.

MySQL로 데이터베이스를 관리하는 기본적인 개념에 대해서 살펴보자.

 

목차

     


    데이터베이스(Database)


    1. 행 개수 구하기 count

    SQL : "데이터 집합"을 다루는 언어

    집계함수 : Aggregation Func

     

    1.1. count()

    select count(*) from 테이블;
    • 주어진 집합의 개수를 반환
    • “select count(*) from 테이블” 에서 * 표시는 모든 열을 대상으로 행 개수를 반환
    •  또한 count 집계함수로 행의 개수를 구할 수 있음

    ◆ count 와 where 구로 조건에 맞는 집합의 개수를 반환할수도 있음.

    ◆ Null의 경우

    • count 집계함수의 인수로 컬럼을 지정할 경우 NULL 값이 있으면 제외하고 집계처리
    •  *를 인수를 사용할 경우 특정 컬럼에 NULL이 있어도 무시하고 전 테이블의 행의의 개수를 반환

    ◆ 중복 여부

    • 집합을 다룰 때, 집합 안에 중복 값의 여부를고려해야 하는 경우가 있음
    •  집합 안에 유일한 값을 갖기 위하여 distinct 키워드를 사용
    •  중복을 포함하여 모든 집합을 조회하려면 all 키워드를 사용하지만 default가 all 이므로 일반적으로는 생략하고 사용

    1.2 count 이외의 집계함수

    ◆ sum() : 집합의 값을 합산하는 함수

    • 수치형만 가능
    • 문자형이나 날짜형 사용불가
    • NULL 값은 제거하고 합산

    ◆ avg() : 산술평균을 구하는 함수

    • 수치형만 가능
    • 문자형이나 날짜형은 사용불가
    •  NULL 값은 제거하고 산술평균
    • 만약 NULL을 0으로 간주해서 평균을 계산할 경우에는 case 문으로 변환

    ◆ min() max() : 최대, 최소

    •  숫자, 문자, 날짜형 모두 사용가능
    • NULL 값은 제외

    2. 그룹화(Group by)

    2.1.  그룹화(Group by)

    select * from 테이블 group by 컬럼1, 컬럼2 ...;

    보고 싶은 컬럼을 그룹화해서 보는 것.

     

    ◆ 집계함수는 where 구의 조건식에서 사용할 수 없음!

    select name, count(name) from sample51 where count(name)=1 group by name;

    → 오류

    • 오류 발생의 원인은 구의 실행 순서에 기인
      • where 구 -> group by 구 -> select 구 -> order by 구
    • having 구를 사용하면 집계함수를 사용해서 조건식 지정이 가능
    • having 구는 group by 구의 뒤에 기술하여 where 구와 동일하게 조건식 지정이 가능
    •  조건식에는 그룹별로 집계된 열의 값이나 집계함수의 계산결과가 전달
    • 이때 조건식 참의 그룹값만 클라이언트에 반환
    • 따라서 where 구와 having 구에 지정된 조건으로 검색하는 2단 구조

     

    2.1.1. select 문의 실행순서

    • where 구 -> group by 구 -> select 구 -> order by 구
    • 구 실행 순서에 따라 order by에 alias 적용 가능

     

    즉 having 구로 추가 조건을 마지막에 걸어준다고 이해


    3. 서브쿼리

    • 서브쿼리는 SQL 명령문 안에 지정하는 하부 select 명령으로 괄호로 묶어 지정
    • 서브쿼리는 select 구, from 구, where 구 등을 모두 기술 가능
    •  다른 구에서도 사용되나 특히 서브쿼리는 SQL 명령의 where 구에서 주로 사용

    단순하게 SQL 명령문 안에 SQL 명령문을 추가로 집어넣는 개념으로 이해 

    이걸 소괄호로 이용한다고 생각.

    주로 Where 구로 조건을 걸 때

    DELETE FROM sample54 WHERE a = (SELECT MIN(a) FROM SAMPLE54);

    변수를 이용한 서브쿼리 활용

    set @a = (select min(a) from sample54);
    select @a;
    delete from sample54 where a=@a

    @a라는 변수를 선언해서 서브쿼리를 활용하는 경우

     

    3.1. 서브쿼리 사용 패턴

    • 하나의 값을 반환하는 패턴
    • 복수의 행이 반환되지만 열은 하나인 패턴
    • 하나의 행이 반환되지만 열이 복수인 패턴
    • 복수의 행, 복수의 열이 반환되는 패턴

     

    ※ 하나의 값을 반환하는 패턴에서 단일 값을 ‘스칼라 값’

    • 서브쿼리에서 스칼라 값의 반환은 많이 사용
    • 보통 select 구에서 하나의 열을 지정하고 group by를 지정하지 않은 채 집계합수를 사용하면 단일 값 반환
    • where 구의 조건으로 하나의 행만 검색된다면 스칼라 값 반환이 가능
    • where 구에서 스칼라 값의 서브쿼리는 “=“와 같은 연사자를 이용하여 비교
    • 단일 값 서브쿼리를 “스칼라 서브쿼리”라고 부르기도 함

     

    3.2. 상관 서브쿼리

    • exists(select 명령)
      • exists 술어는 select 명령의 반
      • 값이 있으면 참, 없으면 거짓을 반환
    •  not exists(select 명령)
      • not exists 술어는 select 명령의반환 값이 있으면 거짓, 없으면 참을 반환
    • 컬럼 in (집합)
    • 컬럼 not in (집합)

     

    마무리

    SQL로 집계함수를 사용하는 방법

    더 잘 활용하기 위해 서브쿼리를 활용하는 방법을 배워봄.


     

     

    댓글