Ori's IT 공부일지

[위클리 페이퍼 #4] GROUP BY, HAVING, NULL 본문

코드잇 스프린트/위클리 페이퍼

[위클리 페이퍼 #4] GROUP BY, HAVING, NULL

daminjeong 2025. 1. 14. 15:08

 

* 네 번째 위클리 페이퍼 주제 *

1. GROUP BY절과 HAVING절의 차이는 무엇인가요?

2. 데이터베이스에서 NULL값이란 무엇인가요? NULL값을 처리하는 MySQL 함수는 무엇이 있나요?


1. GROUP BY 절과 HAVING절의 차이는 무엇인가요?

  • GROUP BY절은 WHERE 전 / HAVING절은 GROUP BY 후
  • 참고) SQL문 실행 순서 : FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY
  • 즉, WHERE는 전체 데이터에 대해 필터링 한 후에 GROUP BY가 필요할 때 GROUP BY 앞에 써줘야 하고, HAVING은 GROUP BY가 적용된 데이터에 대해 필터링이 필요할 때 GROUP BY 후에 써줘야 함.
SELECT *
FROM department
WHERE hire_date >= '2019-01-01'
GROUP BY dept_id
HAVING salary >= 40000000
ORDER BY dept_no;

 

2. 데이터베이스에서 NULL값이란 무엇인가요? NULL값을 처리하는 MySQL 함수는 무엇이 있나요?

 

  • NULL : 데이터베이스에 존재하지 않는 값, 알 수 없는 값으로 0이나 공백과는 다른 것
    • PRIMARY KEY 는 NULL이 존재하면 안됨, NOT NULL 만족해야 함!
    • NULL에는 어떤 연산을 해도 NULL
  • NULL 처리 함수(MySQL)
    • COALESCE(모든 DBMS 가능)
      • COALESCE(컬럼명, 대체할 값) : 컬럼명이 NULL인 경우 대체할 값 반환
      • COALESCE(컬럼명1, 컬럼명2, 컬럼명3, 컬럼명4 등) : NULL이 아닌 첫 번째 컬럼 반환, 모두 NULL이면 NULL 반환
    • IFNULL(값1, 대체할 값) : 값1이 NULL이면 대체할 값 반환, NULL이 아니면 값1 반환
  • NULL 처리 함수(Oracle)
    • NULLIF(값1, 값2) : 값1 = 값2 이면 NULL 반환, 값1 ≠ 값2 이면 값1 반환
    • NVL(식1, 식2) : 식1 = 식2 이면 NULL반환, 식1 ≠ 식2 이면 식1 반환
    • NVL2(대상, 치환 값1, 치환 값2) : 대상이 NULL이면 치환값2, NULL이 아니면 치환값1 반환