select distinct T.name
from instructor as T, instructor as S
where T.salary > S.salary and S.dept_name = ’Biology’;
# some 절
- (하나 이상보다 큰) > some 절을 이용
select name
from instructor
where salary > some (select salary
from instructor
where dept_name = ’Biology’);
5 > some (0,5,6) = true
5 < some (0,5) = false
5 = some (0,5) = true
5 <> some (0,5) = true
(= some)은 in 과 같음
(<> some) 은 not in 과 같지 않음
# > all 절
- 생물학과의 각 교수들보다 급여가 많은 모든 교수들의 이름을 구하라
select name
from instructor
where salary > all (select salary
from instructor
where dept name = ’Biology’);
5 > all (0,5,6) = false
5 < all (6,10) = true
5 = all (4,5) = false
5 <> all (4,6) = true
(<> all) 은 not in 과 같음
(= all) 은 in 과 같지 않음
# 빈 릴레이션에 대한 테스트
- exists 구문은 인자의 하위 질의가 비어있지 않을 때 true 리턴
- exists
- not exists
# exists 절
- 2009년 가을 학기와 2010년 봄 학기에 둘 다 있는 수업을 구하라
select course_id
from section as S
where semester = ’Fall’ and year= 2009 and
exists (select *
from section as T
where semester = ’Spring’ and year= 2010
and S.course_id= T.course_id);
- 연관된 하위 질의
- 연관 이름
# not exists 절
- 생물학과에서 제공하는 모든 수업을 수강하는 모든 학생을 구하라
select distinct S.ID, S.name
from student as S
where not exists ( (select course_id
from course
where dept_name = ’Biology’)
except
(select T.course_id
from takes as T
where S.ID = T.ID));
- ( = all )을 사용하여 위의 질의 변경 가능
select distinct student.ID, name
from student, takes
where s.ID= take. ID and course_id = all(select course_id from course
where dept_name= 'Accounting')
# 중복 투플 부재에 대한 테스트 : unique
- unique 절은 하위 질의가 중복된 투플을 가지지 않으면 true.
- 2009년에 많아야 한 번 제공된 모든 수업을 구하라
select T.course_id
from course as T
where unique (select R.course_id
from section as R
where T.course_id=R.course_id and R.year = 2009);
where 1 = (select * from section where year=2009 and section.course_id=co.c_id)
'전공 공부 > 데이터베이스시스템' 카테고리의 다른 글
데이터베이스의 변경 – 삽입 (0) | 2021.01.01 |
---|---|
데이터베이스의 변경 – 삭제 (0) | 2021.01.01 |
중첩 하위 질의 (0) | 2020.12.31 |
SQL (0) | 2020.12.31 |
관계 연산자 (0) | 2020.12.31 |