Presentation is loading. Please wait.

Presentation is loading. Please wait.

질의어와 SQL 기본 SQL 고급 SQL 데이타의 수정 데이타 정의 언어 내장 SQL

Similar presentations


Presentation on theme: "질의어와 SQL 기본 SQL 고급 SQL 데이타의 수정 데이타 정의 언어 내장 SQL"— Presentation transcript:

1 질의어와 SQL 기본 SQL 고급 SQL 데이타의 수정 데이타 정의 언어 내장 SQL

2 3.1 질의어와 SQL Structured Query Language
IBM의 System R project에서 개발된 Sequel이란 언어에 기초 표준 질의어로 채택되어 널리 쓰이는 관계형 질의언어 현재 대부분의 관계형 DBMS가 SQL2를 지원 현재 객체지향 DBMS를 지원하기 위해 SQL3가 개발되었으나 일부에서만 지원 본 교재에서는 SQL2를 기준으로 함 관계 대수나 관계 해석은 확실한 이론적 배경을 제공하나 상용으로 쓰이기에는 어렵고 적절치 않음 SQL은 자연어와 유사하고 절차적 언어이므로 사용하기 용이함 Copyright  2002 by S.-g. Lee and J.-y. Chang

3 DDL & DML SQL은 크게 DDL과 DML로 구성됨
데이터 정의 언어 (Data Definition Language: DDL) 데이타 저장 구조를 명시하는 언어 릴레이션의 스키마 정의, 수정, 삭제 인덱스(index) 생성, 삭제 데이터 조작 언어 (Data Manipulation Language: DML) 사용자가 데이타를 접근하고 조작할 수 있게 하는 언어 튜플의 삽입(insert), 삭제(delete), 수정(update) Copyright  2002 by S.-g. Lee and J.-y. Chang

4 3.2 기본 SQL 기본 구조 SELECT A1, A 2, …, A n
FROM r1, r 2, …, r n WHERE P - A1, A2, …, An : 추출될 속성 리스트 - r1, r 2, …, r n : 릴레이션 리스트 - P : 검색되는 튜플들에 대한 조건 이 질의어는 다음과 같은 관계 대수와 동일한 의미를 가짐.  A1, A2, ..., An(P (r1 x r2 x x rm)) Copyright  2002 by S.-g. Lee and J.-y. Chang

5 SELECT 절 학생 릴레이션에서 모든 학생의 주소를 추출하는 SQL SELECT 주소 FROM 학생 왼쪽과 동일한 질의
: 중복 제거 (DISTINCT) SELECT DISTINCT 주소 FROM 학생 Copyright  2002 by S.-g. Lee and J.-y. Chang

6 SELECT절에는 속성 이름 이외에 수식도 가능함
모든 속성을 추출할 때에는 *를 사용 예) 학생 릴레이션에서 모든 속성을 추출하는 질의 SELECT * FROM 학생 SELECT절에는 속성 이름 이외에 수식도 가능함 예) 교수 릴레이션으로 부터 이름과 재직년도를 찾는 질의 SELECT 이름, 임용년도 FROM 교수 Copyright  2002 by S.-g. Lee and J.-y. Chang

7 FROM절에 두개 이상의 릴레이션이 포함된 질의(조인 질의)
예) 학생들의 학번과 그들의 소속학과를 검색하는 질의 SELECT 학생.학번, 학과.학과명 FROM 학생, 학과 WHERE 학생.학과번호 = 학과.학과번호 같은 이름의 속성이 두개 이상의 릴레이션에 나타나면 이를 구별하기 위해 “릴레이션.속성”과 같이 표현함 위의 질의는 다음의 관계 대수의 조인과 같은 의미를 가짐.  학생.학번, 학과.학과명 (학생  학생.학과번호 = 학과.학과번호 학과) Copyright  2002 by S.-g. Lee and J.-y. Chang

8 Copyright  2002 by S.-g. Lee and J.-y. Chang

9 예) 전산과 2학년 학생들의 학번을 검색하는 질의 SELECT 학생.학번 FROM 학생, 학과
WHERE 학생.학과번호 = 학과.학과번호 and 학생.학년 = 2 and 학과.학과명 = “전산과” Copyright  2002 by S.-g. Lee and J.-y. Chang

