WHERE
WHERE 절은 SQL 쿼리에서 데이터를 그룹화하거나 집계하기 전에 개별 행에 대해 조건을 필터링하는 데 사용된다. 예를 들어, 특정 조건을 만족하는 행만 선택하고자 할 때 사용된다. WHERE 절은 집계 함수와 함께 사용할 수 없다.
HAVING
HAVING 절은 데이터를 그룹화하거나 집계한 후에 결과를 필터링하는 데 사용된다. 즉, GROUP BY 절로 그룹화된 각 그룹에 대해 조건을 적용할 수 있다. HAVING 절은 집계 함수와 함께 사용할 수 있어, 그룹화된 데이터의 집계 결과에 대해 조건을 지정할 때 유용하다.
group by로 생성된 컬럼은 where 을 사용할 수 없다. where와 비슷한 having을 사용해야한다.
select released_year,avg(stock_quantity) as avg_stock
from books
group by released_year
where avg_stock > 70;
group by 에서 where을 사용시

이런 오류가 난다.
select released_year,avg(stock_quantity) as avg_stock
from books
group by released_year
HAVING avg_stock > 70;
group by 다음 having을 사용하면

정상적으로 출력 할 수 있다. where 을 사용할려면 group by 를 쓰기 전에 써야하며 group by에서 만든 컬럼을 지정하는게 아니라 기존에있던 컬럼을 지정해줘야한다.
select released_year,avg(stock_quantity) as avg_stock
from books
where released_year > 2000
group by released_year
HAVING avg_stock > 70;

group by 전에 where 을 사용하여 released_year 가 2000 이상인 데이터만 출력할 수 있다.
CASE
CASE 문은 조건에 따라 다른 값을 반환할 수 있는 구문이다. 이는 프로그래밍 언어에서의 if-else 문과 유사하게 작동한다. CASE 문을 사용하여 쿼리 결과를 동적으로 생성하거나 조건부 논리를 적용할 수 있다.
select *,
CASE
WHEN released_year >=2000 THEN '최신책'
else '예전책'
END AS TYPE
FROM books;

- WHEN released_year >= 2000 THEN '최신책': 출판 연도가 2000년 이상인 경우 '최신책'을 반환한다.
- ELSE '예전책': 그렇지 않은 경우 '예전책'을 반환한다.
- END AS type: CASE 문에서 반환된 값을 type이라는 별칭으로 열에 추가한다.
if
기존 컬럼의 데이터를 가지고, 2가지의 조건으로만 확인하는 경우는 if() 함수 를 사용해도 된다.
즉, 2가지로 파악할 때는 if 함수가 훨씬 편하다.
select *,
if(pages > 300 , '긴책','짧은책')
from books;

ifnull
ifnull은 데이터가 null 이면, 다른 값으로 채우는 방법이다.

값이 null 인 데이터가 있을떄
select *,
ifnull(stock_quantity,0)
from books;
ifnull 함수에 컬럼명, 채워줄 숫자를 입력하면

stock_quantity 컬럼에서 null이 모두 0 으로 바뀐 컬럼이 생긴다.
'DATABASE > MySql 실습' 카테고리의 다른 글
| [sql] 테이블 2개 합치는법 join on left right join (0) | 2024.05.16 |
|---|---|
| [sql]시간 dafault now(), 업데이트시 시간 바꾸는법 , 시간 추가, 빼기, 년,월,일,시,분,초 조회 (0) | 2024.05.16 |
| [sql] 문법 sum(), avg(), and, or, not , !=, 사이 , between 활용법 (0) | 2024.05.14 |
| [sql] 문법 count(), max(), min(), group by(), sub query() 사용법 (0) | 2024.05.14 |
| [sql] 페이징(paging) n개씩 끊어서 출력 limit, offset , 단어가 포함된 데이터 출력 like (0) | 2024.05.14 |