Database Relational DML SQL
SID Student_name Major Grade_level Age 100 Jones History SID Student_name Major Grade_level Age STUDENT GR 21 150 Park Accounting SO 19 200 250 300 350 400 450 Baker Glass Russel Rye Math SN JR FR 50 41 20 18 24 100 BD445 1 Student_ number ENROLLMENT Class_ name Position_ 150 BA200 200 2 CS250 300 CS150 400 BF410 450 CLASS BA200 M-F9 SC110 Class_name Time Room BD445 MWF3 SC213 BF410 MWF8 CS150 EA304 CS250 MWF12 EB210
STUDENT 테이블에서 SID, Name, Major 출력
STUDENT 테이블에서 Major 만 출력 중복된 값이 모두 출력됨 중복된 값 제거
특정 Row(행)만 선택하기 위한 조건 WHERE절 열을 모두 선택할 경우에는 열 이름 대신 *을 사용
WHERE 절에는 여러 개의 조건이 AND, OR, NOT 을 이용하여 복합적으로 주어질 수 있다.
하나의 속성 값에 대하여 여러 개의 조건이 OR관계일 때 IN을 사용할 수 있다. IN 앞에 NOT을 사용하면 리스트의 값을 제외한 나머지 행을 추출한다.
IN 뒤에 오는 ( )안에는 비교할 값을 나열하는 대신 SELECT문으로 선택할 수 있다. BD445 과목을 수강하는 학생의 이름만 출력 IN 뒤에 오는 SELECT문에 다시 IN이 올 수 있고 이 과정은 얼마든지 반복될 수 있다.
대부분의 DBMS는 COUNT, SUM, AVG, MAX, MIN 등의 Builtin함수를 제공한다.
GROUP BY를 사용하여 같은 속성 값들을 하나의 그룹으로 묶어서 각 그룹에 대하여 Query를 적용할 수 있다. 각 그룹에 대하여 하나씩의 전공명과 각 그룹내의 카운트가 출력됨 GROUP을 선택하는 조건 절은 HAVING을 사용한다. 조건 식은 WHERE절과 같다. 두 개 이상의 행을 가지고 있는 그룹만 선택
여러 개의 Relation(테이블)로부터 데이터를 추출할 수 있다(Joining).
Join된 서로 다른 테이블에 같은 열 이름이 있을 경우에는 열 이름 앞에 테이블 명을 붙여준다(Qualified Name).
Join은 IN절 뒤에 SELECT가 반복되는 Subquery를 대체할 수 있다. 앞에서 IN절을 사용하여 ‘DB445’과목을 수강하는 학생의 이름을 출력했던 Query는 다음의 Joining을 사용하여 똑 같은 결과를 얻을 수 있다. 강의 시간이 ‘MWF3’인 과목을 수강하는 학생의 경우에도 Join을 사용하여 다음과 같이 표현할 수 있다.
EXISTS, NOT EXISTS 절 EXISTS 뒤에 오는 행이 존재하면 True로서 앞의 Select문을 수행 NOT EXISTS 뒤에 오는 행이 존재하지 않으면 앞의 Select문을 수행 다음 Query는 두 과목 이상을 수강하는 학생의 학번을 출력한다. 한 과목만 수강하는 학생의 학번 두 과목 이상 수강하는 학생의 학번
다음 Query는 모든 과목을 수강하는 학생의 이름을 출력한다. 결과: 해당하는 학생이 없음. 다음 Query는 다른 대학원생 하고만 수업을 듣는 대학원생의 이름을 출력한다.
행 추가(Insert) 모든 속성값이 주어진 경우(순서 중요) INSERT INTO ENROLLMENT VLAUES(400, ‘BD445’, 44) 속성의 일부만 값이 주어졌거나 데이터의 순서가 다를 때 INSERT INTO ENROLLMENT(Class_name, Position_number, Student_number) VLAUES(‘BD445’, 44, 400) 속성의 값이 다른 테이블에서 읽은 값으로 주어지는 경우(ㅅㄴ서중요) INSERT INTO JUNIOR SELECT SID, Student_name, Major FROM STUDENT WHERE Grade_level=‘JR’
행 삭제(DELETE) 모든 행을 삭제(빈 테이블) DELETE STUDENT ENROLLMENT테이블에 있으면 이후로 Integrity가 깨지게 됨). DELETE STUDENT WHERE SID=‘100’ IN을 사용하여 삭제 대상의 그룹을 지정할 수 있다. DELETE ENROLLMENT WHERE Student_number IN ( SELECT SID FROM STUDENT WHERE Major=‘Accounting’) DELETE STUDENT WHERE Major=‘Accounting’
수정 (UPDATE) UPDATE ENROLLMENT SET Position_number=44 WHERE Student_number=‘400’ UPDATE ENROLLMENT SET Position_number=MAX(Poistion_number) + 1 WHERE Student_number=‘400’ UPDATE ENROLLMENT SET Position_number=MAX(Poistion_number) + 1, Class_name=‘CS520’ WHERE Student_number=‘400’ AND Class_name=‘CS250’