본문 바로가기

Java Programming/DB(Oracle, My-Sql)

쿼리문(서브쿼리..)

--나이대별 출력(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)
)