10 튜플의 순서 지정(ORDER BY) ORDER BY 출력되는 튜플의 순서를 제어 ORDER BY A1, A 2, …, A n
예)학생 릴레이션에서 학과번호가 302인 학생의 이름과 학번을 찾는데 결과 릴레이션에 대해 이름의 오름차순 (ASCENDING)으로, 같은 이름에 대해서는 학번의 내림차순 (DESCENDING)으로 정렬 SELECT 이름, 학번 FROM 학생 WHERE 학생.학과번호 = 302 ORDER BY 이름 ASC, 학번 DESC 주의: ORDER BY절에 나타나는 속성은 반드시 SELECT절에 명시되어야 함 Copyright  2002 by S.-g. Lee and J.-y. Chang

11 재명명 연산 속성에 대한 재명명(select절의 속성에 새로운 이름 부여) 릴레이션에 대한 재명명
SELECT 이름 AS 교수이름, 임용년도 AS 재직년도 FROM 교수 릴레이션에 대한 재명명 FROM절의 릴레이션 이름을 재명명 예) 최성희 교수가 강의하는 과목의 교과목번호를 검색하는 질의 SELECT DISTINCT S.교과목번호 FROM 교수 AS P, 강좌 AS S WHERE P.이름 = ‘최성희’ and P.교수번호 = S.교수번호 P나 S같이 재명명된 이름을 별명(alias) or 튜플변수(tuple variable)라고함 Copyright  2002 by S.-g. Lee and J.-y. Chang

12 재명명 연산 릴레이션에 대한 재명명의 다른 예 고희석 교수보다 먼저 임용된 교수에 대한 검색 교수 릴레이션 간의 조인이 필요
이때는 재명명이 필수적 SELECT T.이름 FROM 교수 T, 교수 S WHERE T.임용년도 < S.임용년도 and S.이름 = “고희석” Copyright  2002 by S.-g. Lee and J.-y. Chang

13 문자열 비교 WHERE 절에서 문자명을 비교하는 기능을 제공 두개의 특수문자 사용 문자열 패턴의 예
속성이름 LIKE 문자열패턴 속성이름이 문자열패턴에 명시된 형태를 갖는지를 나타냄 두개의 특수문자 사용 ‘%’ : 임의의 개수의 문자열을 대체한다. ‘_’ : 임의의 한 개 문자로 대체한다. 문자열 패턴의 예 “%서울%” : “서울”이라는 단어가 포함된 문자열  “서울%” : “서울”로 시작되는 문자열  “_ _ _” : 정확히 세 문자로 구성된 문자열  “_ _ _%” : 최소한 세 문자 이상으로 구성된 문자열 Copyright  2002 by S.-g. Lee and J.-y. Chang

14 문자열 비교 예) 김씨 성을 가진 학생들의 이름을 찾는 질의 SELECT 이름 FROM 학생 WHERE 이름 LIKE “김%”
예)남학생을 찾는 질의 SELECT 이름 WHERE 주민등록번호 LIKE “%-1%” 만약 ‘%’나 ‘_’가 포함된 문자열을 나타내려면 앞에 \를 사용함(escape문자) 예) “25\%%” : “25%”로 시작되는 문자열 Copyright  2002 by S.-g. Lee and J.-y. Chang

15 3.3 고급 SQL COUNT : 값들의 개수 집계 함수를 이용한 SQL SUM : 값들의 합 AVG : 평균값
Aggregate function(집계 함수) : 속성 값들로부터 통계적 연산 등을 통해 하나의 값을 계산하는 기능이 요구될 때 이용. COUNT : 값들의 개수 SUM : 값들의 합 AVG : 평균값 MAX : 가장 큰 값 MIN : 가장 작은 값 Copyright  2002 by S.-g. Lee and J.-y. Chang

