Chapter 4 SQL: 데이터정의, 제약사항, 기본질의와갱신 Copyright 2004 Pearson Education, Inc.
목차 4.1 SQL의데이터정의와데이터타입 4.2 SQL에서기본제약조건의명시 4.3 SQL에서의기본검색질의 4.4 SQL에서삽입, 삭제, 갱신문 4.5 SQL의기타기능 Slide 4-2
SQL 역사 System R의언어SEQUEL(Structured English-Like Query Language) 에서출발 ANSI와 ISO의공동표준SQL1( 또는 SQL-86) 발표 그이후SQL-92 (SQL2), SQL-1999 (SQL3), SQL:2003, SQL:2006, SQL:2008 표준들이발표됨 SQL 표준은핵심 (core) 명세와특별확장으로구성됨 핵심부분 : SQL을따르는모든 RDBMS업체들이구현해야할부분 확장부분 : 데이터마이닝, 공간데이터, 이력데이터, 데이터웨어하우징, 온라인분석처리 (OLAP) 등의선택적인모듈 Slide 4-3
4.1 SQL 의데이터정의와데이터타입 스키마생성, 제거 CREATE SCHEMA, DROP SCHEMA 데이터베이스의생성, 제거 CREATE DATABASE, DROP DATABASE 데이터베이스의테이블들 ( 릴레이션들 ) 의생성, 제거, 갱신위해사용 CREATE TABLE, DROP TABLE, ALTER TABLE Slide 4-4
SQL 에서스키마와카탈로그개념 스키마개념 동일한데이터베이스응용에속해있는테이블이나기타구성요소들을그룹화하기위해사용 CREATE SCHEMA COMPANY AUTHORIZATION Jsmith ; 카탈로그 SQL 환경에있는스키마들의모임 카탈로그에는 INFORMATION SCHEMA라는특별한스키마를포함함. 이는다른모든스키마들에대한정보를가지고있는스키마임. Slide 4-5
CREATE TABLE 새로운기본릴레이션을생성하는데사용하며, 릴레이션의이름과함께각애트리뷰트와데이터유형을기술함 데이터유형 : (INTEGER, FLOAT, DECIMAL(i,j), CHAR(n), VARCHAR(n)) NOT NULL 제약조건을각애트리뷰트에명시할수있음 Example : CREATE TABLE DEPARTMENT ( Dname VARCHAR(10) NOT NULL, Dnumber INTEGER NOT NULL, Mgr_ssn CHAR(9), Mgr_start_date CHAR(9) ); Slide 4-6
CREATE TABLE EMPLOYEE ( Fname VARCHAR(15) NOT NULL, Minit CHAR, Lname VARCHAR(15) NOT NULL, Ssn CHAR(9) NOT NULL, Bdate DATE, Address VARCHAR(30), Sex CHAR, Salary DECIMAL(10, 2), Super_ssn CHAR(9), Dno INT NOT NULL, PRIMARY KEY (Ssn), FOREIGN KEY (Super_Ssn) REFERENCES EMPLOYEE( Ssn ), FOREIGN KEY (Dno) REFERENCES DEPARTMENT (Dnumber) ) ; CREATE TABLE DEPARTMENT ( Dname VARCHAR(15) NOT NULL, Dnumber INT NOT NULL, Mgr_Ssn CHAR(9) NOT NULL, Mgr_Start_Date DATE, PRIMARY KEY (Dnumber), UNIQUE (Dname), FOREIGN KEY (Mgr_ssn) REFERENCE EMPLOYEE (Ssn)) ; 7 Ch7
CREATE TABLE DEPT_LOCATONS ( Dnumber INT NOT NULL, Dlocation VARCHAR(15) NOT NULL, PRIMARY KEY (Dnumber, Dlocation), FOREIGN KEY (Dnumber) REFERENCES DEPARTMENT (Dnumber)) ; CREATE TABLE PROJECT ( Pname VARCHAR(15) NOT NULL, Pnumber INT NOT NULL, Plocation VARCHAR(15), Dnum INT NOT NULL, PRIMARY KEY (Pnumber), UNIQUE (Pname), FOREIGN KEY (Dnum) REFERENCES DEPARTMENT (Dnumber)) ; CREATE TABLE WORKS_ON ( Essn CHAR(9) NOT NULL, Pno INT NOT NULL, Hours DECIMAL(3, 1) NOT NULL, PRIMARY KEY (Essn, Pno), FOREIGN KEY (Essn) REFERENCES EMPLOYEE (Ssn), FOREIGN KEY (PNO) REFERENCES PROJECT (Pnumber)) ; 8 Ch7
CREATE TABLE DEPENDENT ( Essn CHAR(9) NOT NULL, Dependent_name VARCHAR(15) NOT NULL, Sex CHAR, Bdate DATE, Relationship VARCHAR(8), PRIMARY KEY (Essn, Dependent_name), FOREIGN KEY (Essn) REFERENCES EMPLOYEE (Ssn)) ; [ 그림 4.1] 그림 4.7 의 COMPANY 스키마를정의하는 create table 데이터정의문 % 위테이블정의문들은외래키에오류가발생한다. - EMPLOYEE 테이블의 Super_ssn이순환참조함 - EMPLOYEE 테이블의 Dno는아직생성되지않는 DEPARTMENT 테이블을참조함 % 초기에는이들외래키를제약조건에포함시키지않고, 나중에 ALTER TABLE문을사용하여추가할수있음. 9 Ch7
애트리뷰트데이터타입과도메인 숫자 (numeric): INTEGER, INT, SMALLINT, FLOAT, REAL, DOUBLE PRECISION, DECIMAL(i,j), DEC(i,j), NUMBER(i,j) 문자열 (character string): CHAR(n), CHARACTER(n), VARCHAR(n), CHAR VARYING(n), CHARACTER VARYING(n) CLOB(n K/M/G), CHARACTER LARGE OBJECT. ( 예 ) CLOB(20 M) 비트열 (bit-string): 고정길이비트열 BIT(n), 가변길이비트열 BIT VARYING(n) BLOB(n K/M/G), BINARY LARGE OBJECT. ( 예 ) BLOB(30 G) 불리언 (boolean): TRUE, FALSE, UNKNOWN 중한가지값을가짐 Slide 4-10
애트리뷰트데이터타입과도메인 날짜 (DATE): yyyy-mm-dd 형식으로 year-month-day 을표현함 시간 (TIME): hh:mm:ss 형식으로 hour:minute:second 을표현함 TIME(i): hour:minute:second 에초이하의단위를명시하는 i 개의추가숫자를표현함 형식 : hh:mm:ss:ii...i 타임스탬프 (TIMESTAMP): DATA 와 TIME 구성요소를포함 형식 : 2002-09-27 09:12:47.648302 기간 (INTERVAL): 날짜, 시간, 타임스탬프의기간을표시하는상대값을명시 Slide 4-11
4.2 SQL 에서기본제약조건의명시 애트리뷰트제약조건과디폴트값명시 NOT NULL 절 : 애트리뷰트에널값을허용하지않을때명시 DEFAULT < 값 > : 애트리뷰트의디폴트값을명시 CHECK 절 : 애트리뷰트의값을제한하는조건명시 Example : CREATE TABLE EMPLOYEE ( Fname VARCHAR(15) NOT NULL, Minit CHAR, Lname VARCHAR(15) NOT NULL,........... Dno INT DEFAULT 1, Salary DECIMAL(10,2) CHECK(Salary >= 10000),........... Slide 4-12
4.2 SQL 에서기본제약조건의명시 ( 계속 ) 키와참조무결성제약조건의명시 PRIMARY KEY 절 : 기본키명시 UNIQUE 절 : 대체키 ( 또는보조키 ) 명시 FOREIGN KEY 절 : 참조키명시 Example CREATE TABLE DEPT ( Dname VARCHAR(10) NOT NULL, Dnumber INTEGER NOT NULL, Mgr_ssn CHAR(9), Mgr_start_date CHAR(9), PRIMARY KEY (Dnumber), UNIQUE (Dname), FOREIGN KEY (Mgr_ssn) REFERENCES EMP ); Slide 4-13
4.2 SQL 에서기본제약조건의명시 ( 계속 ) 참조무결성제약조건의선택사항 RESTRICT, CASCADE, SET NULL 또는 SET DEFAULT 을명시할수있음 Example: CREATE TABLE DEPT ( Dname VARCHAR(10) NOT NULL, Dnumber INTEGER NOT NULL, Mgr_ssn CHAR(9), Mgr_start_date CHAR(9), PRIMARY KEY (Dnumber), UNIQUE (Dname), FOREIGN KEY (Mgr_ssn) REFERENCES EMP ON DELETE SET DEFAULT ON UPDATE CASCADE ); Slide 4-14
Example CREATE TABLE EMP ( ENAME VARCHAR(30) NOT NULL, ESSN CHAR(9), BDATE DATE, DNO INTEGER DEFAULT 1, SUPERSSN CHAR(9), PRIMARY KEY (ESSN), FOREIGN KEY (DNO) REFERENCES DEPT ON DELETE SET DEFAULT ON UPDATE CASCADE, FOREIGN KEY (SUPERSSN) REFERENCES EMP ON DELETE SET NULL ON UPDATE CASCADE ); Slide 4-15
CREATE TABLE EMPLOYEE (....... Dno INT NOT NULL DEFAULT 1, CONSTRAINT EMPPK PRIMARY KEY (Ssn), CONSTRAINT EMPSUPERFK FOREIGN KEY (Super_Ssn) REFERENCES EMPLOYEE(Ssn) ON DELETE SET NULL ON UPDATE CASCADE CONSTRAINT EMPDEPTFK, FOREIGN KEY (Dno) REFERENCES DEPARTMENT(Dnumber) ON DELETE SET DEFAULT ON UPDATE CASCADE ) ; CREATE TABLE DEPARTMENT (....... Mgr_Ssn CHAR(9) NOT NULL DEFAULT 888665555,........ CONSTRAINT DEPTPK PRIMARY KEY (Dnumber), CONSTRAINT DEPTSK UNIQUE (Dname), CONSTRAINT DEPTMGRFK FOREIGN KEY (Mgr_ssn) REFERENCE EMPLOYEE (Ssn) ON DELETE SET DEFAULT ON UPDATE CASCADE ) ; 16 Ch7
CREATE TABLE DEPT_LOCATONS (.... PRIMARY KEY (Dnumber, Dlocation), FOREIGN KEY (Dnumber) REFERENCES DEPARTMENT (Dnumber) ON DELETE CASCADE ON UPDATE CASCADE ) ; [ 그림 4.2] SQL 데이터정의예. 디폴트값과참조트리거된동작명시 17 Ch7
4.3 SQL 에서의기본검색질의 SQL 은데이터베이스로부터정보를검색하는문장을가짐 SELECT 문 관계대수의 SELECT 연산과는무관함 SQL과관계모델의중요한차이점 SQL의테이블 ( 릴레이션 ) 은모든애트리뷰트값이동일한튜플을하나이상가질수있음 따라서, SQL 릴레이션 ( 테이블 ) 은튜플의집합이아니라튜플의다중집합 (multi-set or bag) 임 키제약조건을선언하거나 DISTINCT 선택사항을사용하여 SQL 릴레이션들을집합으로제한할수도있음 Slide 4-18
기본 SQL 의구조 SQL SELECT 문의기본형식은사상 (mapping) 또는 SELECT-FROM-WHERE 블록이라고불림 SELECT FROM WHERE <attribute list> <table list> <condition> <attribute list> : 질의결과에나타나는애트리뷰트이름목록 <table list> : 질의의대상이되는릴레이션목록 <condition> : 질의결과에포함될투플들을표시하는조건 ( 부울 ) 식 Slide 4-19
관계데이타베이스스키마 그림 3.5 Slide 4-20
대응하는데이타베이스상태 그림 3.6 Slide 4-21
기본 SQL 의구조 ( 계속 ) 기본 SQL 질의들은관계대수의 SELECT, PROJECT, JOIN 연산으로표현가능함 하나의릴레이션에대한간단한질의예제 Query 0: John B. Smith 인종업원의생일과주소를검색하시오. Q0: SELECT Bdate, Address FROM EMPLOYEE WHERE Fname='John' AND Minit='B AND Lname='Smith ; 관계대수연산의 SELECT-PROJECT 쌍과유사 SELECT 절은프로젝트애트리뷰트을표시하고, WHERE 절은선택조건을표시 그러나, 질의의결과는중복된튜플을포함 Slide 4-22
기본 SQL 의구조 ( 계속 ) Query 1: Research 부서에서일하는모든종업원들의이름과주소를검색하시오. Q1: SELECT Fname, Lname, Address FROM EMPLOYEE, DEPARTMENT WHERE Dname='Research' AND Dnumber=Dno; 관계대수연산의 SELECT-PROJECT-JOIN 과유사 (Dname='Research') 은선택조건이고관계대수에서 SELECT 연산에해당함 (Dnumber=Dno) 은조인조건이고관계대수의 JOIN 연산에해당함 Slide 4-23
기본 SQL 의구조 ( 계속 ) Query 2: Stafford 에위치한모든프로젝트에대해프로젝트번호 (Pnumber), 담당부서번호 (Dnum), 부서관리자의성 (Lname), 주소 (Address), 생일 (Bdate) 을검색하시오. Q2: SELECT Pnumber, Dnum, Lname, Address, Bdate FROM PROJECT, DEPARTMENT, EMPLOYEE WHERE Dnum=Dnumber AND Mgr_ssn=Ssn AND Plocation='Stafford ; Q2 에서두개의조인조건이존재 조인조건 Dnum=Dnumber 는프로젝트와담당부서를조인함 조인조건 Mgr_ssn=Ssn 은부서와그관리자를조인 Slide 4-24
별명 (alias), 재명명및투플변수 SQL에서는서로다른릴레이션에서동일한애트리뷰트가사용될수있음 이경우릴레이션이름과함께애트리뷰트이름을사용함으로써모호함을방지해야함 SQL 작성시릴레이션이름다음에 (.) 을두고애트리뷰트이름을명시함 예 : EMPLOYEE.Lname, DEPARTMENT.Dname EMPLOYEE.Name, DEPARTMENT.Name Slide 4-25
별명 (alias), 재명명및투플변수 ( 계속 ) 어떤질의들은동일한릴레이션을두번참조할필요가있음 이런경우, 릴레이션이름에별명을부여해야함 Query 8: 종업원에대해이름 (Fname) 과성 (Lname), 직속상사의이름 (Fname) 과성 (Lname) 을검색하시오. Q8: SELECT FROM E.Fname, E.Lname, S.Fname, S.Lname EMPLOYEE AS E, EMPLOYEE AS S WHERE E.Super_ssn=S.Ssn ; Q8 에서, EMPLOYEE 릴레이션에대해두개의별명 ( 튜플변수 ) E 와 S 를선언하여사용함 E 와 S 를 EMPLOYEE 의두개의사본으로생각할수있음 E 는감독을받는사원 ( 종업원 ) 을, S 는감독을하는사원 ( 직속상사 ) 을나타냄 Slide 4-26
별명 (alias), 재명명및투플변수 ( 계속 ) 별명 ( 튜플변수 ) 를선언할때 AS 를생략할수있음 ( 예 ) EMPLOYEE E, EMPLOYEE S 릴레이션의별명을선언할때애트리뷰트이름들을재명명 (rename) 할수도있음 ( 예 ) EMPLOYEE AS E(Fn, Mi, Ln, Ssn, Bd, Addr, Sex, Sal, Sssn, Dno) 릴레이션이한번사용되더라도필요시별명 ( 튜플변수 ) 를사용할수있음 Q1B: SELECT FROM WHERE E.Fname, E.Lname, E.Address EMPLOYEE E, DEPARTMENT D D.Dname= Research AND D.Dnumber=E.Dno; Slide 4-27
WHERE 절의생략 SQL 에서 WHERE 절을생략하면튜플선택에대한조건이없다는것을의미함 즉, FROM 절에있는릴레이션의모든튜플이조건을만족함 FROM 절에두개이상의릴레이션이있으면카티션곱이생성됨 Query 9 와 10: 데이터베이스에서 EMPLOYEE 의모든 Ssn 을선택하고 (Q9), EMPLOYEE 의 Ssn 과 DEPARTMENT 의 Dname 의모든조합을선택하라 (Q10). Q9: SELECT Ssn FROM EMPLOYEE ; Q10: SELECT Ssn, Dname FROM EMPLOYEE, DEPARTMENT ; Slide 4-28
* ( 별표 ) 의사용 선택된튜플들의모든애트리뷰트값들을검색하려면모든애트리뷰트이름을명시적으로열거하지않고단지 * 을사용함 Examples: Q1C: SELECT * FROM EMPLOYEE WHERE Dno=5; Q1D: SELECT * FROM EMPLOYEE, DEPARTMENT WHERE Dname='Research' AND Dno=Dnumber; Q10A: SELECT * FROM EMPLOYEE, DEPARTMENT; Slide 4-29
DISTINCT 의사용 SQL 은일반적으로집합으로취급하지않음 중복된튜플들이나타날수있음 질의결과에서중복된튜플들을삭제하려면, 키워드 DISTINCT 를사용해야함 예를들어, Q11 의결과는중복된 SALARY 값들을가지고있지만 Q11A 는중복된값들을가지지않음 Q11: SELECT ALL Salary FROM EMPLOYEE; Q11A: SELECT DISTINCT Salary FROM EMPLOYEE; Slide 4-30
집합연산 SQL 은일부집합연산들을수용함 SQL 에서는합집합 (UNION) 연산, 차집합 (EXCEPT) 연산, 교집합 (INTERSECT) 연산을제공함 릴레이션에대한집합연산의결과는튜플들의집합임 즉, 중복된튜플을결과에서제거됨 집합연산들은합집합호환성을갖는릴레이션에만적용 즉, 적용할두개의릴레이션은동일한애트리뷰트들을가지며이애트리뷰트는같은순서로나타나야함 Slide 4-31
집합연산 ( 계속 ) Query 4: 일반직원이든, 프로젝트를담당하는부서의관리자이든간에성이 Smith 인사원을포함하는모든프로젝트에대해서프로젝트번호의리스트를검색하라. Q4: (SELECT DISTINCT Pnumber // Smith가관리자인 projects FROM PROJECT, DEPARTMENT, EMPLOYEE WHERE Dnum=Dnumber AND Mgr_ssn=Ssn AND LNAME='Smith') UNION (SELECT DISTINCT Pno // Smith가참여하는 projects FROM WORKS_ON, EMPLOYEE WHERE Essn=Ssn AND Lname='Smith') ; Slide 4-32
부분문자열비교 LIKE 비교연산자는문자열의일부에대해비교조건을명시 부분문자열은두개의예약된문자를사용 % 은 0보다큰임의의개수의문자로대체 - 는임의의한개의문자로대체 Query 12: 주소가 Houston, Texas 인모든사원을검색하시오. Q12: SELECT Fname, Lname FROM EMPLOYEE WHERE Address LIKE '%Houston,TX% ; Slide 4-33
부분문자열비교 ( 계속 ) Query 12A: 1950 년대에태어난모든사원을검색하시오. 날짜형식에의해서문자열의 8 번째문자가 5 이어야한다. BDATA 값은임의의한문자를하나의밑줄 (_) 로대체하여 5_ 의문자열을사용함 Q12A: SELECT Fname, Lname FROM EMPLOYEE WHERE Bdate LIKE ' 5_' ; Slide 4-34
산술연산자 SQL 질의결과에서표준산술연산자더하기 (+), 빼기 (-), 곱하기 (*), 나누기 (/) 를수치값에적용할수있음 Query 13: ProductX 프로젝트에참여하는모든사원의급여를 10% 올린경우의급여를구하시오. Q13: SELECT E.Fname, E.Lname, 1.1*E.Salary AS Increased_sal FROM EMPLOYEE AS E, WORKS_ON AS W, PROJECT AS P WHERE E.Ssn=W.Essn AND W.Pno=P.Pnumber AND P.Pname='ProductX ; Slide 4-35
산술연산자 ( 계속 ) Query 14: 급여가 30,000 달러에서 40,000 달러사이에있는 5 번부서의모든사원을검색하라. Q14: SELECT * FROM EMPLOYEE WHERE (Salary BETWEEN 30000 AND 40000) AND Dno = 5 ; Slide 4-36
질의결과의정렬 ORDER BY 절은하나이상의애트리뷰트값순서로질의결과튜플을정렬할수있음 Query 15: 사원및각사원이근무하는프로젝트들의리스트를검색하는데, 부서이름순서대로, 그리고각부서내에서는사원의성과이름의알파벳순서대로구하시오. Q15: SELECT D.Dname, E.Lname, E.Fname, P.Pname FROM DEPARTMENT E, EMPLOYEE E, WORKS_ON W, PROJECT P WHERE D.Dnumber=E.Dno AND E.Ssn=W.Essn AND W.Pno=P.Pnumber ORDER BY D.Dname, E.Lname, E.Fname ; Slide 4-37
질의결과의정렬 ( 계속 ) 디폴트정렬은오름차순임 내림차순으로정렬하고자한다면키워드 DESC 로지정 키워드 ASC 는오름차순정렬을명시적으로지정할때사용함 Example ORDER BY D.Dname DESC, E.Lname ASC, E.Fname ASC Slide 4-38
SQL 질의에대한요약 SQL 에서간단한검색질의하나는 4 개까지의절로구성 필수적으로질의에나타내야하는두개의절은 SELECT 와 FROM 절임 4 개의절은다음순서로명시함 SELECT <attribute list> FROM <table list> [WHERE <condition>] [ORDER BY <attribute list>] Slide 4-39
SQL 질의에대한요약 ( 계속 ) SELECT 절은결과에포함될애트리뷰트들이나함수를나열함 FROM 절은질의에서필요한모든릴레이션 ( 별명 ) 들을명시함 WHERE 절은조인조건을포함하여 FROM 절에명시된릴레이션들로부터튜플들을선택하기위한조건들을명시 ORDER BY절은질의결과를출력하는순서를명시 Slide 4-40
4.4 SQL 에서삽입, 삭제, 갱신문 SQL에서데이터베이스를갱신하기위해사용되는세가지명령 INSERT DELETE UPDATE Slide4-41
INSERT INSERT 의간단한형식은한릴레이션에튜플한개를추가하는데사용 애트리뷰트값들의순서는 CREATE TABLE 명령에서명시한애트리뷰트들의순서와같아야함 Slide 4-42
INSERT ( 계속 ) Example: U1: INSERT INTO EMPLOYEE VALUES ( 'Richard','K','Marini', '653298653', '30-DEC-52', '98 Oak Forest,Katy,TX', 'M', 37000,'987654321', 4 ) ; INSERT 명령의두번째형식에서는새로운튜플에서명시한값에대응하는애트리뷰트이름들을명시적으로나타낼수있음 Null 이허용된애트리뷰트에는값을명시하지않아도됨 Example: Fname, Lname, Dno, Ssn 애트리뷰트의값만알고있는새로운사원튜플을 EMPLOYEE 릴레이션에삽입하시오. U1A: INSERT INTO EMPLOYEE (Fname, Lname, Dno, Ssn) VALUES ('Richard', 'Marini', 4, '653298653') ; Slide 4-43
INSERT ( 계속 ) Important Note: 데이터베이스를갱신할때, DBMS 는 DDL 명령에서명시된무결성제약조건을확인해야함 ( 예 ) 그림 3.6 의데이터베이스에서아래 INSERT 문은무결성제약조건을위반하므로실행이거부된다. U3: INSERT INTO EMPLOYEE (Fname, Lname, Ssn, Dno) VALUES ( Robert, Hatcher, 980760540, 2) ; ( 외래키 Dno의값2가DEPARTMENT 테이블에존재하지않음.) U2A: INSERT INTO EMPLOYEE (Fname, Lname, Dno) VALUES ( Robert, Hatcher, 5) ; ( 기본키 Ssn의값이주어지지않아 NULL값을입력하려고함.) Slide 4-44
INSERT ( 계속 ) INSERT 명령의한유형은한질의의결과로검색되는다수의튜플을릴레이션에삽입할수있음 U3A: CREATE TABLE WORKS_ON_INFO ( Emp_name VARCHAR(15), Proj_name VARCHAR(15), Hours_per_week DECIMAL(3,1) ) ; U3B: INSERT INTO WORKS_ON_INFO ( Emp_name, Proj_name, Hours_per_week ) SELECT E.Lname, P.Pname, W.Hours FROM PROJECT P, WORKS_ON W, EMPLOYEE E WHERE P.Pname=W.Pno AND W.Essn=E.Ssn ; Slide 4-45
DELETE 릴레이션에서튜플들을제거하는명령 삭제할튜플들의조건을나타내는 WHERE 절을포함함 한번에한테이블내의튜플들만삭제함 (CASCADE 가참조무결성제약조건에명시되어있지않으면 ) WHERE 절을생략한경우에는테이블내의모든튜플을삭제 테이블은데이터베이스내에서빈테이블로남게됨 WHERE 절의조건을만족하는튜플수에따라삭제함 Slide 4-46
DELETE ( 계속 ) Examples: U4A: DELETE FROM EMPLOYEE WHERE Lname='Brown ; U4B: DELETE FROM EMPLOYEE WHERE Ssn='123456789 ; U4C: DELETE FROM EMPLOYEE WHERE Dno = 5 ; U4D: DELETE FROM EMPLOYEE ; Slide 4-47
UPDATE 하나이상의튜플들의애트리뷰트값을수정하기위해사용 WHERE 절은릴레이션에서수정할튜플들을선택하는데사용됨 SET 절은변경할애트리뷰트와그들의새로운값을명시함 UPDATE 명령은같은릴레이션내에서여러튜플을수정할수있음 Slide 4-48
UPDATE ( 계속 ) Example: 프로젝트번호 10 인튜플에대해 Plocation 을 Bellaire 로변경하고담당부서인 Dnum 을 5 로변경하시오. U5: UPDATE PROJECT SET Plocation = 'Bellaire', Dnum = 5 WHERE Pnumber=10 ; Slide 4-49
UPDATE ( 계속 ) Example: 5 번부서에있는모든종업원들의봉급을 10% 인상한다. U6: UPDATE EMPLOYEE SET Salary = Salary *1.1 WHERE Dno = 5 ; 변경된 SALARY 값은원래 SALARY 값에영향을받음 오른쪽 SALARY 애트리뷰트는수정되기전의 SALARY 값을 왼쪾 SALARY 애트리뷰트는수정된후의새로운 SALARY 값을의미함 Slide 4-50
4.5 SQL 의기타기능 중첩질의, 집단함수, 그룹화, 조인된테이블, 외부조인, 재귀 SQL, SQL 뷰, 트리거, 주장, 스키마변경등의문장들 (5장) DB를활용한프로그램작성방법, 즉내포된 ( 또는동적 ) SQL, SQL/CLI, ODBC, SQL/PSM(Program Stored Moduel) (11장, 12장 ) 인덱스생성문 (CREATE INDEX) (15장,16장) 트랜잭션을제언하는명령문 (18장) 사용자의권한부여 (GRANT) 및취소 (REVOKE) 명령문 (23장) 트리거생성명령문 (22.1절) 객체지향모델기능 (9장) XML 문서저장및질의 (10 장 ) Slide4-51