WHERE 절은 행을 선택하기 위해서 사용된다. 이 절의 중간 결과 테이블은 수평부분 집합니다.
반대로 SELECT 절은 행이 아니라 열만 선택하고, 중간 결과는 테이블의 수직 부분 집합이다.
SELECT 절의 제한성과 사용은 GROUP BY 절의 존재 유무에 의존한다. 제 10장에서는 GROUP BY 절이 없는 SELECT 명령문에 대해서 설명하고, 제 11장에서는 GROUP BY 절을 어떻게 사용하는가에 대하여 중점적으로 설명한다.
모든 열의 선택(*)
특수문자 (*)는 FROM절에서 사용된 각 테이블에 있는 모든 열을 간단히 표현한 것이다.
SELECT 절의 수식
열의 이름에서 수식을 사용해서 리터럴, 계산 또는 스칼라 함수를 사용할 수 있다.
예제)
mysql> select stu_no, fee_year, fee_term, fee_total, jang_total, fee_pay "납부 총액", fee_pay/fee_total*100 "납부금비율",'%'
>from fee
DISTINCT을 사용한 중복된 행의 제거
DISTINCT를 사용 하면 SQL은 중간 결과에서 중복된 행을 삭제한다
예제)
mysql>select distinct fe.stu_no, stu_name
> from fee fe, student s
mysq> select distinct fe.stu_no, stu_name, fee_year
> from fee fe, student s
> where fe.stu_no =s.stu_no
> and (fe.fee_year =2007 or fe. fee_year =2006);
통계 함수의 소개
SELECT 절에서 사용되는 통계 함수
SELECT 명령문에서 GROUP BY 절을 가지고 있지 않다면 SELECT 절에 있는 모든 통계 함수는 모든 행에 적용된다.
AVG(column) : 특정 열(column)에 있는 값들의 평균
COUNT(items) : 특정 열이 주어졌을 때 NULL이 아닌 항목의 개수를 알려준다.
MIN(column) : 특정 열의 최소값
MAX(column) : 특정 열의 최대값
STD(column) : 특정 열의 값의 표준 편차
STDDEV(column) : STD(column)와 같다.
SUM(column) :특정 열의 값들의 합
ex) select avg(amount) from orders;
COUNT(items) : 특정 열이 주어졌을 때 NULL이 아닌 항목의 개수를 알려준다.
MIN(column) : 특정 열의 최소값
MAX(column) : 특정 열의 최대값
STD(column) : 특정 열의 값의 표준 편차
STDDEV(column) : STD(column)와 같다.
SUM(column) :특정 열의 값들의 합
ex) select avg(amount) from orders;
COUNT 함수
COUNT(*)
괄호 내부에 * 또는 수식을 지정할 수 있다.
예제)
2학년 학생의 수는 얼마나 되는가?
mysql> select count(*)
> from student
> where grade =2;
BAN 열에는 서로 다른 반이 얼마나 되는가?
mysql> select count(distinct class)
> from student;
서로 다른 입학 년도의 총 연도 개수와 성별의 수를 출력하라
mysql> select count(distinct substring(stu_no,1,4)),
> count (distinct substring(id_num,8,4)),
> from student;
MAX와 MIN 함수
각 열에 잇는 값들 중에서 최대값과 최소값을 구한다.
예제)
납부 총액중 가장 많은 출력하라.
mysql> select max(fee_pay)
> from fee;
여학생 중에서 등록금을 가장 적게 납부한 등록금은?
mysql> select min(fee_pay)
> from fee
> where stu_no in
> (select stu_no
> from student
> where substring(id_num, 8,1)=2);
최대로 납부한 등록금과 동일한 등록금을 납부한 행의 수는?
mysql> select fee_pay, count(*)
> from fee
> where fee_pay =
> (select max(fee_pay)
> from fee);
등록금을 납부한 학생 중 최대 등록금과 최소 등록금, 최대-최소간의 차이는 얼마인가?
mysql> select max(fee_pay), min(fee_pay),(max(fee_pay)-min(fee_pay))
> from fee
영문이름 중 알파벳 순수로 가장 큰 값(마지막)을 나타나는 이름의 첫 문자를 찾아 출력하라.
mysql > select substring (max(stu_ename),1,1)
> from student
SUM 함수
특별한 열에 있는 모든 값의 합을 계싼한다.
예제)
박정인 학생이 재학 중 받은 전체 장학금의 총액은 얼마인가?
mysql> select sum(jang_total)
>from fee
>where stu_no in
>(select stu_no
>from student
>where stu_name ='박정인');
AVG 함수
특별한 열에 잇는 값의 산술 평균을 계산한다.
예제)
학번 20061011("박정인") 학생이 받은 장학금의 평균을 계산하라.
mysql> select avg(jang_total)
>from fee
>where stu_no ='20061011';
동일한 등록금 납부 총액을 제외한 등록금 납부 총액의 평균은 얼마인가?
mysql> select avg(distinct fee_pay)
> from fee;
평균 장학금 보다 더 많은 장학금을 받은 학생의 학번과 장학금을 출력하라.
mysql> select distinct stu_no, jang_total
> from fee;
> where jang_total >
> (select sum(jang_total) /count(*)
> from fee);
입학금의 평균을 avg()함수와 산술평균(입학금의 전체 합/ 전체 행의수)을 구하라.
mysql> select avg(fee_enter), sum(fee_enter) /count(*)
> from fee;
avg(fee_enter) | sum(fee_enter) /count(*)
50000.0000 | 166666.6667
→ avg()함수를 이용한 경우에는 입학금에 NULL 값이 포함되어 있으나 NULL 값은 무시하고 실제 데이터 값만을 계산하므로 올바른 결과가 아니다. 그러므로 NULL값이 포함 된 경우의 산술 평균이 맞는 값이다.
STDDEV와 VARIANCE 함수
STDDEV 함수는 열의 NULL 값을 제외한 표준 편차를 계산하여 값을 결정.
VARIANCE 함수는 열의 NULL 값을 제외한 분산을 결정한다.
열의 표제어 사용
MySQL의 SELECT 절에서는 모든 수식이나 칼럼이름 다음에 열의 표제어라는 다른 이름을 사용할 수 있다.
예제)
mysql > select stu_no, stu_name, cir_name "동아리명"
> from circle;
'DB > MySQL' 카테고리의 다른 글
ORDER BY 절 (0) | 2012.03.12 |
---|---|
GROUP BY와 HAVING (0) | 2012.03.12 |
TEST table 생성 (0) | 2012.03.06 |
MySQL Workbench table editor there are 7 column flags available: PK, NN, UQ, BIN, UN, ZF, AI. (0) | 2012.03.06 |
DB DataType (0) | 2012.03.06 |
댓글