16 SELECT COUNT(DISTINCT강의실)
학번이 “ ”인 학생이 수강한 과목의 총 학점 수가 얼마인지 나타내는 질의 SELECT SUM(교과목.학점) FROM 수강, 교과목 WHERE 수강.학번 = “ ” and 수강.교과목번호 = 교과목.교과목번호 2001년 2학기에 개설된 강좌에 사용되는 강의실은 모두 몇 개인가를 나타내는 질의 SELECT COUNT(DISTINCT강의실) FROM 강좌 WHERE 연도 = 2001 and 학기 = 2 여기서 DISTINCT를 사용하지 않으면 중복된 강의실도 모두 포함되므로 이를 제거하려면 DISTINCT를 반드시 넣어야 됨 Copyright  2002 by S.-g. Lee and J.-y. Chang

17 SELECT COUNT(*) 교과목번호가 “302.551”인 강좌가 몇 번 개설되었는지를 찾는 질의 FROM 강좌
WHERE 교과목번호 = “ ” *는 COUNT의 대상이 튜플임을 의미함(속성의 수가 아니라 튜플의 수) 중복된 튜플도 포함됨 Copyright  2002 by S.-g. Lee and J.-y. Chang

18 GROUP BY 절 튜플들을 여러 그룹으로 나누어 그룹별로 집계함수를 적용하는 방법
예) 2001년 2학기에 각 학생이 수강하는 총학점 수를 구하는 질의 2001년 2학기에 해당하는 튜플들에 대해 각 학생별로 그룹화하여 각 그룹에 대해서 학점수를 더함 GROUP BY절을 이용하여 그룹화합 GROUP BY A1, A2, …, An SELECT 수강.학번, SUM(교과목.학점) FROM 수강, 교과목 WHERE 수강.교과목번호 = 교과목.교과목번호 and 수강.연도 = 2001 and 수강.학기 = 2 GROUP BY 수강.학번 Copyright  2002 by S.-g. Lee and J.-y. Chang

19 최종 결과 학번별로 그룹화된 중간 결과 Copyright  2002 by S.-g. Lee and J.-y. Chang

20 Note : 집계 함수와 GROUP BY를 함께 사용할 때 SELECT절에 나타나는 속성들은 GROUP BY에 반드시 나타나야 한다.
다음의 질의는 잘못된 것임 SELECT 교과목번호, COUNT(강의실) FROM 강좌 WHERE 연도 = 1997 and 학기 = 2 Copyright  2002 by S.-g. Lee and J.-y. Chang

21 HAVING 절 원하는 그룹에 대한 결과를 얻고 싶을 때 HAVING절을 이용하여 그룹에 대한 조건을 명시할 수 있음
예) 두 번 이상 강좌가 개설된 교과목에 대해서 교과목 번호과 지금까지의 수강인원의 합을 구하는 질의 SELECT 교과목번호, SUM(수강인원) FROM 강좌 GROUP BY 교과목번호 HAVING COUNT(*) >= 2 HAVING과 WHERE절은 모두 조건을 명시하지만, WHERE절 - 튜플들에 대한 조건을 명시, HAVING절 - 항상 GROUP BY와 같이 사용하며 각 GROUP에 대한 조건을 명시한다는 차이가 있음. Copyright  2002 by S.-g. Lee and J.-y. Chang

22 중첩 질의: SQL문을 다른 SQL문 내에 중첩하여 표현하는 질의
중첩질의 (nested query) 중첩 질의: SQL문을 다른 SQL문 내에 중첩하여 표현하는 질의 부질의(subquery) 또는 내부 질의(inner query) : 중첩 질의에서 내포된 질 외부 질의(outer query) : 부질의를 포함하는 외부의 질의 Copyright  2002 by S.-g. Lee and J.-y. Chang

23 질의 예 “56-218”인 강의실에서 개설된 강좌의 교과목명을 찾는 질의
SELECT 교과목명 FROM 교과목 WHERE 교과목번호 IN ( SELECT DISTINCT 교과목번호 FROM 강좌 WHERE 강의실 = “56-218” ) 부질의의 결과: 강의실이 인 교과목번호의 집합 외부질의에서 각 교과목 튜플에 대해서 각 튜플의 교과목번호가 부질의 결과에 속하는지를 판단 IN 은 다음에 상수의 집합도 표현 가능 ( “ ”, “ ”, ” ) Copyright  2002 by S.-g. Lee and J.-y. Chang

