관계데이터모델에서지원되는두가지정형적인언어 SQL 관계해석 (relational calculus) 원하는데이터만명시하고질의를어떻게수행할것인가는명시하지않는선언적인언어 관계대수 (relational algebra) 어떻게질의를수행할것인가를명시하는절차적인어 관계대수는상용관계 DBMS들에서널리사용되는 SQL의이론적인기초 관계대수는 SQL을구현하고최적화하기위해 DBMS의내부언어로서도사용됨 상용관계 DBMS들의사실상의표준질의어인 SQL을이해하고사용할수있는능력은매우중요함 사용자는 SQL을사용하여관계데이터베이스에릴레이션을정의하고, 관계데이터베이스에서정보를검색하고, 관계데이터베이스를갱신하며, 여러가지무결성제약조건들을명시할수있음 2
4.1 관계대수 관계대수 기존의릴레이션들로부터새로운릴레이션을생성함 릴레이션이나관계대수식 ( 이것의결과도릴레이션임 ) 에연산자들을적용하여보다복잡한관계대수식을점차적으로만들수있음 기본적인연산자들의집합으로이루어짐 산술연산자와유사하게단일릴레이션이나두개의릴레이션을입력으로받아하나의결과릴레이션을생성함 결과릴레이션은또다른관계연산자의입력으로사용될수있음 3
4.1 관계대수 ( 계속 ) 4
4.1 관계대수 ( 계속 ) 5
4.1 관계대수 ( 계속 ) 6
4.1 관계대수 ( 계속 ) 실렉션연산자 한릴레이션에서실렉션조건 (selection condition) 을만족하는투플들의부분집합을생성함 단항연산자 결과릴레이션의차수는입력릴레이션의차수와같음 결과릴레이션의카디날리티는항상원래릴레이션의카디날리티보다작거나같음 실렉션조건을프레디키트 (predicate) 라고도함 실렉션조건은일반적으로릴레이션의임의의애트리뷰트와상수, =, <>, <=, <, >=, > 등의비교연산자, AND, OR, NOT 등의부울연산자를포함할수있음 7
4.1 관계대수 ( 계속 ) 실렉션연산자 ( 계속 ) 8
4.1 관계대수 ( 계속 ) 프로젝션연산자 한릴레이션의애트리뷰트들의부분집합을구함 결과로생성되는릴레이션은 < 애트리뷰트리스트 > 에명시된애트리뷰트들만가짐 실렉션의결과릴레이션에는중복투플이존재할수없지만, 프로젝션연산의결과릴레이션에는중복된투플들이존재할수있음 9
4.1 관계대수 ( 계속 ) 10
4.1 관계대수 ( 계속 ) 11
4.1 관계대수 ( 계속 ) 집합연산자 릴레이션이투플들의집합이기때문에기존의집합연산이릴레이션에적용됨 세가지집합연산자 : 합집합, 교집합, 차집합연산자 집합연산자의입력으로사용되는두개의릴레이션은합집합호환 (union compatible) 이어야함 이항연산자 합집합호환 두릴레이션 R1(A1, A2,..., An) 과 R2(B1, B2,..., Bm) 이합집합호환일 필요충분조건은 n=m 이고, 모든 1<=i<=n 에대해 domain(ai)=domain(bi) 12
4.1 관계대수 ( 계속 ) 13
4.1 관계대수 ( 계속 ) 합집합연산자 두릴레이션 R과 S의합집합 R S는 R 또는 S에있거나 R과 S 모두에속한투플들로이루어진릴레이션 결과릴레이션에서중복된투플들은제외됨 결과릴레이션의차수는 R 또는 S의차수와같으며, 결과릴레이션의애트리뷰트이름들은 R 의애트리뷰트들의이름과같거나 S 의애트리뷰트들의이름과같음 14
4.1 관계대수 ( 계속 ) 15
4.1 관계대수 ( 계속 ) 16
4.1 관계대수 ( 계속 ) 교집합연산자 두릴레이션 R과 S의교집합 R S는 R과 S 모두에속한투플들로이루어진릴레이션 결과릴레이션의차수는 R 또는 S의차수와같으며, 결과릴레이션의애트리뷰트이름들은 R 의애트리뷰트들의이름과같거나 S 의애트리뷰트들의이름과같음 17
4.1 관계대수 ( 계속 ) 18
4.1 관계대수 ( 계속 ) 19
4.1 관계대수 ( 계속 ) 차집합연산자 두릴레이션 R과 S의차집합 R - S는 R에는속하지만 S에는속하지않은투플들로이루어진릴레이션 결과릴레이션의차수는 R 또는 S의차수와같으며, 결과릴레이션의애트리뷰트이름들은 R 의애트리뷰트들의이름과같거나 S 의애트리뷰트들의이름과같음 20
4.1 관계대수 ( 계속 ) 21
4.1 관계대수 ( 계속 ) 22
4.1 관계대수 ( 계속 ) 카티션곱연산자 카디날리티가 i인릴레이션 R(A1, A2,..., An) 과카디날리티가 j인릴레이션 S(B1, B2,..., Bm) 의카티션곱 R S는차수가 n+m이고, 카디날리티가 i*j이고, 애트리뷰트가 (A1, A2,..., An, B1, B2,..., Bm) 이며, R과 S의투플들의모든가능한조합으로이루어진릴레이션 카티션곱의결과릴레이션의크기가매우클수있으며, 사용자가실제로원하는것은카티션곱의결과릴레이션의일부인경우가대부분이므로카티션곱자체는유용한연산자가아님 23
4.1 관계대수 ( 계속 ) 24
4.1 관계대수 ( 계속 ) 관계대수의완전성 실렉션, 프로젝션, 합집합, 차집합, 카티션곱은관계대수의필수적인연산자 다른관계연산자들은필수적인관계연산자를두개이상조합하여표현할수있음 임의의질의어가적어도필수적인관계대수연산자들만큼의표현력을갖고있으면관계적으로완전 (relationally complete) 하다고말함 25
4.1 관계대수 ( 계속 ) 조인연산자 두개의릴레이션으로부터연관된투플들을결합하는연산자 관계데이터베이스에서두개이상의릴레이션들의관계를다루는데매우중요한연산자 세타조인 (theta join), 동등조인 (equijoin), 자연조인 (natural join), 외부조인 (outer join), 세미조인 (semijoin) 등 26
4.1 관계대수 ( 계속 ) 세타조인과동등조인 두릴레이션 R(A1, A2,..., An) 과 S(B1, B2,..., Bm) 의세타조인의결과는차수가 n+m이고, 애트리뷰트가 (A1, A2,..., An, B1, B2,..., Bm) 이며, 조인조건을만족하는투플들로이루어진릴레이션 세타는 {=, <>, <=, <, >=, >} 중의하나 동등조인은세타조인중에서비교연산자가 = 인조인 27
4.1 관계대수 ( 계속 ) 28
4.1 관계대수 ( 계속 ) 자연조인 동등조인의결과릴레이션에서조인애트리뷰트를제외한조인 여러가지조인연산자들중에서가장자주사용됨 실제로관계데이터베이스에서대부분의질의는실렉션, 프로젝션, 자연조인으로표현가능 29
4.1 관계대수 ( 계속 ) 30
4.1 관계대수 ( 계속 ) 디비전연산자 차수가 n+m인릴레이션 R(A1, A2,..., An, B1, B2,..., Bm) 과차수가 m인릴레이션 S(B1, B2,..., Bm) 의디비전 R S는차수가 n이고, S에속하는모든투플 u에대하여투플 tu( 투플 t와투플 u을결합한것 ) 가 R에존재하는투플 t들의집합 31
4.1 관계대수 ( 계속 ) 32
4.1 관계대수 ( 계속 ) 관계대수질의의예 33
4.1 관계대수 ( 계속 ) 관계대수의한계 관계대수는산술연산을할수없음 집단함수 (aggregate function) 를지원하지않음 정렬을나타낼수없음 데이터베이스를수정할수없음 프로젝션연산의결과에중복된투플을나타내는것이필요할때가있는데이를명시하지못함 34
4.1 관계대수 ( 계속 ) 추가된관계대수연산자 집단함수 35
4.1 관계대수 ( 계속 ) 추가된관계대수연산자 ( 계속 ) 그룹화 36
4.1 관계대수 ( 계속 ) 추가된관계대수연산자 ( 계속 ) 외부조인 상대릴레이션에서대응되는투플을갖지못하는투플이나조인애트리뷰트에널값이들어있는투플들을다루기위해서조인연산을확장한조인 두릴레이션에서대응되는투플들을결합하면서, 대응되는투플을갖지않는투플과조인애트리뷰트에널값을갖는투플도결과에포함시킴 왼쪽외부조인 (left outer join), 오른쪽외부조인 (right outer join), 완전외부조인 (full outer join) 37
4.1 관계대수 ( 계속 ) 왼쪽외부조인 릴레이션 R과 S의왼쪽외부조인연산은 R의모든투플들을결과에포함시키고, 만일릴레이션 S에관련된투플이없으면결과릴레이션에서릴레이션 S의애트리뷰트들은널값으로채움 38
4.1 관계대수 ( 계속 ) 오른쪽외부조인 릴레이션 R와 S의오른쪽외부조인연산은 S의모든투플들을결과에포함시키고, 만일릴레이션 R에관련된투플이없으면결과릴레이션에서릴레이션 R의애트리뷰트들은널값으로채움 39
4.1 관계대수 ( 계속 ) 40
4.1 관계대수 ( 계속 ) 완전외부조인 릴레이션 R와 S의완전외부조인연산은 R과 S의모든투플들을결과에포함시키고, 만일상대릴레이션에관련된투플이없으면결과릴레이션에서상대릴레이션의애트리뷰트들은널값으로채움 41
4.2 SQL 개요 SQL 개요 SQL은현재 DBMS 시장에서관계 DBMS가압도적인우위를차지하는데중요한요인의하나 SQL은 IBM 연구소에서 1974년에 System R이라는관계 DBMS 시제품을연구할때관계대수와관계해석을기반으로, 집단함수, 그룹화, 갱신연산등을추가하여개발된언어 1986년에 ANSI( 미국표준기구 ) 에서 SQL 표준을채택함으로써 SQL이널리사용되는데기여 다양한상용관계 DBMS마다지원하는 SQL 기능에다소차이가있음 본책에서는 SQL2를따름 42
4.2 SQL 개요 ( 계속 ) 43
4.2 SQL 개요 ( 계속 ) SQL 개요 ( 계속 ) SQL은비절차적언어 ( 선언적언어 ) 이므로사용자는자신이원하는바 (what) 만명시하며, 원하는것을처리하는방법 (how) 은명시할수없음 관계 DBMS는사용자가입력한 SQL문을번역하여사용자가요구한데이터를찾는데필요한모든과정을담당 자연어에가까운구문을사용하여질의를표현할수있음 두가지인터페이스 대화식 SQL(interactive SQL) 내포된 SQL(embedded SQL) 44
4.2 SQL 개요 ( 계속 ) 45
4.2 SQL 개요 ( 계속 ) SQL 의구성요소 데이터정의어 데이터조작어 데이터제어어 46
4.2 SQL 개요 ( 계속 ) 47
4.3 데이터정의어와무결성제약조건 48
4.3 데이터정의어와무결성제약조건 ( 계속 ) 데이터정의어 스키마의생성과제거 SQL2에서는동일한데이터베이스응용에속하는릴레이션, 도메인, 제약조건, 뷰, 권한등을그룹화하기위해서스키마개념을지원 CREATE SCHEMA MY_DB AUTHORIZATION kim; DROP SCHEMA MY_DB RESTRICT; DROP SCHEMA MY_DB CASCADE; 49
4.3 데이터정의어와무결성제약조건 ( 계속 ) 릴레이션정의 50
4.3 데이터정의어와무결성제약조건 ( 계속 ) 51
4.3 데이터정의어와무결성제약조건 ( 계속 ) 릴레이션제거 DROP TABLE DEPARTMENT; ALTER TABLE ALTER TABLE EMPLOYEE ADD PHONE CHAR(13); 인덱스생성 CREATE INDEX EMPDNO_IDX ON EMPLOYEE(DNO); 도메인생성 CREATE DOMAIN DEPTNAME CHAR(10) DEFAULT 개발 ; 52
4.3 데이터정의어와무결성제약조건 ( 계속 ) 제약조건 53
4.3 데이터정의어와무결성제약조건 ( 계속 ) CREATE TABLE EMPLOYEE ( ID INTEGER, NAME CHAR(10), SALARY INTEGER, MANAGER_SALARY INTEGER, CHECK (MANAGER_SALARY > SALARY)); 54
4.3 데이터정의어와무결성제약조건 ( 계속 ) 참조무결성제약조건유지 ON DELETE NO ACTION ON DELETE CASCADE ON DELETE SET NULL ON DELETE SET DEFAULT ON UPDATE NO ACTION ON UPDATE CASCADE ON UPDATE SET NULL ON UPDATE SET DEFAULT 55
4.3 데이터정의어와무결성제약조건 ( 계속 ) 56
4.3 데이터정의어와무결성제약조건 ( 계속 ) 57
4.3 데이터정의어와무결성제약조건 ( 계속 ) 무결성제약조건의추가및삭제 ALTER TABLE STUDENT ADD CONSTRAINT STUDENT_PK PRIMARY KEY (STNO); ALTER TABLE STUDENT DROP CONSTRAINT STUDENT_PK; 58
4.4 SELECT 문 SELECT 문 관계데이터베이스에서정보를검색하는 SQL문 관계대수의실렉션과의미가완전히다름 관계대수의실렉션, 프로젝션, 조인, 카티션곱등을결합한것 관계데이터베이스에서가장자주사용됨 여러가지질의들의결과를보이기위해서그림 4.8의관계데이터베이스상태를사용함 59
4.4 SELECT 문 ( 계속 ) 60
4.4 SELECT 문 ( 계속 ) 기본적인 SQL 질의 SELECT 절과 FROM 절만필수적인절이고, 나머지는선택사항 61
4.4 SELECT 문 ( 계속 ) 별칭 (alias) 서로다른릴레이션에동일한이름을가진애트리뷰트가속해있을때 애트리뷰트의이름을구분하는방법 EMPLOYEE.DNO FROM EMPLOYEE AS E, DEPARTMENT AS D 62
4.4 SELECT 문 ( 계속 ) 릴레이션의모든애트리뷰트나일부애트리뷰트들을검색 63
4.4 SELECT 문 ( 계속 ) 64
4.4 SELECT 문 ( 계속 ) 상이한값들을검색 65
4.4 SELECT 문 ( 계속 ) 66
4.4 SELECT 문 ( 계속 ) 특정한투플들의검색 67
4.4 SELECT 문 ( 계속 ) 문자열비교 68
4.4 SELECT 문 ( 계속 ) 다수의검색조건 아래와같은질의는잘못되었음 69
4.4 SELECT 문 ( 계속 ) 70
4.4 SELECT 문 ( 계속 ) 부정검색조건 71
4.4 SELECT 문 ( 계속 ) 범위를사용한검색 72
4.4 SELECT 문 ( 계속 ) 리스트를사용한검색 73
4.4 SELECT 문 ( 계속 ) SELECT 절에서산술연산자 (+, -, *, /) 사용 74
4.4 SELECT 문 ( 계속 ) 널값 널값을포함한다른값과널값을 +, - 등을사용하여연산하면결과는널 COUNT(*) 를제외한집단함수들은널값을무시함 어떤애트리뷰트에들어있는값이널인가비교하기위해서 DNO=NULL 처럼나타내면안됨 75
4.4 SELECT 문 ( 계속 ) 널값 ( 계속 ) 다음과같은비교결과는모두거짓 NULL > 300 NULL = 300 NULL <> 300 NULL = NULL NULL <> NULL 올바른표현 76
4.4 SELECT 문 ( 계속 ) 77
4.4 SELECT 문 ( 계속 ) 78
4.4 SELECT 문 ( 계속 ) ORDER BY 절 사용자가 SELECT문에서질의결과의순서를명시하지않으면릴레이션에투플들이삽입된순서대로사용자에게제시됨 ORDER BY절에서하나이상의애트리뷰트를사용하여검색결과를정렬할수있음 SELECT문에서가장마지막에사용되는절 디폴트정렬순서는오름차순 (ASC) DESC를지정하여정렬순서를내림차순으로지정할수있음 널값은오름차순에서는가장마지막에나타나고, 내림차순에서는가장앞에나타남 SELECT절에명시한애트리뷰트들을사용해서정렬해야함 79
4.4 SELECT 문 ( 계속 ) 80
4.4 SELECT 문 ( 계속 ) 집단함수 데이터베이스에서검색된여러투플들의집단에적용되는함수 한릴레이션의한개의애트리뷰트에적용되어단일값을반환함 SELECT절과 HAVING절에만나타날수있음 COUNT(*) 를제외하고는널값을제거한후남아있는값들에대해서집단함수의값을구함 COUNT(*) 는결과릴레이션의모든행들의총개수를구하는반면에 COUNT( 애트리뷰트 ) 는해당애트리뷰트에서널값이아닌값들의개수를구함 키워드 DISTINCT가집단함수앞에사용되면집단함수가적용되기전에먼저중복을제거함 81
4.4 SELECT 문 ( 계속 ) 82
4.4 SELECT 문 ( 계속 ) 83
4.4 SELECT 문 ( 계속 ) 그룹화 GROUP BY절에사용된애트리뷰트에동일한값을갖는투플들이각각하나의그룹으로묶임 이애트리뷰트를그룹화애트리뷰트 (grouping attribute) 라고함 각그룹에대하여결과릴레이션에하나의투플이생성됨 SELECT절에는각그룹마다하나의값을갖는애트리뷰트, 집단함수, 그룹화에사용된애트리뷰트들만나타날수있음 다음질의는그룹화를하지않은채 EMPLOYEE 릴레이션의모든투플에대해서사원번호와모든사원들의평균급여를검색하므로잘못됨 SELECT EMPNO, AVG(SALARY) FROM EMPLOYEE; 84
4.4 SELECT 문 ( 계속 ) 85
4.4 SELECT 문 ( 계속 ) 86
4.4 SELECT 문 ( 계속 ) HAVING 절 어떤조건을만족하는그룹들에대해서만집단함수를적용할수있음 각그룹마다하나의값을갖는애트리뷰트를사용하여각그룹이만족해야하는조건을명시함 그룹화애트리뷰트에같은값을갖는투플들의그룹에대한조건을나타내고, 이조건을만족하는그룹들만질의결과에나타남 HAVING절에나타나는애트리뷰트는반드시 GROUP BY절에나타나거나집단함수에포함되어야함 87
4.4 SELECT 문 ( 계속 ) 88
4.4 SELECT 문 ( 계속 ) 89
4.4 SELECT 문 ( 계속 ) 집합연산 집합연산을적용하려면두릴레이션이합집합호환성을가져야함 UNION( 합집합 ), EXCEPT( 차집합 ), INTERSECT( 교집합 ), UNION ALL( 합집합 ), EXCEPT ALL( 차집합 ), INTERSECT ALL( 교집합 ) 90
4.4 SELECT 문 ( 계속 ) 91
4.4 SELECT 문 ( 계속 ) 조인 조인은두개이상의릴레이션으로부터연관된투플들을결합 조인의일반적인형식은아래의 SELECT문과같이 FROM절에두개이상의릴레이션들이열거되고, 두릴레이션에속하는애트리뷰트들을비교하는조인조건이 WHERE절에포함됨 조인조건은두릴레이션사이에속하는애트리뷰트값들을비교연산자로연결한것 가장흔히사용되는비교연산자는 = 92
4.4 SELECT 문 ( 계속 ) 조인 ( 계속 ) 조인조건을생략했을때와조인조건을틀리게표현했을때는카티션곱이생성됨 조인질의가수행되는과정을개념적으로살펴보면먼저조인조건을만족하는투플들을찾고, 이투플들로부터 SELECT 절에명시된애트리뷰트들만프로젝트하고, 필요하다면중복을배제하는순서로진행됨 조인조건이명확해지도록애트리뷰트이름앞에릴레이션이름이나투플변수를사용하는것이바람직 두릴레이션의조인애트리뷰트이름이동일하다면반드시애트리뷰트이름앞에릴레이션이름이나투플변수를사용해야함 93
4.4 SELECT 문 ( 계속 ) 94
4.4 SELECT 문 ( 계속 ) 95
4.4 SELECT 문 ( 계속 ) 최종결과릴레이션은아래의릴레이션에서 EMPNAME 과 DEPTNAME 을프로젝션한것이다. 96
4.4 SELECT 문 ( 계속 ) 자체조인 (self join) 한릴레이션에속하는투플을동일한릴레이션에속하는투플들과조인하는것 실제로는한릴레이션이접근되지만 FROM절에두릴레이션이참조되는것처럼나타내기위해서그릴레이션에대한별칭을두개지정해야함 97
4.4 SELECT 문 ( 계속 ) 98
4.4 SELECT 문 ( 계속 ) 99
4.4 SELECT 문 ( 계속 ) 100
4.4 SELECT 문 ( 계속 ) 중첩질의 (nested query) 외부질의의 WHERE절에다시 SELECT... FROM... WHERE 형태로포함된 SELECT문 부질의 (subquery) 라고함 INSERT, DELETE, UPDATE문에도사용될수있음 중첩질의의결과로한개의스칼라값 ( 단일값 ), 한개의애트리뷰트로이루어진릴레이션, 여러애트리뷰트로이루어진릴레이션이반환될수있음 101
4.4 SELECT 문 ( 계속 ) 102
4.4 SELECT 문 ( 계속 ) 한개의스칼라값이반환되는경우 103
4.4 SELECT 문 ( 계속 ) 한개의애트리뷰트로이루어진릴레이션이반환되는경우 중첩질의의결과로한개의애트리뷰트로이루어진다수의투플들이반환될수있음 외부질의의 WHERE 절에서 IN, ANY(SOME), ALL, EXISTS와같은연산자를사용해야함 키워드 IN은한애트리뷰트가값들의집합에속하는가를테스트할때사용됨 한애트리뷰트가값들의집합에속하는하나이상의값들과어떤관계를갖는가를테스트하는경우에는 ANY를사용 한애트리뷰트가값들의집합에속하는모든값들과어떤관계를갖는가를테스트하는경우에는 ALL을사용 104
4.4 SELECT 문 ( 계속 ) 105
4.4 SELECT 문 ( 계속 ) 106
4.4 SELECT 문 ( 계속 ) 107
4.4 SELECT 문 ( 계속 ) 108
4.4 SELECT 문 ( 계속 ) 109
4.4 SELECT 문 ( 계속 ) 여러애트리뷰트들로이루어진릴레이션이반환되는경우 중첩질의의결과로여러애트리뷰트들로이루어진릴레이션이반환되는경우에는 EXISTS 연산자를사용하여중첩질의의결과가빈릴레이션인지여부를검사함 중첩질의의결과가빈릴레이션이아니면참이되고, 그렇지않으면거짓 110
4.4 SELECT 문 ( 계속 ) 111
4.4 SELECT 문 ( 계속 ) 상관중첩질의 (correlated nested query) 중첩질의의 WHERE절에있는프레디키트에서외부질의에선언된릴레이션의일부애트리뷰트를참조하는질의 중첩질의의수행결과가단일값이든, 하나이상의애트리뷰트로이루어진릴레이션이든외부질의로한번만결과를반환하면상관중첩질의가아님 상관중첩질의에서는외부질의를만족하는각투플이구해진후에중첩질의가수행되므로상관중첩질의는외부질의를만족하는투플수만큼여러번수행될수있음 112
4.4 SELECT 문 ( 계속 ) 113
4.5 INSERT, DELETE, UPDATE 문 INSERT 문 기존의릴레이션에투플을삽입 참조되는릴레이션에투플이삽입되는경우에는참조무결성제약조건의위배가발생하지않으나참조하는릴레이션에투플이삽입되는경우에는참조무결성제약조건을위배할수있음 릴레이션에한번에한투플씩삽입하는것과한번에여러개의투플들을삽입할수있는것으로구분 릴레이션에한번에한투플씩삽입하는 INSERT문 INSERT INTO 릴레이션 ( 애트리뷰트1,..., 애트리뷰트n) VALUES ( 값1,..., 값n); 114
4.5 INSERT, DELETE, UPDATE 문 ( 계속 ) 115
4.5 INSERT, DELETE, UPDATE 문 ( 계속 ) INSERT 문 ( 계속 ) 릴레이션에한번에여러개의투플들을삽입하는 INSERT 문 INSERT INTO 릴레이션 ( 애트리뷰트 1,..., 애트리뷰트 n) SELECT... FROM... WHERE...; 116
4.5 INSERT, DELETE, UPDATE 문 ( 계속 ) DELETE 문 삭제연산은한릴레이션으로부터한개이상의투플들을삭제함 참조되는릴레이션의삭제연산의결과로참조무결성제약조건이위배될수있으나, 참조하는릴레이션에서투플을삭제하면참조무결성제약조건을위배하지않음 DELETE문의구문 DELETE FROM 릴레이션 WHERE 조건 ; 117
4.5 INSERT, DELETE, UPDATE 문 ( 계속 ) 118
4.5 INSERT, DELETE, UPDATE 문 ( 계속 ) UPDATE 문 한릴레이션에들어있는투플들의애트리뷰트값들을수정 기본키나외래키에속하는애트리뷰트의값이수정되면참조무결성제약조건을위배할수있음 UPDATE 문의구문 UPDATE 릴레이션 SET 애트리뷰트 = 값또는식 [, ] WHERE 조건 ; 119
4.6 트리거 (trigger) 와주장 (assertion) 트리거 명시된이벤트 ( 데이터베이스의갱신 ) 가발생할때마다 DBMS 가자동적으로수행하는, 사용자가정의하는문 ( 프로시저 ) 데이터베이스의무결성을유지하기위한일반적이고강력한도구 테이블정의시표현할수없는기업의비즈니스규칙들을시행하는역할 트리거를명시하려면트리거를활성화시키는사건인이벤트, 트리거가활성화되었을때수행되는테스트인조건, 트리거가활성화되고조건이참일때수행되는문 ( 프로시저 ) 인동작을표현해야함 트리거를이벤트-조건-동작 (ECA) 규칙이라고도부름 E는 Event, C는 Condition, A는 Action을의미 SQL3 표준에포함되었으며대부분의상용관계 DBMS에서제공됨 120
4.6 트리거와주장 ( 계속 ) 121
4.6 트리거와주장 ( 계속 ) 122
4.6 트리거와주장 ( 계속 ) 트리거 ( 계속 ) SQL3에서트리거의형식 CREATE TRIGGER < 트리거이름 > AFTER < 트리거를유발하는이벤트들이 OR 로연결된리스트 > ON < 릴레이션 > [WHEN < 조건 >] BEGIN <SQL문 ( 들 )> END 이벤트의가능한예로는테이블에투플삽입, 테이블로부터투플삭제, 테이블의 투플수정등이있음 조건은임의의형태의프레디키트 동작은데이터베이스에대한임의의갱신 어떤이벤트가발생했을때조건이참이되면트리거와연관된동작이수행되고, 그렇지않으면아무동작도수행되지않음 삽입, 삭제, 수정등이일어나기전 (before) 에동작하는트리거와일어난후 (after) 에 동작하는트리거로구분 123
4.6 트리거와주장 ( 계속 ) 124
4.6 트리거와주장 ( 계속 ) 연쇄적으로활성화되는트리거 하나의트리거가활성화되어이트리거내의한 SQL문이수행되고, 그결과로다른트리거를활성화하여그트리거내의 SQL문이수행될수있음 125
4.6 트리거와주장 ( 계속 ) 주장 주장은 SQL3 에포함되어있으나대부분의상용관계 DBMS 가아직 지원하고있지않음 트리거는제약조건을위반했을때수행할동작을명시하는것이고, 주장은 제약조건을위반하는연산이수행되지않도록함 주장의구문 CREATE ASSERTION 이름 CHECK 조건 ; 트리거보다좀더일반적인무결성제약조건 DBMS 는주장의프레디키트를검사하여만일참이면주장을위배하지않는 경우이므로데이터베이스수정이허용됨 일반적으로두개이상의테이블에영향을미치는제약조건을명시하기 위해사용됨 126
4.6 트리거와주장 ( 계속 ) 127
4.7 내포된 SQL 내포된 SQL(embedded SQL) SQL이호스트언어의완전한표현력을갖고있지않기때문에모든질의를 SQL로표현할수는없음 SQL은호스트언어가갖고있는조건문 (IF문), 반복문 (WHILE문), 입출력등과같은동작, 사용자와의상호작용, 질의결과를 GUI로보내는등의기능을갖고있지않음 C, C++, 코볼, 자바등의언어로작성하는프로그램에 SQL문을삽입하여, 데이터베이스를접근하는부분을 SQL이맡고 SQL에없는기능은호스트언어로작성하는것이필요 호스트언어에포함되는 SQL문을내포된 SQL이라부름 데이터구조가불일치하는문제 (impedance mismatch 문제 ) 128
4.7 내포된 SQL( 계속 ) 내포된 SQL( 계속 ) MS SQL SERVER 2005에서 C 언어에 SQL문을내포시키는환경을 ESQL/C라부름 호스트언어로작성중인프로그램에 SQL문을내포시킬때해당호스트언어의컴파일러가어떻게호스트언어의문과 SQL문을구별할것인가? 호스트언어로작성중인프로그램에포함된 SELECT, INSERT, DELETE, UPDATE 등모든 SQL문에는반드시문장의앞부분에 EXEC SQL을붙임 EXEC SQL은 EXEC SQL부터세미콜론 (;) 사이에들어있는문장이내포된 SQL문임을전컴파일러에게알림 ESQL/C 전컴파일러 (precompiler) 는내포된 SQL문을 C 컴파일러에서허용되는함수호출로변환함 129
4.7 내포된 SQL( 계속 ) 130
4.7 내포된 SQL( 계속 ) ESQL/C ESQL/C는정적인 SQL문과동적인 SQL문모두를지원함 정적인 SQL문은 C 프로그램에내포된완전한 Transact-SQL문 동적인 SQL문은불완전한 Transact-SQL문으로서일부또는전부를질의가수행될때입력가능 정적인 SQL문은입력값과출력데이터를위해서 C 프로그램의변수들을포함할수있음 SQL문에포함된 C 프로그램의변수를호스트변수 (host variable) 라고부름 131
4.7 내포된 SQL( 계속 ) 132
4.7 내포된 SQL( 계속 ) 133
4.7 내포된 SQL( 계속 ) 불일치문제와커서 호스트언어는단일변수 / 레코드위주의처리 ( 투플위주의방식 ) 를지원하는반면에 SQL은데이터레코드들의처리 ( 집합위주의방식 ) 를지원하기때문에불일치문제가발생함 불일치문제를해결하기위해서커서 (cursor) 가사용됨 커서는한번에한투플씩가져오는수단 DECLARE CURSOR문을사용하여커서를정의함 OPEN cursor문은질의를수행하고, 질의수행결과의첫번째투플이전을커서가가리키도록한다. 이것이커서의현재투플 그다음에 FETCH문은커서를다음투플로이동하고, 그투플의애트리뷰트값들을 FETCH문에명시된호스트변수들에복사함 CLOSE cursor는커서를닫음 134
4.7 내포된 SQL( 계속 ) 135
4.7 내포된 SQL( 계속 ) 불일치문제와커서 ( 계속 ) 만일갱신할투플들에대해커서를정의할때는커서선언부에 FOR UPDATE OF 절을반드시포함시키고, 수정할애트리뷰트들을함께명시함 EXEC SQL DECLARE title_cursor CURSOR FOR SELECT title FROM employee FOR UPDATE OF title; UPDATE employee SET title = :newtitle WHERE CURRENT OF title_cursor; 136
4.7 내포된 SQL( 계속 ) SQL 통신영역 (SQLCA: SQL Communications Area) C 프로그램에내포된 SQL문에발생하는에러들을사용자에게알려줌 사용자는 SQLCA 데이터구조의에러필드와상태표시자를검사하여내포된 SQL 문이성공적으로수행되었는가또는비정상적으로수행되었는가를파악할수있음 SQLCA 데이터구조중에서가장중요하고널리사용되는필드는 SQLCODE 변수 SQLCODE의값이 0이면마지막에내포된 SQL문이성공적으로끝났음을의미 137
4.7 내포된 SQL( 계속 ) 138