본문 바로가기
일했던김개미

[ORACLE] ORACLE SQL문 QUERY 2/2 (@ORACLE SQL DEVELOPER)

by 김갬 2013. 6. 28.
반응형

// 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    );

    



반응형

댓글