상세 컨텐츠

본문 제목

[4월13일]중요한 수업내용 서브쿼리 차집합 교집합 합집합

데이터베이스

by esoesmio 2023. 4. 13. 19:50

본문

-- ALTER SESSION set NLS_date_format = 'yyyyMMdd HH24:mi:Ss'

select*
from PROFESSOR
where pname = '송강';

-- 송강보다 부임일시가 빠른 교수들의 목록 조회

select *
from PROFESSOR p
where p.HIREDATE < (select HIREDATE
                    from PROFESSOR
                    where pname = '송강');

--손하늘 사원보다 급여가 높은 사원 목록

select *
from emp
where SAL > (select sal
             from EMP
             where ENAME = '손하늘');

--이렇게도 할 수 있음 조은이로
select e.*
from emp e
         join(select *
              from EMP
              where ename = '손하늘') B
             on e.sal > b.sal;



select *
from STUDENT

where sname = '노육';
--노육이라는 학생들과 학점이 같은 학생 목록 조회

select st.*
from student st
where avr in (select avr
              from student
              where sname = '노육');
-- 조인으로도 할 수 있음

select st.*
from student st
         join (select *
               from student
               where sname = '노육') B
              on st.AVR = b.AVR;
;

--기말고사 성적이 95점 이상인 학번, 과목번호 과목명 , 성적
-- 조회하는 서브쿼리 하나 만들고

--학생테이블이랑 조인해서 학번, 학생이름, 과목번호, 과목명, 성적, 전공


-- (select sc.sno, sc.cno, c.cname, sc.result
-- from score sc
-- join course c
-- on sc.cno = c.cno
-- and result > 95)
-- as B


--기말고사 성적이 95점 이상인 학번, 과목번호 과목명 , 성적
-- 조회하는 서브쿼리 하나 만들고

--학생테이블이랑 조인해서 학번, 학생이름, 과목번호, 과목명, 성적, 전공

select student.sno, student.sname, student.major, b.RESULT
from (select sc.sno, sc.cno, c.cname, sc.result
      from score sc
               join course c
                    on sc.cno = c.cno
                        and result >= 95) B
         join student student
              on b.SNO = STUDENT.SNO;



--score, scgrade, student -> 하나의 서브쿼리

--course, professor -> 하나의 서브쿼리로 (당당교수가 없는 과목도 조회되도록)

--위 서브쿼리 테이블 2개를 다시 조인해서 결과
--기말고사의 성적을 조회할건데 담당교수가 없는 과목도 나올 수 있도록
--과목이름, 담당교수이름, 학생이름, 점수등급 함께 조회 과목번호 순서로 정렬

select *
from score score,
     scgrade scgrade,
     student student
where score.SNO = student.SNO
  and score.RESULT between scgrade.LOSCORE and scgrade.HISCORE;

select *
from course course,
     PROFESSOR professor
where COURSE.PNO(+) = professor.PNO;

select A.result,
       B.cname,
       B.pname,
       A.sname,
       A.grade
from (select *
      from score score,
           scgrade scgrade,
           student student
      where score.SNO = student.SNO
        and score.RESULT between scgrade.LOSCORE and scgrade.HISCORE) A,

     (select *
      from course course,
           PROFESSOR professor
      where COURSE.PNO(+) = professor.PNO) B

where A.CNO (+) = B.CNO
ORDER BY B.cno;



select *
from score score
         join student student
              on score.SNO = student.SNO
         join scgrade scgrade
              on score.RESULT between scgrade.LOSCORE and scgrade.HISCORE;


select *
from course C
         left join professor p
                   on c.PNO = p.PNO;



select A.result, B.CNAME, B.pname, a.sname, A, grade

from (select *
      from score score
               join student student
                    on score.SNO = student.SNO
               join scgrade scgrade
                    on score.RESULT between scgrade.LOSCORE and scgrade.HISCORE) A,


     (select *
      from course C
               left join professor p
                         on c.PNO = p.PNO) B


where A.cno(+) = B.cno;



--2 집합 연산자
--2-1 합집합 연산자
--2000년 이후에 임용된 교수와 2000년 이후에 입사한 직원의 목록조회
--job을 넣으면 컬럼의 갯수가 맞지 않아서 에러생김
select pno as 직원번호, pname 직원이름, HIREDATE 입사일자
from PROFESSOR
where HIREDATE > TO_date('19991231 23:59:59', 'yyyyMMdd HH24:mi:ss')

UNION

select eno
     , ename
     , hdate
from EMP
where HDATE > TO_date('19991231 23:59:59', 'yyyyMMdd HH24:mi:ss');



--차집합 연산자
--성이 제갈이면서 지원업무를 하지 않는 사원의 번호, 사원이름, 업무 조회

select eno, ename, job
from emp
where ename like '제갈%'

MINUS
select ENO, ename, job
from EMP
where job = '지원';

--과목중에서 담당교수가 배정이 안됐거나 담당교수의 정보가 존재하지 않는 과목번호
-------------모르겠따 다시해부자

select c.cno, C.cname
from COURSE C


minus

select c.cno, c.cname
from course c
         join professor p
              on c.pno = p.pno;

---화학과 교수중에 일반화학 수업을 하지 않는 교수들만 조회


select professor.PNO, professor.PNAME
from professor professor
where section = '화학'

minus

select professor2.pno, professor2.PNAME
from professor professor2,
     course course
where professor2.PNO = course.PNO
  and course.CNAME = '일반화학';
-- 이거 왜 별은 안되?


select pno, pname
from PROFESSOR
where section = '화학'

minus

select p.pno, p.pname
from PROFESSOR p
         join course c on p.pno = c.pno
where c.CNAME = '일반화학';


--물리 화학과 학생 중 학점이 3.0 이상인 학생의 학번, 학생이름, 학과, 평점조회
select sno, sname, major, avr
from student
where major in ('물리', '화학')
intersect
select sno, sname, major, avr
from student
where avr >= 3.0;




select sysdate
from dual;

관련글 더보기

댓글 영역