24 중첩질의는 다음과 같이 중첩되지않은 질의로 표현 가능
질의 예 중첩질의는 다음과 같이 중첩되지않은 질의로 표현 가능 SELECT DISTINCT 교과목명 FROM 교과목, 강좌 WHERE 교과목.교과목번호 = 강좌.교과목번호 and 강의실=“56-218” Copyright  2002 by S.-g. Lee and J.-y. Chang

25 질의 예 2001년 2학기에 개설되지 않은 교과목명을 찾는 질의 SELECT 교과목명 FROM 교과목
WHERE 교과목번호 NOT IN ( SELECT DISTINCT 교과목번호 FROM 강좌 WHERE 연도 = 2001 and 학기 = 2 ) Copyright  2002 by S.-g. Lee and J.-y. Chang

26 예) 가장 많은 수강생을 가진 강좌를 구하는 질의
하나의 값과 집합을 비교하는 연산자들 IN, NOT IN,  =SOME, <= SOME, <SOME, >SOME, >=SOME, <>SOME, =ALL, <=ALL, <ALL, >ALL, >=ALL, <>ALL SOME 대신에 ANY를 사용해도 무방 SOME: 집합내 임의의 값과 비교. ALL: 집합내 모든 값과 비교 예) =SOME: 집합내 임의의 값과 같은가를 나타냄, IN과 같은 의미 예) 가장 많은 수강생을 가진 강좌를 구하는 질의 SELECT 교과목번호, 연도, 학기, 교수번호 FROM 강좌 WHERE 수강인원 >= ALL (SELECT 수강인원 FROM 강좌) Copyright  2002 by S.-g. Lee and J.-y. Chang

27 중첩 질의 중에 질의의 결과가 빈(empty) 릴레이션인지 아니면 최소한 하나 이상의 튜플이 존재하는지를 조건으로 표현
EXISTS and NOT EXISTS 중첩 질의 중에 질의의 결과가 빈(empty) 릴레이션인지 아니면 최소한 하나 이상의 튜플이 존재하는지를 조건으로 표현 EXISTS : 최소한 한 개의 튜플이 존재하면 ‘참’ otherwise ‘거짓’ NOT EXISTS : 결과가 빈 릴레이션이면 ‘참’ otherwise ‘거짓’ 예) 교과목 릴레이션의 각 튜플의 교과목번호와 같은 값을 갖고 강의실이 “56-218”인 강좌 릴레이션의 튜플이 존재하면 해당 교과목 릴레이션의 튜플을 최종 결과로 선택하는 질의 SELECT 교과목명 FROM 교과목 WHERE EXISTS ( SELECT * FROM 강좌 WHERE 강의실 = “56-218” and 교과목.교과목번호=강좌.교과목번호) Copyright  2002 by S.-g. Lee and J.-y. Chang

28 2001년 2학기에 개설되지 않은 교과목명을 출력하는 질의
SELECT 교과목명 FROM 교과목 WHERE NOT EXISTS ( SELECT * FROM 강좌 WHERE 연도 = 2001 and 학기 = 2 and 교과목.교과목번호=강좌.교과목번호) Copyright  2002 by S.-g. Lee and J.-y. Chang

29 관계대수의 합집합, 교집합, 차집합과 같은 기능 제공 피연산자는 호환가능해야 함 종류
집합 연산 관계대수의 합집합, 교집합, 차집합과 같은 기능 제공 피연산자는 호환가능해야 함 종류 Union / Intersect / Except 자동 중복제거 Union All / Intersect All / Except All 중복 제거 안됨 Copyright  2002 by S.-g. Lee and J.-y. Chang

30 예) 교수와 학생들에 대한 이름과 주소를 찾는 질의 (SELECT 이름, 주소 FROM 교수 ) UNION
Copyright  2002 by S.-g. Lee and J.-y. Chang

31 전산개론을 수강한 전산과 학생의 학번을 찾는 SQL
( SELECT DISTINCT 학생.학번 FROM 학생, 학과 WHERE 학과.학과명 = “전산과” and 학과.학과번호 = 학생.학과번호) INTERSECT ( SELECT DISTINCT 수강.학번 FROM 교과목, 수강 WHERE 교과목명 = “전산개론” and 교과목.교과목번호 = 수강.교과목번호) Copyright  2002 by S.-g. Lee and J.-y. Chang

