Database/SQL

[SQL] DML/SELECT (Advanced)

gangintheremark 2021. 10. 15. 05:01
728x90

부속질의

  • select문 안에 포함된 select문
--'C413'과목을 등록한 학생 이름을 검색하라
select sname from STUDENT 
where sno in (select sno from ENROL
                where cno = 'C413');

--학번이 100인 학생과 동일한 학과에 속한 학생을 모두 찾아라
select sname from STUDENT 
where dept = (select dept from STUDENT 
                where sno = 100 );

 

카티션 프로덕트

  • from절에 여러 개의 테이블을 지정하면 카티션 프로덕트 생성
select * from STUDENT, ENROL;

조인

  • Join은 자식테이블의 외래키와 부모테이블의 기본키 사이에서 자주 사용
  • 아무 관계가 없는 테이블의 컬럼들 사이에도 사용될 수는 있음
--STUDENT와 ENROL의 동일한 학번의 내부조인 
select * from STUDENT join ENROL on STUDENT.sno = ENROL=sno; 
select * from STUDENT s join ENROL e on s.sno = e.sno;
select * from STUDENT s, ENROL e where s.sno = e.sno;

자연 조인

  • 중복된 컬럼에 대해 동일조인을 수행하고 중복된 컬럼은 한 번만 출력
--'C413'과목을 수강하는 학생들의 이름을 모두 출력
select sname 
from STUDENT natural join ENROL 
where cno = 'C413';

--'데이터베이스'과목을 수강하는 학생들의 이름을 모두 찾아라
select sname 
from (STUDENT natural join ENROL) join COURSE on ENROL.cno=COURSE.cno 
where cname = '데이터베이스';

--'정기태'학생이 수강한 모든 과목의 중간고사 성적 평균을 구하라
select avg(midterm) from (STUDENT natural join ENROL) 
where sname = '정기태';

외부 조인

  • 조인 조건을 만족하는 행과 조건을 만족시키지 않는 행도 한번씩은 출력
  • left outer join : join 결과 + 조건을 만족하지 못하는 왼쪽 테이블의 행을 한번씩 출력
  • right outer join : join 결과 + 조건을 만족하지 못하는 오른쪽 테이블의 행을 한번씩 출력
  • full outer join : join 결과 + 조건을 만족하지 못하는 양쪽 테이블의 행을 한번씩 출력
insert into STUDENT values (600, '홍길동', 4, 'IT');

--등록한 과목이 전혀 없는 학생들의 이름을 출력하라
select sname 
from STUDENT left join ENROL on STUDENT.sno = ENROL.sno
where cno is null;
728x90