-- 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;
댓글 영역