32 화일처리 과목을 수강하지 않은 전산과 2학년 학생을 찾는 질의
(SELECT DISTINCT 학생.학번 FROM 학과, 학생 WHERE 학과.학과명 = ‘전산과’ and 학과.학과번호 = 학생.학과번호 and 학생.학년 = 2) EXCEPT ( SELECT DISTINCT 수강.학번 FROM 교과목, 수강 WHERE 교과목명 = “화일처리” and 교과목.교과목번호 = 수강.교과목번호 ) 동일한 질의 SELECT DISTINCT 학생.학번 FROM 학과, 학생, 수강, 교과목 WHERE 학과.학과명 = “전산과” and 학과.학과번호 = 학생.학과번호 and 학생.학번 = 수강.학번 and 수강.교과목번호 = 교과목.교과목번호 and 교과목.교과목명 = “전산개론” Copyright  2002 by S.-g. Lee and J.-y. Chang

33 화일처리 과목을 수강하지 않은 전산과 2학년 학생을 찾는 질의
( SELECT DISTINCT 학생.학번 FROM 학과, 학생 WHERE 학과.학과명 = ‘전산과’ and 학과.학과번호 = 학생.학과번호 and 학생.학년 = 2 ) EXCEPT ( SELECT DISTINCT 수강.학번 FROM 교과목, 수강 WHERE 교과목명 = “화일처리” and 교과목.교과목번호 = 수강.교과목번호 ) Copyright  2002 by S.-g. Lee and J.-y. Chang

34 널 값의 처리 속성의 값이 널(NULL)인 조건을 명시할 수 있는 방법 아직 성적이 부여되지 않은 학생을 찾는 질의
‘속성 IS NULL’ : 속성 값이 널인가를 나타내는 조건 ‘속성 IS NOT NULL’ :Otherwise 아직 성적이 부여되지 않은 학생을 찾는 질의 SELECT 학번 FROM 수강 WHERE 성적 IS NULL 성적이 ‘A+’가 아닌 학생을 찾는 질의 SELECT 학번 WHERE 성적 <> “A+” 성적이 NULL인 튜플은 결과에 포함되는가? Copyright  2002 by S.-g. Lee and J.-y. Chang

35 널 값과 집계함수 수강 릴레이션에서 성적의 수를 세는 질의 SELECT COUNT(성적) FROM 수강
SUM, MIN, MAX, AVG도 널은 무시하고 계산 COUNT(*)는 특정 속성에 대한 연산이 아니라 튜플 전체에 대한 연산이므로 널 값의 존재 여부와는 무관 Copyright  2002 by S.-g. Lee and J.-y. Chang

36 3.4 데이터의 수정 데이타에 대한 검색을 지원하는 SQL은 database 상태를 변화시키지 않음.
SQL의 DML중에서 튜플들을 삽입, 삭제, 수정하는 명령문 -> database의 상태가 변함. - 삽입(INSERT) - 삭제(DELETE) - 수정(UPDATE) Copyright  2002 by S.-g. Lee and J.-y. Chang

37 삽입 형식 예) 수강 릴레이션에 하나의 튜플을 삽입 INSERT INTO 수강
VALUES (“ ”, “ ”, 2002, 1, “A+”) INSERT INTO 수강 (학번, 교과목번호, 연도, 학기, 성적) INSERT INTO 수강 (성적, 교과목번호, 년도, 학기, 학번) VALUES (“A+”, “ ”, 2002, 1, “ ”) Copyright  2002 by S.-g. Lee and J.-y. Chang

38 수강 릴레이션에 성적 속성이 결정되지 않은 튜플 삽입 INSERT INTO 수강 (학번, 교과목번호, 연도, 학기, 성적)
수강 릴레이션에 성적 속성이 결정되지 않은 튜플 삽입 INSERT INTO 수강 (학번, 교과목번호, 연도, 학기, 성적) VALUES (“ ”, “ ”, 2002, 1, NULL) INSERT INTO 수강 (학번, 교과목번호, 연도, 학기) VALUES (“ ”, “ ”, 2002, 1) Copyright  2002 by S.-g. Lee and J.-y. Chang

