본문 바로가기

CS 과목(CS科目)/데이터 베이스(データベース)

9. SQL로 데이터 조회하기(SQLでデーター照会)PART 5

============================================================================================

 

ORDER BY

오름차순(ACS)

OREDER의 DEFAULT값은 오름차순(ASC)이다.

ASC는 생략이 가능

 

내림차순(DESC)

그럼 attribute dept_id로 1차적으로 오름차순(ASC) 정렬을 하고, attribute salary로 2차적으로 내림차순(DESC)정렬을 하

고 싶을 때는 어떻게 할까?(아래 참조)

 

위 그림에 의하면  dept_id가 오름차순(ASC) 정렬이 돼 있고, 같은 dept_id들 내의 salary가 내림차순(DESC) 정렬이 돼 있다.

참고로, MySQL에서는 NULL들을 젤 앞에 놔두고 시작을 한다. 

AGGREGATE FUNCTION

만약 알고 싶은 것이 단순히 tuple들의 갯수라면, COUNT뒤에 ' * ' 를 사용하는 것이 좋다.

왜냐하면, AGGREGATION FUNCTION은 NULL을 처리하지 않는다. 

그래서 만약 COUNT(dept_id)를 실행 시, 예를 들어, employee 테이블 중 2개의 tuple의 dept_id가 NULL인 경우

해당 tuple을 counting되지 않는다.

 

 

 

 

GROUP BY

위 예제에서는 프로젝트 2002에 참가한 임직원에 한정을 하였다.

그런데, 특정 프로젝트가 아니라, 각 프로젝트마다의 임직원의 수, 최대, 최소 연봉을 알고 싶다면 어떻게 해야 할까?

 

위 그림에서는 works_on.proj_id를 기준으로 그룹핑을 하였다. 

만약 group by를 사용을 했다면, 그 기준이 되는 attribute를 projection atttribute로 무조건 적어 줘야 한다.

(MySQL 상에서는 적어 주지 않아도 실행에는 문제가 없었다.)

 

 

 

HAVING

GROUP BY의 결과로 나온 테이블을 기준으로 어떠한 selectino condition을 걸고 싶을 때, 사용하는 것이 HAVING 키워드

이다. 아래에서 HAVING 키워드를 이해해보자. 

참고로, 아래에서는 프로젝트에 참여한 인원의 수가 7인 이상( COUNT(*)가 7 이상 )을 기준으로 하고 있다. 

위 GROUP BY에 의해 반환(출력)된 테이블이다.

이 테이블을 기준으로 COUNT(*) attribute의 값이 7이상인 tuple을 최종 tuple로 선택하고 싶다면 아래와 같이 HAVING 키

워드를 이용하면 된다.  

 

이와 같이,  HAVING 키워드는 GROUP BY와 같이 쓰인다. 

 

이제부터는 오늘 배운 것을 토대로 예제들을 풀어 보자

예제1
예제2
예제3
예제4

ROUND() : AGGREGATION FUNCTION 중 하나로, 반올림을 하고 싶을 때 사용

BETWEEN ~~ AND ~~ : 범위를 표현하고 싶을 때 사용

예제 5

최종 결과 테이블을 proj_id를 기준으로 정렬을 한 것이다.

예제 6 - 잘못된 SQL문

HAVING COUNT( * ) >= 7 을 추가하여 예제 6을 풀려고 하면 예상한 답이 나오지 않음.

위와 같이 SQL문을 실행을 하게 되면, 예제 5의 최종 테이블을 기준으로 하여 COUNT( * )가 7 이상인 tuple들이 선택돼 버

린다.

이렇게 돼 버리면, "각 부서별 90년대 생의 숫자가 7인 이상"인 tuple들이 선택이 돼 버린다.

그러나 우리는 "프로젝트 참여 인원이 7명 이상인 프로젝트"로 한정하는 HAVING문을 작성을 해야 한다.

예제6 - 올바른 SQL문

 

SELECT문의 구성 및 실행 순서