SQL 첫걸음 5장

0Chae0·6일 전

5장 집계와 서브쿼리

집계함수 사용법

  • 집계함수의 종류

    COUNT
    SUM
    AVG
    MIN
    MAX

COUNT로 행 개수 구하기

  • COUNT(집합)

    SELECT COUNT * FROM sample51;

집계함수와 NULL값

집계합수를 SELECT 구에 쓰면 WHERE 구의 유무와 관계없이 결괏값으로 하나의 행을 반환한다.

SELECT COUNT (no), COUNT(name) FROM sample51;

집계함수는 집합 안에 null 있을 경우 무시한다.

DISTINCT로 중복 제거

SELECT DISTINCT name FROM sample51;

SUM으로 합계 구하기

SELECT SUM(quantity) FROM sample51;

  • 이때 SUM 집계함수에 지정되는 집합은 수치형 뿐임. (문자열, 날짜시간형은 X)

  • NULL값 무시 (NULL 제거 후 합계를 냄)

    AVG로 평균내기

    SELECT AVG(quantity), SUM(quantity)/COUNT(quantity) FROM sample51;

  • NULL값 무시함.

  • NULL도 포함하고 싶다면 CASE 사용해 NULL 0으로 변환한 후 AVG 함수로 계산

    MIN, MAX로 최솟값, 최댓값 구하기

  • 문자열형, 날짜시간형에도 사용 가능

  • NULL값 무시

    SELECT MIN(quantity), MAX(quantity), MIN(name), MAX(name) FROM sample51;

    그룹화-GROUP BY

    SELECT name FROM sampIe51 GROUP BY name;

    SELECT name, COUNT(name), SUM(quantity) FROM sample51 GROUP BY name;

    HAVING 구로 조건 지정

  • 집계함수는 WHERE 구의 조건식에서 사용 불가하다. (내부 처리 순서가 WHERE 구 —> GROUP BY 구 -> HAVING 구 -> SELECT 구 -> ORDER BY 구 이기 때문)

    +) GROUP BY에서 지정한 열 이외의 열은 집계함수를 사용하지 않은 채 SELECT 구에 지정할 수 없다.

    결괏값 정렬

    ORDER BY 구

    SELECT name, COUNT(name), SUM(qauantity) FRON sample51 6ROUP BY name ORDER BY SUM(quantity) DESC;

  • GROUP BY 구로 그룹화한 경우에도 ORDER BY 구를 사용해 정련할 수 있다. 결괏값을 순서대로 정렬해야 한다면 ORDER BY 구를 지정하면 된다.

    SELECT name, COUNT(name), SUM(quantity) FROM sample 51 GROUP BY name ORDER BY SUM(quantity) DESC;

서브쿼리

SELECT 명령에 의한 데이터 질의
상부가 아닌 하부의 부수적인 질의

DELETE의 WHERE 구에서 서브쿼리 사용하기

최솟값 행 삭제하기

괄호로 서브퀴리 지정해 삭제
DELETE FROM sample54 WHERE a = (SELECT MIN(a) FRON sample54);
SELECT * FROM sample54;

-> 서브쿼리 사용해 DELETE와 SELECT 결합 가능

스칼라 값

서브쿼리 사용 시 그 SELECT 명령이 어떤 값을 반환하는지 주의할 필요가 있다. 아래 4 가지가 일반적인 서브쿼리 패턴이다.

  1. 하나의 값을 반환하는 패턴
    SELECT MIN(a) FROM sample54;
  2. 복수의 행이 반환되지만 열은 하나인 패턴
    SELECT no FROM sample54;
  3. 하나의 행이 반환되지만 열이 복수인 패턴
    SELECTS MIN(a), max(no) FROM sample54;
  4. 복수의 행, 복수의 열이 반환되는 패턴
    SELECT no, a FROM sample54;

이때 1번만 다름 (하나의 값만 반환함). '단일 값' = '스칼라 값'으로 불림!

연산자 사용해 비교할 경우 스칼라 값끼리 비교할 필요가 있다.

SELECT, SET, FROM 구에서 서브쿼리 사용하기

  • 스칼라 서브쿼리가 필요함

SELECT
(SELECT COUNT() FROM sample51) AS sq1;
(SELECT COUNT(
) FROM sample51) AS sq2;

UPDATE sample54 SET a=(SELECT MAX(a) FROM sample54);

SELECT FROM (SELECT FROM sample54) sq;

INSERT 명령과 서브쿼리

INSERT 명령과 서브귀리를 조합하여 시용할 수도 있다. INSERT 명령에는 VALUES 구의 일부로 서브쿼리를 사용하는 경우와, VALUES 구 대신 SELECT 명령을 사용하는 두 가지 방법이 있다.

상관 서브쿼리

서브쿼리외 부모쿼리가 서로 연관된 경우 서브쿼리는 상관 서브쿼리가 된다. 상관 서브쿼리를 사용함으로씨 두 테이블에 걸쳐 조직할 수 있다.

profile
아무것도 하지 않으면 아무 일도 일어나지 않기에... 시작하는 컴공생의 블로그

0개의 댓글