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
'Database > SQL' 카테고리의 다른 글
[SQL] 저장 프로시저(SP) (0) | 2021.12.05 |
---|---|
[SQL] View (0) | 2021.10.17 |
[SQL] DML/INSERT, UPDATE, DELETE (0) | 2021.10.11 |
[SQL] DML/SELECT (Basic) (0) | 2021.10.11 |
[SQL] DDL (0) | 2021.10.11 |