웹개발/웹 개발[데이터베이스-MySQL]

데이터베이스 [HAVING, ORDER BY, LIMIT] 함수

jhshdksa 2022. 12. 19. 21:06

[HAVING, ORDER BY, LIMIT] 함수 학습하기


[ HAVING ]

앞서 배웠던 GROUP BY를 사용하여 그룹화를 한 후 조건을 주고 싶을 때는 어떻게 해야 할까?

 

 

흔히 SELECT쿼리 문의 순서는

왼쪽의 사진과 같다.

 

그러므로 테이블에서 개별 특정 조건에 부합하는

데이터만 조회하고 싶을 때 사용하는 WHERE 절을

그룹화인 GROUP BY절 이후에 사용할 수 없다.

 

이때는 HAVING 절을 사용한 조건문으로 해결한다.

 

 


HAVING절 실행하기

HAVING 절은 GROUP BY절 다음에 위치해 GROUP BY 한 결과를 대상으로

다시 조건을 거는 역할을 수행한다.

👇위의 SELECT문 해석👇

order_mst 테이블에서(FROM)

'product_name' Column을 기준으로 그룹화하여 (GROUP BY)

'max_stock' Column이 99 초과하는 값을 조건으로 하는 (HAVING)

왼쪽 사진의 테이블 값을 조회해라(SELECT) 


GROUP BY절 이후 HAVING조건절을 사용하지 않고

WHERE 절을 중간에 작성하는 경우

위의 사진과 같이 GROUP BY 아래는 입력되지 않고

WHERE절까지만 출력(FROM)한 후 그 값들만을 GROUP BY 하여 조회한다.(SELECT)

HAVING조건이 실행되지 않는다.


[ ORDER BY ]

 SELETE에서 출력되는 결과물을 오름차순 또는 내림차순으로

데이터를 정렬하여 테이블을 조회하고 싶을 때 사용하는 것이 'ORDER BY'이다.

 

ORDER BY절은 항상 SELECT절 다음에 위치한다.

 

기본 구조는 ORDER BY / Column_name / ASC, DESC이며

>> Column_name : 열의 이름

ASC는 오름차순, DESC는 내림차순이다. (ASC는 기본값으로 생략 가능)


HAVING절 실행하기 1

👇위의 쿼리문을 order_count를 기준으로 내림차순👇


👇위의 쿼리문을 stock_sum를 기준으로 오름차순👇

👇오름차순은 'ASC'를 생략해도 출력 값이 같다.👇


HAVING절 실행하기 2

오름차순 정렬된 'order_count'에서 중복되는 값인 '1'의 정렬을 다시 추가하고 싶을 때

>> stock_sum을 내림차순으로 설정한다.


두 개의 Column을 모두 내림차순 하고 싶은 경우 위와 같이 ORDER BY 절을 쓰면 된다.


[ LIMIT ]

LIMIT 절은 SELECT 쿼리문에서 결과를 조회할 때 지정된 레코드만을 가져올 때 사용한다.

테이블의 데이터 조회 시 한계를 지정할 수 있다.

위의 사진은 'order_mst' 테이블의 전체 데이터를 조회한 것이며

'order_mst' 테이블은 12개의 레코드(행)로 이루어져 있다.

 

여기서 필요한 레코드만을 지정하여 조회하는 것이 LIMIT이다.


LIMIT 절 실행하기

여기서 필요한 레코드만을 지정


👉 LIMIT절에 숫자를 한 개 쓰는 경우 : 해당 레코드(행)까지만 출력

👉 LIMIT절에 숫자를 두 개 쓰는 경우

: 첫 번째 숫자(N)의  (N + 1)행부터 두 번째 숫자의 레코드(행) 개수만큼 출력

 

(N + 1)인 이유는 Column의 행은 인덱스 번호와 같이 0번째 행부터 시작된다.

N의 값이 3일 때 'order_id'가 1부터 시작인 테이블에서의 위치는 'order_id = 4 '이다.

 

>> 행은 인덱스번호와 같이 0부터 시작한다. (key값은 1부터 시작하기 때문에 혼동하면 안 된다.)

0번 인덱스부터 3개 조회


지금까지 데이터베이스의 함수인 [HAVING, ORDER BY, LIMIT]에 대해 알아보았습니다.

 

다음 포스팅에서는 '서브 쿼리' 대해 알아보겠습니다.

 

긴 글 읽어주셔서 감사드립니다