39 학생 릴레이션에서 2학년 학생들의 학번, 이름, 주소를 검색해서 그 결과를 이학년생 릴레이션에 삽입하는 명령문
학생 릴레이션에서 2학년 학생들의 학번, 이름, 주소를 검색해서 그 결과를 이학년생 릴레이션에 삽입하는 명령문 릴레이션 가정 이학년생 (학번, 이름, 주소) INSERT INTO 이학년생(학번, 이름, 주소) SELECT 학번, 이름, 주소 FROM 학생 WHERE 학년 = 2 - 단, SELECT절에 명시된 속성들의 도메인과 이학년생 릴레이션의 속성에 대한 도메인이 일치해야 함 Copyright  2002 by S.-g. Lee and J.-y. Chang

40 삭제 형식 예) 강좌 릴레이션의 모든 튜플을 삭제 예) 강좌 릴레이션에서 화일처리에 대한 강좌들을 삭제하라는 명령문
DELETE FROM 강좌 단, 튜플들이 모두 삭제된다 하더라도 릴레이션은 삭제되지 않고 남아 빈 릴레이션이 됨 예) 강좌 릴레이션에서 화일처리에 대한 강좌들을 삭제하라는 명령문 DELETE FROM 강좌 WHERE 교과목번호 IN (SELECT 교과목번호 FROM 교과목 WHERE 교과목명 = “화일처리”) 예) 2001년에 개설된 강좌들을 삭제 DELETE FROM 강좌 WHERE 연도 = 2001 Copyright  2002 by S.-g. Lee and J.-y. Chang

41 갱신 튜플들의 속성값을 변경 예) 모든 학생들의 학년을 하나씩 증가 UPDATE 학생 SET절
모든 튜플들을 변경하거나 WHERE절을 이용하여 특정 조건에 맞는 튜플만을 변경 예) 모든 학생들의 학년을 하나씩 증가 UPDATE 학생 SET 학년 = 학년 + 1 SET절 SET 속성1=산술식1, …., 속성n = 산술식n 예) 교수 릴레이션의 모든 튜플에 대해서 학과번호를 303으로, 직위를 ‘교수’로 변경 UPDATE 교수 SET 학과 = 303, 직위 = “교수” Copyright  2002 by S.-g. Lee and J.-y. Chang

42 예) 2002년 1학기에 개설된 전산개론 강좌의 강의실을 “56-218”로 변경
예) 학과번호가 302인 학생들의 학년을 1씩 증가 UPDATE 학생 SET 학년 = 학년 + 1 WHERE 학과번호 = 302 예) 2002년 1학기에 개설된 전산개론 강좌의 강의실을 “56-218”로 변경 UPDATE 강좌 SET 강의실 = “56-218” WHERE 연도 = 2002 and 학기 = 1 and 교과목번호 IN ( SELECT 교과목번호 FROM 교과목 WHERE 교과목명 = “전산개론”) Copyright  2002 by S.-g. Lee and J.-y. Chang

43 3.5 데이터 정의 언어 DDL(Data Definition Language) 생성 : CREATE 삭제 : DROP
릴레이션을 생성, 삭제, 변경하는 명령어로 구성 생성 : CREATE 삭제 : DROP 변경 : ALTER Copyright  2002 by S.-g. Lee and J.-y. Chang

44 릴레이션의 생성 형식 도메인 타입의 종류 Copyright  2002 by S.-g. Lee and J.-y. Chang

45 예) 학과 릴레이션을 생성하는 명령문 CREATE TABLE 학과 (학과번호 int, 학과명 varchar(20),
Copyright  2002 by S.-g. Lee and J.-y. Chang

46 예) 학생 릴레이션을 생성하는 명령문 학번과 주민등록번호, 학과번호 속성에는 널 값을 허용하지 않음.
학번은 기본 키로 정의되었으며 학과번호는 학과 릴레이션을 참조하는 외래 키로 정의 CREATE TABLE 학생 (학번 char(9) NOT NULL, 주민등록번호 char(14) NOT NULL, 이름 varchar(30), 학과번호 int NOT NULL, 주소 varchar(50), 전화번호 char(14), 학년 int, PRIMARY KEY (학번), FOREIGN KEY (학과번호) REFERENCES 학과)  Copyright  2002 by S.-g. Lee and J.-y. Chang

