본문 바로가기
DB/MySQL

7장 SELECT 명령문의 절

by 가므자 2012. 3. 5.
<select statement> ::=
<select clause>
<from clause>
[<whre clause>]
[<group by clause>]
[<having clause>]
[<order by clause>]


각 SELECT 명령문은 SELECT와 FROM이라는 절을 가지기 때문에 적어도 2개의 절을 가지고 있다. 그리고 WHERE, GROUP BY, ORDER BY 같은 절은 선택적으로 사용된다.
절의 순서는 고정되어 있다. 예를 들면 GROUP BY절은 WHERE 또는 FROM절 앞에 올수 없다. 그리고 ORDER BY 절이 사용된다면 이절은 항상 나중에 사용된다.
HAVING절은 GROUP BY절이 사용되어야만이 사용할 수 잇다.

예제1) 등록 테이블 ("FEE")에서 장학금을 지급 받은 학생의 학번과 장학금 내역을 출력하라.
mysql> select stu_no, jang_total  # 탐색하고자 하는 열을 선택할 수 도록
> from fee #질의를 원하는 테이블
> where jang_total >0 ; #원하는 조건.

예제2) 등록 테이블("FEE")에서 장학금을 1,000,000 이상 지급 받은 학생 중에서 2회 이상 지급 받은 학생의 학번과 지급받은 횟수를 학번 내림차순으로 출력하라

mysql> select stu_no, count(*)
> from fee  #시작 포인트에 대한 테이블 정의
> where jang_total >1000000  #원하는 조건에 맞는 행 선택
> groub by stu_no  # 그룹 별로 검색을 할때, 동일한 학번을 가진 행을 하나의 그룹으로 묶고 동일한 학번의 개수를 count(*) 열에 출력하는 예제이다. 즉 stu_no로 그룹을 만들어 각 학생(stu_no)별로 1,000,000 이상 장학금을 받은 회수를 출력하는 예제이다.
> having count(*) >1
> order by stu_no desc;

각 절이 수행 되는 순서는 2번(FROM절) -> 3번(WHERE절) -> 4번(GROUP BY절) -> 5번(HAVING절) -> 1번(SELECT절) -> 6번(ORDER BY절)순으로 처리
첫번째 절은 데이터베이스로부터 데이터를 찾아내고, FROM절은 데이터베이스로부터 하나 이상의 테이블을 입력으로 취한다.

<SELECT 명령문의 절>

GROUP BY 절
그룹벼롤 검색할 때 사용한다.
GROUP BY 절을 사용할 때는 그룹 함수를 같이 사용해야한다.
COUNT() : 개수를 구하는 함수
AVG() : 평균
MIN() : 최소값
MAX() :  최대값
SUM() : 총 합

HAVING 절
HAVING절과 WHERE절을 비교할 수 있는데, 그 차이점은 WHERE절은 FROM절에서 생성된 중간 테이블에서 동작하고, HAVING절은 GROUP BY절에서 생성된 중간 테이블에서 동작한다. 
사실 수행 과정은 동일

SELECT 절
최종 테이블에 표현 될 열을 지정하기 위해서 사용한다.
다시 말하면 SELECT 절은 열을 선택하는 것이다.

ORDER BY 절
마지막으로 수해오디는 절로 중간 결과 테이블의 내용에 영향을 주지 않는다.
그러나 마지막 까지 선택된 행을 정렬한다.

예제) 수강 신청 테이블에서 2006년도 1학기에 수강 신청한 학생의 학번과 수강년도, 학기, 교과목코드, 교수 코드를 교수코드 오름 차순으로 나타내라.
mysql> select stu_no, att_year, att_term, sub_code, prof_code
> from attend
> where att_year ='2006' and att_term =1
> order by prof_code;

'DB > MySQL' 카테고리의 다른 글

WHERE 절  (0) 2012.03.05
FROM 절  (0) 2012.03.05
테이블 생성 및 삭제하기  (0) 2012.03.02
6장 SELECT 명령문과 공통 요소  (0) 2012.03.02
BNF  (0) 2012.02.28

댓글