SQL 첫걸음 5장

cse 23·2025년 3월 30일
0

SQL 첫걸음

목록 보기
8/8

5장 집계와 서브쿼리

20강. 행 개수 구하기 - COUNT

집계함수

  • 집합을 다루는 함수
    • COUNT(집합)
    • SUM(집합)
    • AVG(집합)
    • MIN(집합)
    • MAX(집합)

COUNT 사용

SELECT COUNT(*) FROM 테이블명;

  • COUNT는 *를 유일하게 인수로 사용 가능
  • WHERE 구의 유무와 관계없이 결과는 하나의 행 반환
  • 조건에 따라 행 개수 카운트 가능
  • NULL은 무시됨

중복 제거: DISTINCT

SELECT COUNT(DISTINCT 열명) FROM 테이블명;
  • 집합에서 중복 제거 후 COUNT 실행

21강. COUNT 이외의 집계함수

SUM

  • 수치형 집합의 합계 계산
  • NULL 무시됨

AVG

  • 수치형 집합의 평균 계산
  • NULL 무시됨
  • NULL을 0으로 간주하고 싶다면 CASE 사용

MIN, MAX

  • 최솟값과 최댓값 계산
  • 문자열, 날짜/시간형 데이터에도 사용 가능
  • NULL 무시됨

22강. 그룹화 - GROUP BY

SELECT * FROM 테이블명 GROUP BY1,2, ...;
  • 지정한 열 값이 같은 행을 하나의 그룹으로 묶음
  • GROUP BY는 DISTINCT와 같은 중복 제거 효과 있음
  • 집계함수와 함께 그룹별로 집계 가능

처리 순서

WHERE → GROUP BY → HAVING → SELECT → ORDER BY

주의사항

  • WHERE에서는 집계함수 사용 불가
  • GROUP BY에 지정하지 않은 열은 집계함수 없이 SELECT에 사용할 수 없음
  • GROUP BY만으로는 정렬 불가

23강. 서브쿼리

  • SELECT 안에 또 다른 SELECT 사용 (하위 질의)
  • 괄호로 서브쿼리 구분

WHERE 구에서 서브쿼리

SELECT * FROM 테이블명
WHERE 열명 = (SELECT ...);

서브쿼리 반환 유형

  1. 하나의 값 (스칼라 값)
  2. 여러 행, 하나의 열
  3. 하나의 행, 여러 열
  4. 여러 행, 여러 열
  • = 연산 사용 시 반드시 스칼라 값 비교

SELECT 구에서 서브쿼리

  • SELECT 안의 하나의 항목처럼 취급
  • 실행 시 오류가 날 수 있으므로 스칼라 값 반환 확인

FROM 구에서 서브쿼리

SELECT * FROM (
  SELECT ...
) AS 별명;
  • 서브쿼리에 별명 필수
  • 상위 몇 개 행 추출 등 가공된 테이블처럼 사용 가능

INSERT와 서브쿼리

INSERT INTO 테이블명 VALUES (
  (SELECT COUNT(*) FROM 테이블1),
  (SELECT COUNT(*) FROM 테이블2)
);

INSERT INTO 테이블명 SELECT 1, 2;

24강. 상관 서브쿼리

EXISTS

UPDATE sample551 SET a='있음' WHERE
EXISTS (SELECT * FROM sample 552 WHERE no2 = no);
SELECT*FROM sample551;
  • 서브쿼리의 반환값 존재 여부만 확인
  • 반환된 행이 있으면 TRUE, 없으면 FALSE

NOT EXISTS

  • 반환된 행이 없으면 TRUE

상관 서브쿼리

  • 서브쿼리가 외부 쿼리의 값을 참조
  • 서브쿼리만 따로 실행 불가능

테이블명 붙이기

테이블명.열명
  • 열 명 앞에 테이블명을 명시하여 구분

IN

열명 IN (집합)
  • 집합 내 존재 여부 확인 (OR 조건)
  • NULL은 무시되지 않음, 하지만 NULL = NULL은 FALSE
  • NULL 비교는 IS NULL 사용

NOT IN 주의사항

  • 집합에 NULL이 하나라도 있으면 전체 결과가 불명확해짐 (결과는 NULL)

--- 연습문제 ---
1.1
2.2
3.1

0개의 댓글