그룹함수
문법)
SELECT column, group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
종류 |
의미 |
COUNT |
행의갯수출력 |
MAX |
NULL을제외한모든행에서최대값출력 |
MIN |
NULL을제외한모든행에서최소값출력 |
SUM |
NULL을제외한모든행의합계 |
AVG |
NULL을제외한모든행의평균값 |
STDDEV |
NULL을제외한모든행의표준편차 |
VARIANCE |
NULL을제외한모든행의분산값 |
GROUPING |
해당칼럼이그룹에사용되었는지여부를1또는0으로반환 |
GROUPINGSET |
한번의질의로여러개의그룹화가능 |
COUNT 함수
테이블에서 조건을 만족하는 행의 개수를 반환하는 함수
문법) COUNT ( {* |[ DISTINCT | ALL] expr} )
※ 참고 : COUNT(컬럼이름) 쓰면 널값 제외(컬럼에 값이 있는사람만 뽑아라)
COUNT(*) 쓰면 널값포힘(컬럼의 모든 데이터 다 뽑아라)
예제 : 101번 학과 교수중에서 보직 수당을 받는 교수를 출력하여라.
SQL> SELECT COUNT(COMM) FROM professor WHERE deptno = 101; |
출력결과 COUNT(*) -------- 2 |
SQL> SELECT COUNT(*) FROM professor WHERE deptno = 101 AND comm IS NOT NULL;
|
SQL> SELECT COUNT(*) FROM professor WHERE deptno = 101; |
출력결과) COUNT(*) -------- 4 |
예제 : 101번 학과 학생들의 몸무게 평균과 합계를 출력하여라.
SQL> SELECT AVG(weight), SUM(weight)
FROM student
WHERE deptno = 101;
예제 : 101번 학과 학생들 중에서 최대 키와 최소 키를 출력하여라.
SQL> SELECT MAX(height), MIN(height)
FROM student
WHERE deptno = 101;
예제 : 교수테이블에서 급여의 표준 편차와 분산을 구하여라.
SQL> SELECT STDDEV(sal), VARIANCE(sal)
FROM professor;
GROUP BY
사용 규칙)
* 그룹핑 전에 WHERE절을 사용하여 그룹 대상 집합을 먼저 선택가능.
* GROUP BY 절에는 반드시 칼럼이름이 포함되어야 하며 별명 사용 불가.
* 그룹별로 출력 순서는 오름차순으로 정렬됨.(10g 부터는 적용 안됨)
* SELECT 절에서 나열된 칼럼 이름이나 표현식은 GROUP BY절에 반드시 포함 되어야 함.
* GROUP BY 절에 나열된 칼럼 이름은 SELECT 절에 명시하지 않아도 됨.
예제 : 에러남
SQL> SELECT deptno, position, AVG(sal)
FROM professor
GROUP BY deptno;
※ 에러이유 : SELECT 절에 명시된 position 칼럼이 GROUP BY절에 명시되지 않음.
출력결과)
SELECT deptno, position, AVG(sal)
*
1행에 오류:
ORA-00979: GROUP BY의 식이 없습니다.
예제 : 교수 테이블에서 학과별로 교수 수와 보직 수당을 받는 교수 수를 출력하여라.
SQL> SELECT deptno, COUNT(*), COUNT(comm)
FROM professor
GROUP BY deptno;
예제 : 학과별로 소속 교수들의 평균 급여, 최소 급여, 최대 급여를 출력하여라.
SQL> SELECT deptno, AVG(sal), MIN(sal), MAX(sal)
FROM professor
GROUP BY deptno;
다중 칼럼을 이용한 그룹별 검색
예제 : 학생 테이블에서 전체 학생을 소속 학과별로 나누고, 같은 학과 학생은
다시 학년별로 그룹핑하여, 학과와 학년별로 인원수, 평균 몸무게를
출력하여라. 단, 평균 몸무게는 소수점 이하 첫번째 자리에서 반올림한다
SQL> SELECT deptno, grade, COUNT(*), ROUND(AVG(weight))
FROM student
GROUP BY deptno, grade;
1) ROLLUP : GROUP BY 절의 그룹 조건에 따라 전체 행을 그룹화하고 각 그룹에 대해 부분합을 구하는 연산자
2) CUBE : ROLLUP에 의한 그룹 결과와 GROUP BY 절에 기술된 조건에 따라 그룹 조합을 만드는 연산자
GROUP BY 절에 기술된 칼럼 수가 n개인 경우,
ROLLUP 연산자의 그룹핑 조합 : n+1
CUBE 연산자의 그룹핑 조합 : 2n
문법)
SELECT column, group_function(column)
FROM table
[WHERE condition]
[GROUP BY [ROLLUP|CUBE] group_by_expression]
[HAVING group_condition]
ROLLUP 사용
예제 : 소속 학과별로 교수 급여 합계와 모든 학과 교수들의 급여 합계를 출력하여라.
SQL> SELECT deptno, SUM(sal)
FROM professor
GROUP BY ROLLUP(deptno);
SQL> select deptno, position,
count(*),sum(sal)
from professor
group by rollup(deptno,position);
DEPTNO POSITION COUNT(*) SUM(SAL)
---------- ---------------------------------------- ---------- ----------
101 교수 1 500
101 부교수 1 420
101 조교수 1 360
101 전임강사 1 210
101 4 1490
102 교수 1 450
102 전임강사 1 240
102 2 690
201 조교수 1 320
201 1 320
...............
13 rows selected.
CUBE 연산자
예제 : CUBE 연산자를 이용하여 학과 및 직급별 교수 수, 학과별 교수 수, 직급별 교수 수, 전체 교수 수를 출력하여라.
SQL> SELECT deptno, position, COUNT(*)
FROM professor
GROUP BY CUBE(deptno, position);
SQL> select deptno,position,
count(*), sum(sal)
from professor
group by cube(deptno,position);
DEPTNO POSITION COUNT(*) SUM(SAL)
---------- ---------------------------------------- ---------- ----------
8 2900
교수 2 950
부교수 2 820
조교수 2 680
전임강사 2 450
101 4 1490
101 교수 1 500
101 부교수 1 420
101 조교수 1 360
101 전임강사 1 210
102 2 690
102 교수 1 450
102 전임강사 1 240
201 1 320
201 조교수 1 320
202 1 400
202 부교수 1 400
17 rows selected.
HAVING
그룹함수를 조건으로 주고싶은 경우 where절을 쓸수없음 → HAVING
문법)
SELECT column, group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column]
예제 : 학생 수가 4명 이상인 학년에 대해서 학년, 학생 수, 평균 키, 평균 몸무게를 출력하여라. 단, 평균 키와 평균 몸무게는 소수점 첫 번째 자리에서 반올림하고, 출력순서는 평균 키가 높은 순부터 내림차순으로 출력하여라.
* HAVING 절을 사용하지 않은 경우 : 학생수가 4명 이하여도 출력된다
SQL> SELECT grade, count(*), ROUND(AVG(height)) avg_height, ROUND(AVG(weight)) avg_weight
FROM student
GROUP BY grade
ORDER BY avg_height DESC;
출력결과)
GRADE COUNT(*) AVG_HEIGHT AVG_WEIGHT
------- -------- ----------- ----------
4 3 176 85
1 6 175 65
3 2 171 79
2 5 165 53
* HAVING 절을 사용한 경우 : 학생수가 4명 이상만 출력된다
SQL> SELECT grade, count(*), ROUND(AVG(height)) avg_height, ROUND(AVG(weight)) avg_weight
FROM student
GROUP BY grade
HAVING COUNT(*) > 4
ORDER BY avg_height DESC;
출력결과)
GRADE COUNT(*) AVG_HEIGHT AVG_WEIGHT
------- -------- ----------- ----------
1 6 175 65
2 5 165 53
연습문제
1. 학과별로 평균 몸무게와 학생수를 출력하되 평균 몸무게의 내림차순으로 정렬하세요.
****************************
SQL> select deptno, avg(weight), count(*)
from student
group by deptno
order by avg(weight) desc;
DEPTNO AVG(WEIGHT) COUNT(*)
---------- ----------- ----------
102 69.5 4
101 68 8
201 61.75 4
****************************
2. 동일 학과 내에서 같은 학년에 재학중인 학생 수가 3명 이상인 그룹의 학과번호,
학년, 학생 수, 최대 키, 최대 몸무게를 출력하세요.
****************************
SQL> select deptno, grade, count(*), max(height), max(weight)
from student
group by deptno, grade
having count(grade)>=3;
DEPTNO GR COUNT(*) MAX(HEIGHT) MAX(WEIGHT)
---------- -- ---------- ----------- -----------
201 1 3 184 70
101 2 3 171 72
****************************
3. 학과와 학년 별 키의 평균, 학과별 키의 평균, 전체 학생에 대한 키의 평균을 구하세요.
*********************************
SQL> select deptno,grade, avg(height)
from student
group by cube(deptno,grade);
DEPTNO GR AVG(HEIGHT)
---------- -- -----------
171.5625
1 175.333333
2 164.8
3 170.5
4 176
101 171.125
101 1 177
101 2 164.666667
101 3 170
101 4 175.5
102 168
102 1 160
102 2 164
102 3 171
102 4 177
201 176
201 1 179.333333
201 2 166
18 rows selected.
*********************************
학과와 학년 별 키의 평균
SQL> select deptno, grade,
avg(height)
from student
group by rollup(deptno,grade);
DEPTNO GR AVG(HEIGHT)
---------- -- -----------
101 1 177
101 2 164.666667
101 3 170
101 4 175.5
101 171.125
102 1 160
102 2 164
102 3 171
102 4 177
102 168
201 1 179.333333
201 2 166
201 176
171.5625
14 rows selected.
학과별 키의 평균
SQL> select deptno, avg(height)
from student
group by rollup(deptno);
DEPTNO AVG(HEIGHT)
---------- -----------
101 171.125
102 168
201 176
171.5625
4. 학과별 평균 몸무게와 학년 별 평균 몸무게를 구하세요.
***********************************************
SQL> select deptno, grade,
avg(weight)
from student
group by cube(deptno,grade);
DEPTNO GR AVG(WEIGHT)
---------- -- -----------
66.8125
1 64.6666667
2 53.4
3 79
4 85.3333333
101 68
101 1 62
101 2 56
101 3 88
101 4 82
102 69.5
102 1 68
102 2 48
102 3 70
102 4 92
201 61.75
201 1 65.3333333
201 2 51
18 rows selected.
***********************************************
SQL> select deptno, grade,
avg(weight)
from student
group by rollup(deptno,grade);
DEPTNO GR AVG(WEIGHT)
---------- -- -----------
101 1 62
101 2 56
101 3 88
101 4 82
101 68
102 1 68
102 2 48
102 3 70
102 4 92
102 69.5
201 1 65.3333333
201 2 51
201 61.75
66.8125
14 rows selected.
21p 연습문제============================================
교수 테이블
6. 학과별 교수 수가 2명 이하인 학과 번호, 교수 수를 출력 하세요.
********************************************************
SQL> select deptno, count(*)
from professor
group by deptno
having count(*)<=2;
DEPTNO COUNT(*)
---------- ----------
201 1
102 2
202 1
********************************************************
7. 교수 중에서 급여와 보직수당을 합친 금액이 가장 많은 경우와 가장 적은 경우 그리고 평균 금액을 출력하여라. 단, 보직수당이 없는 교수의 수당은 0으로 계산하고, 급여는 소수점 둘째 자리에서 반올림하세요.
**************************************************************************
SQL> select profno, max(round(sal,1)+NVL(comm,0)),
min(round(sal,1)+NVL(comm,0)), avg(round(sal,1)+NVL(comm,0))
from professor
group by profno;
PROFNO MAX(ROUND(SAL,1)+NVL(COMM,0)) MIN(ROUND(SAL,1)+NVL(COMM,0)) AVG(ROUND(SAL,1)+NVL(COMM,0))
---------- ----------------------------- -------------------- -----------------------------
9903 375 375 375
9906 420 420 420
9908 417 417 417
9902 320 320 320
9907 210 210 210
9901 520 520 520
9904 240 240 240
9905 475 475 475
8 rows selected.
************************************************************************
SQL> select position, max(round(sal,1)+nvl(comm,0)),
min(round(sal,1)+nvl(comm,0)), avg(round(sal,1)+nvl(comm,0))
from professor
group by position
having position='교수';
SQL> select max( sal+ nvl2(comm,comm,0) ) 최대,
min(sal+ nvl2(comm,comm,0) ) 최소,
round( avg(sal+ nvl2(comm,comm,0) ),1) 평균
from professor;
SQL> select ROUND(max(sal+nvl(comm,0)),1) MAX,
ROUND(min(sal+nvl(comm,0)),1) MIN,ROUND(avg(sal+nvl(comm,0)),1) AVG
from professor
group by position
having position = '교수';
8. 교수 중에서 급여와 보직수당을 합친 금액이 가장 많은 경우와 가장 적은
경우 그리고 평균 금액을 출력하여라. 단, 보직수당이 없는 교수의 급여는
0으로 계산하고, 급여는 소수점 둘째 자리에서 반올림하세요.
****************************************************************************
SQL> select profno,
max(round((sal+nvl2(comm,comm,-sal)),1)),
min(round((sal+nvl2(comm,comm,-sal)),1)), avg(round((sal+nvl2(comm,comm,-sal)),1))
from professor
group by profno;
PROFNO MAX(ROUND((SAL+NVL2(COMM,COMM,-SAL)),1)) MIN(ROUND((SAL+NVL2(COMM,COMM,-SAL)),1)) AVG(ROUND((SAL+NVL2(COMM,COMM,-SAL)),1))
---------- ------------------------- --------------------------- ---------------------------
9903 375 375 375
9906 0 0 0
9908 417 417 417
9902 0 0 0
9907 0 0 0
9901 520 520 520
9904 0 0 0
9905 475 475 475
8 rows selected.
****************************************************************************
※ nvl2로 comm이 null이 아니면 그대로 comm, null이면 -sal해서 sal값을 -로 만들어준다.
그런후 sal과 더하면 0이 된다. 이것이 sal+comm 값 이다.
round((sal+nvl2(comm,comm,-sal)),1)
SQL> select position, max(round(sal,1)+nvl2(comm,comm,-round(sal,1))) MAX,
min(round(sal,1)+nvl2(comm,comm,-round(sal,1))) MIN,
avg(round(sal,1)+nvl2(comm,comm,-round(sal,1))) AVG
from professor
group by position
having position='교수';
SQL> select ROUND(max(sal+nvl2(comm,comm,-sal))) MAX,
ROUND(min(sal+nvl2(comm,comm,-sal))) MIN,
ROUND(avg(sal+nvl2(comm,comm,-sal))) AVG
from professor
group by position
having position ='교수';
9. 학과와 직급별 급여 평균, 학과별 급여 평균, 직급별 급여 평균 그리고 교수
전체에 대한 급여 평균을 출력하세요.
***********************************************************
SQL> select deptno,position, avg(sal)
from professor
group by cube(deptno,position);
DEPTNO POSITION AVG(SAL)
---------- ---------------------------------------- ----------
362.5
교수 475
부교수 410
조교수 340
전임강사 225
101 372.5
101 교수 500
101 부교수 420
101 조교수 360
101 전임강사 210
102 345
102 교수 450
102 전임강사 240
201 320
201 조교수 320
202 400
202 부교수 400
17 rows selected.
************************************************************
10. 직급별로 평균 급여가 300보다 크면 ‘우수’, 작거나 같으면 ‘보통’을 출력
하세요.
********************************************
SQL> select position,
case when avg(sal)>300 then '우수'
when avg(sal)<=300 then '보통'
end
from professor
group by position;
POSITION CASEWHEN
---------------------------------------- --------
교수 우수
부교수 우수
조교수 우수
전임강사 보통
*******************************************
SQL> select position,avg(sal),
case when avg(sal) >= 300 then '우수'
else '보통'
end as 급여등급
from professor
group by position;
22p 연습문제============================================
10. Emp 테이블의 hiredate 컬럼을 참고해서 아래의 결과처럼 출력해보세요.
HAP 1980 1981 1982 1983 1987
---------- ------- ------- ----- -------- --------
14 1 10 1 0 2
요약 : 입사일별로 숫자 카운트, 전체 합
*********************************************************************
SQL> select count(*) HAP,
count(decode(to_char(hiredate,'YYYY'),'1980',0)) "1980",
count(decode(to_char(hiredate,'YYYY'),'1981',0)) "1981",
count(decode(to_char(hiredate,'YYYY'),'1982',0)) "1982",
count(decode(to_char(hiredate,'YYYY'),'1983',0)) "1983",
count(decode(to_char(hiredate,'YYYY'),'1987',0)) "1987"
from emp;
HAP 1980 1981 1982 1983 1987
---------- ---------- ---------- ---------- ---------- ----------
14 1 10 1 0 2
**********************************************************************
SQL> select to_char(hiredate,'YYYY')
from emp;
TO_CHAR(
--------
1980
1981
....
1987
1981
1981
1982
14 rows selected.
23p 연습문제============================================
문제 : Emp table을 사용하여 부서별로 직급별로 급여 합계를 구하고 합계를 구하세요. 아래 결과처럼 만드시면 됩니다
DEPTNO CLERK MANAGER PRESIDENT ANALYST SALESMAN 합계
------- ------- --------- ---------- -------- --------- -----
10 1300 2450 5000 0 0 8750
20 1900 2975 0 6000 0 10875
30 950 2850 0 0 5600 9400
4150 8275 5000 6000 5600 29025
SQL> select deptno,
sum( to_number( decode(job,'CLERK',sal,0) ) ) clerk,
sum( to_number( decode(job,'MANAGER',sal,0) ) ) manager,
sum( to_number( decode(job,'PRESIDENT',sal,0) ) ) president,
sum( to_number( decode(job,'ANALYST',sal,0) ) ) analyst,
sum( to_number( decode(job,'SALESMAN',sal,0) ) ) salesman,
sum( sal ) sum
from emp
where job is not null
group by rollup(deptno)
order by 1;
SQL> select deptno,
sum(decode(job,'CLERK',sal,0)) "CLERK",
sum(decode(job,'MANAGER',sal,0)) "MANAGER",
sum(decode(job,'PRESIDENT',sal,0)) "PRESIDENT",
sum(decode(job,'ANALYST',sal,0)) "ANALYST",
sum(decode(job,'SALESMAN',sal,0)) "SALESMAN",
sum(sal) "합계"
from emp
group by rollup(deptno);
24p 연습문제============================================
무제 : Temp 테이블을 사용하여 아래와 같이 출력하시오.
No 컬럼은 ceil 함수와 rownum 을 이용하여 3개씩 묶어 하나의 no를 부여하고
Decode , max , mod 함수를 적절하게 활용하여 각 데이터의 rownum 을 3으로
나눈 나머지를 0,1,2 일 경우로 나누어 컬럼의 위치를 지정하면 됩니다.
NO 사번1 이름1 사번2 이름2 사번3 이름3
----- -------- -------- -------- ------ -------- ------
1 19970101 김길동 19960101 홍길동 19970201 박문수
2 19930331 정도령 19950303 이순신 19966102 지문덕
3 19930402 강감찬 19960303 설까치 19970112 연흥부
4 19960212 배뱅이 20000101 이태백 20000102 김설악
5 20000203 최오대 20000334 박지리 20000305 정북악
6 20006106 유도봉 20000407 윤주왕 20000308 강월악
7 20000119 장금강 20000210 나한라
SQL> select ceil(rownum/3) "NO.",
max(decode(mod(rownum,3),1,emp_id)) "사번1",
max(decode(mod(rownum,3),1,emp_name)) "이름1",
max(decode(mod(rownum,3),2,emp_id)) "사번2",
max(decode(mod(rownum,3),2,emp_name)) "이름2",
max(decode(mod(rownum,3),0,emp_id)) "사번3",
max(decode(mod(rownum,3),0,emp_name)) "이름3"
from temp
group by ceil(rownum/3)
order by 1;
윗 문제 풀때 참고..
select ceil(rownum/3) no,
decode(mod(rownum,3), 1, emp_id) aa,
decode(mod(rownum,3), 1, emp_name) bb,
decode(mod(rownum,3), 2, emp_id) cc,
decode(mod(rownum,3), 2, emp_name) dd,
decode(mod(rownum,3), 0, emp_id) ee,
decode(mod(rownum,3), 0, emp_name) ff
from temp
order by 1
--------------------------====------------========---------------------------
문제 : student table의 birthdate 칼럼을 이용하여 각 학생이 태어난 월을 찾아서 아래의 결과로각 월별로 몇명이 태어났는지 집계하여 출력하세요.
1월 2월 3월 4월 5월 ...... 12월 합계
--- --- --- --- --- --- ----
명 명 명 명 명 명 명
**********************************************************************
SQL> select
concat(count(decode(to_char(birthdate, 'MM'),'01',0)),'명') "1월",
concat(count(decode(to_char(birthdate, 'MM'),'02',0)),'명') "2월",
concat(count(decode(to_char(birthdate, 'MM'),'03',0)),'명') "3월",
concat(count(decode(to_char(birthdate, 'MM'),'04',0)),'명') "4월",
concat(count(decode(to_char(birthdate, 'MM'),'05',0)),'명') "5월",
concat(count(decode(to_char(birthdate, 'MM'),'06',0)),'명') "6월",
concat(count(decode(to_char(birthdate, 'MM'),'07',0)),'명') "7월",
concat(count(decode(to_char(birthdate, 'MM'),'08',0)),'명') "8월",
concat(count(decode(to_char(birthdate, 'MM'),'09',0)),'명') "9월",
concat(count(decode(to_char(birthdate, 'MM'),'10',0)),'명') "10월",
concat(count(decode(to_char(birthdate, 'MM'),'11',0)),'명') "11월",
concat(count(decode(to_char(birthdate, 'MM'),'12',0)),'명') "12월",
concat(count(*),'명') "합계"
from student;
***********************************************************************
'명' 안나오는 답
SQL> select
count(decode(to_char(birthdate, 'MM'),'01',0)) "1월",
count(decode(to_char(birthdate, 'MM'),'02',0)) "2월",
count(decode(to_char(birthdate, 'MM'),'03',0)) "3월",
count(decode(to_char(birthdate, 'MM'),'04',0)) "4월",
count(decode(to_char(birthdate, 'MM'),'05',0)) "5월",
count(decode(to_char(birthdate, 'MM'),'06',0)) "6월",
count(decode(to_char(birthdate, 'MM'),'07',0)) "7월",
count(decode(to_char(birthdate, 'MM'),'08',0)) "8월",
count(decode(to_char(birthdate, 'MM'),'09',0)) "9월",
count(decode(to_char(birthdate, 'MM'),'10',0)) "10월",
count(decode(to_char(birthdate, 'MM'),'11',0)) "11월",
count(decode(to_char(birthdate, 'MM'),'12',0)) "12월",
count(*) "합계"
from student;
=========---------==========------------========-----------=
문제 : student table의 tel 칼럼을 사용하여
각 학생들의 지역을 추출하여 지역별로
아래와 같이 집계해서 출력하세요.
(02:서울, 051:부산, 052:울산,053:대구,055:경남)
서울 부산 울산 대구 경남
--- --- ---- ---- ----
2명 5명 1명 1명 7명
************************************************************************
SQL> select
count(decode(substr(tel,1,instr(tel,')',1)-1),'02',1,''))||'명' 서울,
count(decode(substr(tel,1,instr(tel,')',1)-1),'051',1,''))||'명' 부산,
count(decode(substr(tel,1,instr(tel,')',1)-1),'052',1,''))||'명' 울산,
count(decode(substr(tel,1,instr(tel,')',1)-1),'053',1,''))||'명' 대구,
count(decode(substr(tel,1,instr(tel,')',1)-1),'055',1,''))||'명' 경남
from student;
SQL> select
concat(count(decode(to_char(rtrim(substr(tel,1,3),')')),'02',0)),'명') "서울",
concat(count(decode(to_char(rtrim(substr(tel,1,3),')')),'051',0)),'명') "부산",
concat(count(decode(to_char(rtrim(substr(tel,1,3),')')),'052',0)),'명') "울산",
concat(count(decode(to_char(rtrim(substr(tel,1,3),')')),'053',0)),'명') "대구",
concat(count(decode(to_char(rtrim(substr(tel,1,3),')')),'055',0)),'명') "경남"
from student;
************************************************************************
서울 부산 울산 대구 경남
----- ----- ------ ----- -----
2명 5명 1명 1명 7명
'Oracle > Oracle - SQL' 카테고리의 다른 글
SQL정리 7장 서브쿼리 (0) | 2012.01.09 |
---|---|
SQL정리 6장 join (0) | 2012.01.07 |
SQL정리 4장 함수 (0) | 2012.01.04 |
SQL정리 1-3장 (0) | 2012.01.04 |
SQL - SELECT 문 (0) | 2012.01.02 |