널 (null) 의 처리 널을 검색하는 방법 형식 예 ) takes 테이블에서 아직 학점이 부여되지 않은 학생의 학번을 검색 is null is not null ( 질의 64) select stu_id from takes where grade is null
널의 처리 예 ) takes 테이블에서 학점이 'A+' 가 아닌 학생들의 학번을 검색 grade 필드의 값이 널인 레코드에 대해서는 질의 결과에 포함되지 않음 하지만 count(*) 는 특정 필드가 아닌 레코드 전체에 대한 연산이므로 널의 존재 여부와는 무관함 ( 질의 65) select stu_id from takes where grade <> 'A+'
중첩 질의 (nested query) SQL 문을 다른 SQL 문 안에 중첩하여 사용하는 질의 복잡한 질의를 쉽게 표현할 수 있는 수단을 제공 내부질의 (inner query), 부질의 (subquery) 내부에 포함된 SQL 문 외부질의 (outer query) 부 질의를 내부적으로 갖는 SQL 문 부 질의는 외부 질의의 from 절이나 where 절에 위치 종류 in, not in =some, some, >=some, <>some (some 대신 any 를 사용해도 됨 ) =all, all, >=all, <>all exists, not exists
IN, NOT IN 예 ) '301 호 ' 강의실에서 개설된 강좌의 과목명을 출력 부 질의 키워드 in 뒤에 나오는 SQL 문으로서 class 테이블에서 강의실이 '301 호 ' 인 교과목 번호를 검색 외부 질의 course 테이블에서 course_id 필드의 값이 부 질의의 검색 결과에 포함되는 경우 (in) 에만 과목명을 출력 ( 질의 66) select title from course where course_id in (select distinct course_id from class where classroom = '301 호 ')
IN, NOT IN 동일한 표현 ( 질의 67) select distinct title from course c1, class c2 where c1.course_id = c2.course_id and classroom = '301 호 '
IN, NOT IN 예 ) 2012 년 2 학기에 개설되지 않은 과목명을 검색 ( 질의 68) select title from course where course_id not in (select distinct course_id from class where year = 2012 and semester = 2)
SOME, ALL =some 지정된 필드의 값이 부 질의 검색 결과에 존재하는 임의의 값과 같은지를 나 타낼 때 사용 in 과 같은 의미 <=some 부 질의의 검색 결과에 존재하는 임의의 값보다 작거나 같은지를 나타낼 때 사용 =all 지정된 필드의 값이 부 질의 검색 결과에 포함된 모든 값과 같은지를 판단 <=all 지정된 필드의 값이 부 질의 검색 결과에 포함된 모든 값보다 작거나 같은지 를 판단
SOME, ALL 예 ) 가장 많은 수강 인원을 가진 강좌를 검색 ( 질의 69) select c1.course_id, title, year, semester, prof_id from class c1, course c2 where c1.course_id = c2.course_id and enroll >= all (select enroll from class)
EXISTS, NOT EXIST 부 질의 검색 결과에 최소한 하나 이상의 레코드가 존재하는지의 여부를 표현 exists 최소한 한 개의 레코드가 존재하면 참이 되고 그렇지 않으면 거짓 not exists 부 질의의 결과에 레코드가 하나도 없으면 참이 되고 하나라도 존재하면 거 짓 예 ) '301 호 ' 강의실에서 개설된 강좌의 과목명을 출력 ( 질의 70) select title fromcourse where exists (select * from class where classroom = '301 호 ' and course.course_id = class.course_id)
EXISTS, NOT EXISTS
EXISTS, NOT EXIST ( 질의 68) 을 not exists 로 표현 가능 ( 질의 71) select title from course where not exists (select * from class where year = 2012 and semester = 2 and course.course_id = class.course_id)
뷰 (view) 기존 테이블들로부터 생성되는 가상의 테이블 테이블처럼 물리적으로 생성되는 것이 아니라 기존의 테이블들을 조합 하여 사용자에게 실제로 존재하는 테이블인 것처럼 보이게 함 기능 특정 사용자에게 테이블의 내용 중 일부를 숨길 수 있기 때문에 보안의 효과 복잡한 질의의 결과를 뷰로 만들어서 사용하게 되면 질의를 간단히 표현 할 수 있음
뷰 생성 생성된 뷰는 테이블과 동등하게 사용 형식 뷰 생성에 사용될 select 문 create view as
뷰 생성 예 ) takes 테이블에서 grade 필드를 제외한 나머지 필드만으로 구성된 뷰 를 생성 ( 질의 72) create view v_takes as select stu_id, class_id from takes
뷰 생성 예 ) student 테이블에서 컴퓨터공학과 학생들 레코드만 추출하여 뷰를 생성 ( 질의 73) create view cs_student as select s.stu_id, s.resident_id, s.name, s.year, s.address, s.dept_id from student s, department d where s.dept_id = d.dept_id and d.dept_name = ' 컴퓨터공학과 '
뷰 사용 예 ) v_takes 뷰에 대해 select 문을 실행
뷰 사용 뷰에 대해서 insert, update, delete 문을 실행 예 ) v_takes 뷰에 대해 레코드를 삽입 v_takes 뷰에 포함되지 않은 grade 필드에는 널이 삽입 ( 질의 74) insert into v_takes values (' ', 'C101-01')
뷰 사용 형식 drop view