47 예제 데이타베이스의 정의 Copyright  2002 by S.-g. Lee and J.-y. Chang

48 Copyright  2002 by S.-g. Lee and J.-y. Chang

49 Copyright  2002 by S.-g. Lee and J.-y. Chang

50 릴레이션의 삭제 학생 릴레이션을 제거하는 명령문 DROP TABLE 학생
- 학생 릴레이션에 저장된 튜플 뿐만 아니라 학생 릴레이션 스키마 자체가 데이타베이스에서 삭제됨. Copyright  2002 by S.-g. Lee and J.-y. Chang

51 릴레이션의 수정 릴레이션에서 정의된 속성을 추가하거나 삭제할 경우에 사용
속성이 추가될 경우에는 기존의 데이타는 변경되지 않고 추가된 속성에 대한 값들은 모두 널 값이 할당 예) 학생 릴레이션에 나이 속성을 추가하려면 다음과 같이 추가될 속성 이름(나이)과 속성의 도메인(int)을 명령문에 표현 ALTER TABLE 학생 ADD 나이 int 예) 학생 릴레이션에서 주민등록 번호 속성을 제거 ALTER TABLE 학생 DROP 주민등록번호 Copyright  2002 by S.-g. Lee and J.-y. Chang

52 3.6 내장 SQL 일반 프로그램 언어를 이용한 데이터베이스 접근 필요 내장 SQL(embedded SQL)
일반 프로그램 언어를 이용한 데이터베이스 접근 필요 SQL은 언어가 제공하는 순환문, 치환문과 같은 프로그램 언어의 비선언적 구성 요소를 갖추고 있지 않음. 보고서 작성, 그래픽 사용자 환경과 같은 사용자 인터페이스 구현을 위해서는 프로그래밍 언어의 도움이 절대적으로 필요 내장 SQL(embedded SQL) SQL을 내장한 프로그램 언어(호스트 언어(host language))로 작성된 프로그램이 데이타베이스에 대한 연산 수행 전처리기(preprocessor) : precompiler 호스트 언어를 컴파일하기 전에 내장 SQL문을 컴파일이 가능한 함수 호출 등으로 변환 일반적으로 프로그램 언어는 집합을 다루는 변수를 제공하지 않음. 그러나 SQL의 결과는 집합 따라서 내장 SQL은 실행 결과를 한번에 하나의 튜플 씩 처리할 수있는 기능을 제공 (Cursor 개념) Copyright  2002 by S.-g. Lee and J.-y. Chang

53 커서: 결과 릴레이션의 튜플들을 하나씩 접근하기 위한 포인터 역할 호스트 언어의 변수 사용 - 변수이름 앞에 콜론(:)을 사용
형식 EXEC SQL 내장 SQL 명령문 ; 커서: 결과 릴레이션의 튜플들을 하나씩 접근하기 위한 포인터 역할 호스트 언어의 변수 사용 - 변수이름 앞에 콜론(:)을 사용 예) EXEC SQL DECLARE c COUSOR FOR SELECT 이름, 학번 FROM 학생 WHERE 학생.학과번호 = :dept_num ; CURSOR EXEC SQL OPEN c ; EXEC SQL FETCH c INTO :name :num ; EXEC SQL CLOSE c ; Copyright  2002 by S.-g. Lee and J.-y. Chang

54 Copyright  2002 by S.-g. Lee and J.-y. Chang

55 Copyright  2002 by S.-g. Lee and J.-y. Chang

56 내장된 SQL 프로그램 처리 절차 Copyright  2002 by S.-g. Lee and J.-y. Chang


Download ppt "질의어와 SQL 기본 SQL 고급 SQL 데이타의 수정 데이타 정의 언어 내장 SQL"

Similar presentations


Ads by Google