// 13.6.28 쿼리문 연습
select * from STUDENT
// 모든 사용자의 아이디, 이름, 나이만 출력하시오.
select SID, NAME, AGE from STUDENT;
// 나이대(20대, 30대, 40대, ... )를 출력하시오.
(round는 반올림, trunc는 원하는 소수점 만큼 출력)
1. select SID, NAME, round(AGE/10)*10 "나이대" from STUDENT;
-> 20대 초반은 20대, 20대 중반은 30대로 나오게 됨. 그러므로 trunc함수를 써야 함.
2. select SID, NAME, trunc(AGE/10,0)*10 "나이대" from STUDENT;
// 20대 회원의 모든 정보를 출력하시오.
select * from STUDENT where trunc(AGE/10,0)*10 = 20;
// 회원 중에 20대, 40대, 60대를 출력하시오.
(반복되는 or연산자 대신에 in연산자로 간편히 사용)
1. select * from STUDENT
where trunc(AGE/10, 0)*10 = 20 or trunc(AGE/10, 0)*10 = 40 or trunc(AGE/10, 0)*10 = 60;
2. select * from STUDENT where trunc(AGE/10, 0)*10 in(20,40,60);
// 나이대별 평균 신장을 출력하시오.
select AVG(HEIGHT) "평균 키", trunc(AGE/10, 0)*10 "나이대" from STUDENT
group by trunc(AGE/10, 0)*10;
// 나이대별 평균 신장을 오름차순으로 정렬하여 출력하시오.
select AVG(HEIGHT) "평균 키", trunc(AGE/10, 0)*10 "나이대"
from STUDENT
group by trunc(AGE/10, 0)*10 order by "나이대" ASC;
// 나이대별 평균 신장을 소수점 2자리까지 출력하시오.
select trunc(AVG(HEIGHT),2) "평균 키", trunc(AGE/10, 0)*10 "나이대"
from STUDENT
group by trunc(AGE/10, 0)*10;
// 나이대별 평균 신장을 소수점 2자리까지를 출력하고, 나이대로 오름차순(ASC) 정렬하시오.
select trunc(AVG(HEIGHT),2) "평균 키", trunc(AGE/10, 0)*10 "나이대"
from STUDENT
group by trunc(AGE/10, 0)*10
order by "나이대" ASC;
// 학생의 이름과 나이를 출력하는데, 나이에 10을 더해서 출력하시오.
select NAME, AGE, AGE+10 as "10살더한 나이" from STUDENT;
// ORACLE NULL관련 함수.
// NVL(expr1, expr2): 첫번째 인자가 null이 아니면 첫번째 인자 반환, null이면, 두번째 인자 반환.
// NVL2(expr1, expr2, expr3): 첫번째 인자가 null이면 세번째 인자 반환, 첫번째 인자가 null이 아니면 두번째 인자 반환.
// 나이에 null값이 있을 때 0으로 대치하시오.
1. select NAME, NVL(AGE,0) as "null제거 나이", NVL(AGE,0)+10 as "10살더한 나이"
from STUDENT;
2. select NAME, NVL2(AGE,AGE,0) as "null제거 나이", NVL2(AGE,AGE,0)+10 as "10살더한 나이"
from STUDENT;
// 이름에 NULL이 아닌 사용자만 출력하시오.
select NAME, NVL(AGE,0) as "null제거 나이", NVL(AGE,0)+10 as "10살더한 나이"
from STUDENT
where NAME is not null;
// 10살 더한 나이로 역정렬,내림차순(DESC)하여 출력하시오.
select NAME, NVL(AGE,0) as "null제거 나이", NVL(AGE,0)+10 as "10살더한 나이"
from STUDENT
where NAME is not null
order by "10살더한 나이" DESC;
// 이름에 '영'자가 들어간 사람만 출력하시오. (like연산자 사용)
select NAME, NVL(AGE,0) as "null제거 나이", NVL(AGE,0)+10 as "10살더한 나이"
from STUDENT
where NAME like '%영%'
order by "10살더한 나이" DESC;
// 이름 길이가 3글자인 사람만 출력하시오.(LENGTH함수 이용)
select NAME, NVL(AGE,0) as "null제거 나이", NVL(AGE,0)+10 as "10살더한 나이"
from STUDENT
where NAME is not null and length(NAME)=3
order by "10살더한 나이" DESC;
// 나이 top3를 뽑으세요.(from절 서브쿼리)
select ROWNUM r, t.* from
(
select NAME, NVL(AGE,0) as "null제거 나이", NVL(AGE,0)+10 as "10살더한 나이"
from STUDENT
where NAME is not null and length(NAME)=3 order by "10살더한 나이" DESC
) t
where ROWNUM between 1 and 3;
// 나이대별 소수점 없애고 키만 출력하시오.
select trunc(AVG(HEIGHT),0) "평균 키"
from STUDENT
group by trunc(AGE/10, 0)*10;
// 나이대별 소수점 없애고 키만 null값 제외하고 출력하시오.
1. select trunc(AVG(HEIGHT),0) "평균 키"
from STUDENT
group by trunc(AGE/10, 0)*10
having trunc(AVG(HEIGHT),0) is not null;
2. select trunc(AVG(HEIGHT),0) H
from STUDENT
where height is not null
group by trunc(AGE/10, 0)*10;
// 회원의 평균 키에 해당하는 멤버가 있다면, 그 회원의 정보를 출력하시오. (where절 서브쿼리)
select * from STUDENT
where HEIGHT in
(
select trunc(AVG(HEIGHT),0) H from STUDENT
where height is not null
group by trunc(AGE/10, 0)*10
);
// 적어도(any) 조건 결과 값보다 키가 큰 학생들만 출력하시오.
select * from STUDENT
where HEIGHT > any
(
select trunc(AVG(HEIGHT),0) H from STUDENT
where height is not null
group by trunc(AGE/10, 0)*10 );
// 모든(all) 결과 값보다 키가 큰 학생들만 출력하시오.
select * from STUDENT
where HEIGHT > all
(
select trunc(AVG(HEIGHT),0) H from STUDENT
where height is not null
group by trunc(AGE/10, 0)*10 );
'일했던김개미' 카테고리의 다른 글
[MyBatis(iBatis)] $와 #의 차이점 (0) | 2013.07.10 |
---|---|
[etc.] 특정 사이트 접속불가(win7) 해결방법 (0) | 2013.07.10 |
[MyBatis(iBatis)] How to download (0) | 2013.07.10 |
[Apache Tomcat 7.0] 환경변수 설정하기 (0) | 2013.07.04 |
[ORACLE] ORACLE SQL문 QUERY 1/2 (@ORACLE SQL DEVELOPER) (0) | 2013.06.28 |
댓글