--나이대별 출력(0은 소수점을 없애기, 1은 소수점 첫번째까지 나오기), TRUNC->반올림
SELECT "SID", "NAME", TRUNC(AGE/10,0)*10 AGE FROM STUDENT
--20대 회원만 출력
SELECT * FROM STUDENT WHERE TRUNC(AGE/10,0)*10 = 20;
--회원중에 20대, 40대, 60대 회원만 출력(IN 비교 연산자)
SELECT * FROM STUDENT WHERE TRUNC(AGE/10,0)*10 IN(20, 40, 60)
--회원중에 20대, 40대, 60대 회원만 출력(OR 비교 연산자)
SELECT * FROM STUDENT WHERE TRUNC(AGE/10,0)*10 = 20 OR TRUNC(AGE/10,0)*10 = 40 OR TRUNC(AGE/10,0)*10 = 60 ;
--나이대별 평균 신장 출력
SELECT TRUNC(AGE/10, 0)*10 AS 나이대별, AVG(HEIGHT) AS 평균신장 FROM STUDENT GROUP BY(TRUNC(AGE/10, 0)*10)
--나이대별 평균 신장 구하고(반올림 둘째자리까지) 오름차순 정렬
SELECT TRUNC(AGE/10, 0)*10 AGE, TRUNC(AVG(HEIGHT),2) HEIGHT FROM STUDENT GROUP BY(TRUNC(AGE/10, 0)*10) ORDER BY AGE ASC
--NULL값일때 0으로 반환하여 10으로 덧셈
--NVL(대상, 대상이 Null이면 반환할 값) : 비교대상이 Null인지를 확인하여 값을 대체 (오라클에서만 제공)
SELECT NAME, NVL(AGE, 0)+10 FROM STUDENT;
--NULL값일때 0으로 반환하여 10으로 덧셈하고 이름이 NULL이 아닌 사람만 출력
SELECT NAME, NVL(AGE, 0)+10 AGE FROM STUDENT WHERE NAME IS NOT NULL ORDER BY AGE DESC;
--이름이 '영'자만 출력
SELECT NAME, NVL(AGE, 0)+10 AGE FROM STUDENT WHERE NAME LIKE '%영%' ORDER BY AGE DESC;
--이름이 길이가 3글자인 사람만 출력
SELECT NAME, NVL(AGE, 0)+10 AGE FROM STUDENT WHERE length(NAME)=3 ORDER BY AGE DESC;
SELECT NAME, NVL(AGE, 0)+10 AGE FROM STUDENT WHERE NAME IS NOT NULL AND length(NAME)=3 ORDER BY AGE DESC;
--서브쿼리 나이순 상위 3명 출력
SELECT ROWNUM, NAME, NVL(AGE, 0)+10 FROM
(
SELECT * FROM STUDENT
WHERE NAME IS NOT NULL AND length(NAME)=3
ORDER BY NVL(AGE, 0)+10 DESC
)
WHERE ROWNUM BETWEEN 1 AND 3;
--나이대별 평균 신장 구하고(반올림 없애고) 오름차순 정렬
SELECT TRUNC(AVG(HEIGHT),0) AS 평균키 FROM STUDENT GROUP BY(TRUNC(AGE/10, 0)*10)
--나이대별 평균 신장 구하고(반올림 없애고) 오름차순 정렬(NULL값 제거
SELECT TRUNC(AVG(HEIGHT),0) AS HEIGHT FROM STUDENT
WHERE HEIGHT IS NOT NULL
GROUP BY(TRUNC(AGE/10, 0)*10)
--나이대별 평균키와 일치하는 학생을 출력(서브쿼리 사용)
SELECT * FROM STUDENT
WHERE HEIGHT IN
(
SELECT TRUNC(AVG(HEIGHT),0) AS HEIGHT FROM STUDENT
WHERE HEIGHT IS NOT NULL
GROUP BY(TRUNC(AGE/10, 0)*10)
)
--나이대별 평균키에서 모든 학생들보다 큰지를 출력(서브쿼리 사용)
SELECT * FROM STUDENT
WHERE HEIGHT >= ALL
(
SELECT TRUNC(AVG(HEIGHT),0) AS HEIGHT FROM STUDENT
WHERE HEIGHT IS NOT NULL
GROUP BY(TRUNC(AGE/10, 0)*10)
)
--나이대별 평균키에서 최소 1명이상 큰 학생을 출력(서브쿼리 사용)
SELECT * FROM STUDENT
WHERE HEIGHT >= ANY
(
SELECT TRUNC(AVG(HEIGHT),0) AS HEIGHT FROM STUDENT
WHERE HEIGHT IS NOT NULL
GROUP BY(TRUNC(AGE/10, 0)*10)
)
'Java Programming > DB(Oracle, My-Sql)' 카테고리의 다른 글
DB 튜닝 - INDEX 제대로 사용하기 (0) | 2018.07.20 |
---|---|
[Oracle]Toad for Oracle_데이터 수정 (1) | 2014.07.28 |
[Oracle] sql hint 모음 (0) | 2014.05.15 |
[Oracle]서브쿼리 조인해서 UPDATE (0) | 2014.03.16 |
쿼리문(제약조건..) (0) | 2013.06.28 |