Digking's cave

0424 -SELECT 문제 본문

기초/Oracle

0424 -SELECT 문제

디깅 2019. 4. 24. 18:04
728x90

--단일행 서브쿼리로 해결하세요
1. 관우보다 평점이 우수한 학생의 학번과 이름을 검색하세요
SELECT sno, sname,avr
FROM student
WHERE avr >(SELECT avr 
       FROM student
       WHERE sname = '관우');

2. 관우와 동일한 학년 학생중에 평점이 사마감과 동일한 학생을 검색하세요
  SELECT sno, sname, syear, avr
  FROM student
  WHERE avr = (SELECT avr
              FROM student
              WHERE sname = '사마감')
  AND syear = (SELECT syear
              FROM student
              WHERE sname = '관우');
              
3. 관우보다 일반 화학과목의 학점이 더 낮은 학생의 명단을 학점과 검색하세요
SELECT sno, sname, grade
FROM student
JOIN score USING (sno)
JOIN course USING (cno)
JOIN scgrade ON result BETWEEN loscore AND hiscore
WHERE grade > (SELECT grade
               FROM student
               JOIN score USING (sno)
               JOIN course USING (cno)
               JOIN scgrade ON result BETWEEN loscore AND hiscore
               WHERE sname='관우'
               AND cname='일반화학')
AND cname='일반화학';

4. 인원수가 가장 많은 학과를 검색하세요
SELECT major, COUNT(sno)
FROM student
GROUP BY major
HAVING COUNT(sno) =(SELECT MAX(COUNT(sno))
                      FROM student
                      GROUP BY major);

5. 학생 중 기말고사 성적이 가장 낮은 학생의 정보를 검색하세요
SELECT sno, sname, AVG(result)
FROM student
NATURAL JOIN score
GROUP BY sno, sname
HAVING AVG(result) = (SELECT MIN(AVG(result))
                      FROM student
                      NATURAL JOIN score
                      GROUP BY sno, sname);

SELECT st.sno, sname, AVG(result) 
FROM student st, score sc 
WHERE st.sno=sc.sno
GROUP BY st.sno, sname 
HAVING AVG(result)=(SELECT MIN(AVG(result)) 
                    FROM student st, score sc 
                    WHERE st.sno=sc.sno
                    GROUP BY st.sno, sname);

--다중행이나 다중열 서브쿼리로 해결하세요
6. 화학과 학생의 평점이 동일한 학생들을 검색하세요
SELECT  *
FROM student s1
WHERE major ='화학' AND avr IN(SELECT avr FROM student s2 WHERE major='화학'
AND s1.sno != s2.sno);

7. 화학과 교수와 부임일이 같은 직원을 검색하세요
SELECT *
FROM professor p
NATURAL JOIN emp e
WHERE e.hdate = ALL(SELECT p.hiredate
                  FROM professor
                  WHERE section = '화학');
                  
8. 화학과 학생과 같은 학년에서 평점이 동일한 학생들을 검색하세요
SELECT sno, sname, major, avr
FROM student
WHERE (syear, avr) IN (SELECT syear, avr
                     FROM student
                     WHERE major = '화학')
AND major != '화학';

-- 그룹함수나 Having절로 해결하세요
9. 근무 중인 직원이 4명이상인 부서를 검색하세요(부서번호, 인원)
SELECT dno, COUNT(ename)
FROM emp
GROUP BY dno
HAVING COUNT(ename) >= 4;

10. 업무별 평균 연봉이 2만불 이상인 업무를 검색하세요
SELECT job,AVG((sal*12)+NVL(comm,0))
FROM emp
GROUP BY job
HAVING AVG((sal*12)+NVL(comm,0)) >= 20000;

11. 각 학과의 학년별 인원중 인원이 6명 이상인 학년을 검색하세요
SELECT major, syear, COUNT(sname)
FROM student
GROUP BY syear,major
HAVING COUNT(major)>= 6;

반응형

'기초 > Oracle' 카테고리의 다른 글

DML 문장  (0) 2019.04.24
다중 열 서브 쿼리  (0) 2019.04.24
다중행 서브 쿼리  (0) 2019.04.24
서브 쿼리  (0) 2019.04.24
함수 - 5.그룹함수와 HAVING절  (0) 2019.04.24