1 / 51

Chapter 4

Chapter 4. SQL: 데이터 정의 , 제약사항 , 기본 질의와 갱신. 목 차. 4.1 SQL 의 데이터 정의와 데이터 타입 4.2 SQL 에서 기본 제약 조건의 명시 4.3 SQL 에서의 기본 검색 질의 4.4 SQL 에서 삽입 , 삭제 , 갱신문 4.5 SQL 의 기타 기능. SQL 역사. System R 의 언어 SEQUEL(Structured English-Like Query Language) 에서 출발 ANSI 와 ISO 의 공동 표준 SQL1( 또는 SQL-86) 발표

sally
Download Presentation

Chapter 4

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 4 SQL: 데이터 정의, 제약사항, 기본 질의와 갱신

  2. 목 차 4.1 SQL의 데이터 정의와 데이터 타입 4.2 SQL에서 기본 제약 조건의 명시 4.3 SQL에서의 기본 검색 질의 4.4 SQL에서 삽입, 삭제, 갱신문 4.5 SQL의 기타 기능

  3. 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) 등의 선택적인 모듈

  4. 4.1 SQL의 데이터 정의와 데이터 타입 • 스키마 생성, 제거 • CREATE SCHEMA, DROP SCHEMA • 데이터베이스의 생성, 제거 • CREATE DATABASE, DROP DATABASE • 데이터베이스의 테이블들(릴레이션들)의 생성, 제거, 갱신 위해 사용 • CREATE TABLE, DROP TABLE, ALTER TABLE

  5. SQL에서 스키마와 카탈로그 개념 • 스키마 개념 • 동일한 데이터베이스 응용에 속해 있는 테이블이나 기타 구성 요소들을 그룹화하기 위해 사용 • CREATE SCHEMA COMPANY AUTHORIZATION ‘Jsmith’; • 카탈로그 • SQL 환경에 있는 스키마들의 모임 • 카탈로그에는 INFORMATION SCHEMA라는 특별한 스키마를 포함함. 이는 다른 모든 스키마들에 대한 정보를 가지고 있는 스키마임.

  6. 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) );

  7. CREATE TABLE EMPLOYEE ( Fname VARCHAR(15) NOTNULL, Minit CHAR, Lname VARCHAR(15) NOTNULL, Ssn CHAR(9) NOTNULL, 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) NOTNULL, Dnumber INT NOTNULL, Mgr_Ssn CHAR(9) NOTNULL, Mgr_Start_Date DATE, PRIMARY KEY (Dnumber), UNIQUE (Dname), FOREIGN KEY (Mgr_ssn) REFERENCE EMPLOYEE (Ssn)) ;

  8. 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)) ;

  9. 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)) ; % 위 테이블 정의문들은 외래키에 오류가 발생한다. - EMPLOYEE 테이블의 Super_ssn이 순환 참조함 - EMPLOYEE 테이블의 Dno는 아직 생성되지 않는 DEPARTMENT 테이블을 참조함 % 초기에는 이들 외래키를 제약 조건에 포함시키지 않고, 나중에 ALTER TABLE문을 사용하여 추가할 수 있음. [그림 4.1] 그림 4.7의 COMPANY 스키마를 정의하는 createtable 데이터 정의문

  10. 애트리뷰트 데이터 타입과 도메인 • 숫자(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 중 한가지 값을 가짐

  11. 애트리뷰트 데이터 타입과 도메인 • 날짜(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): • 날짜, 시간, 타임스탬프의 기간을 표시하는 상대값을 명시

  12. 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), . . . . . . . . . . .

  13. 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 );

  14. 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 EMPON DELETE SET DEFAULT ON UPDATE CASCADE );

  15. 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 DEPTON DELETE SET DEFAULT ON UPDATE CASCADE,FOREIGN KEY (SUPERSSN) REFERENCES EMPON DELETE SETNULLON UPDATE CASCADE );

  16. 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) ONDELETE SET DEFAULT ONUPDATE CASCADE ) ;

  17. CREATE TABLE DEPT_LOCATONS ( . . . . PRIMARY KEY (Dnumber, Dlocation), FOREIGN KEY (Dnumber) REFERENCES DEPARTMENT (Dnumber) ONDELETE CASCADE ONUPDATE CASCADE ) ; [그림 4.2] SQL 데이터 정의 예. 디폴트 값과 참조 트리거된 동작 명시

  18. 4.3 SQL에서의 기본 검색 질의 • SQL은 데이터베이스로부터 정보를 검색하는 문장을 가짐 • SELECT 문 • 관계 대수의 SELECT 연산과는 무관함 • SQL과 관계모델의 중요한 차이점 • SQL의 테이블(릴레이션)은 모든 애트리뷰트 값이 동일한 튜플을 하나 이상 가질 수 있음 • 따라서, SQL 릴레이션(테이블)은 튜플의 집합이 아니라 튜플의 다중집합(multi-set or bag)임 • 키 제약조건을 선언하거나 DISTINCT 선택사항을 사용하여 SQL 릴레이션들을 집합으로 제한할 수도 있음

  19. 기본 SQL의 구조 • SQL SELECT 문의 기본 형식은 사상(mapping) 또는 SELECT-FROM-WHERE 블록이라고 불림 SELECT <attribute list> FROM <table list> WHERE <condition> • <attribute list> : 질의 결과에 나타나는 애트리뷰트 이름 목록 • <table list> : 질의의 대상이 되는 릴레이션 목록 • <condition> : 질의 결과에 포함될 투플들을 표시하는 조건(부울) 식

  20. 관계 데이타베이스 스키마—그림3.5

  21. 대응하는 데이타베이스 상태 –그림3.6

  22. 기본 SQL의 구조 (계속) • 기본 SQL 질의들은 관계 대수의 SELECT, PROJECT, JOIN 연산으로 표현 가능함 • 하나의 릴레이션에 대한 간단한 질의 예제 • Query 0: ‘John B. Smith’인 종업원의 생일과 주소를 검색하시오. Q0: SELECT Bdate, AddressFROM EMPLOYEEWHERE Fname='John' AND Minit='B’AND Lname='Smith’; • 관계대수 연산의 SELECT-PROJECT 쌍과 유사 • SELECT 절은 프로젝트 애트리뷰트을 표시하고, WHERE 절은 선택 조건을 표시 • 그러나, 질의의 결과는 중복된 튜플을 포함

  23. 기본 SQL의 구조 (계속) • Query 1: ‘Research’ 부서에서 일하는 모든 종업원들의 이름과 주소를 검색하시오. Q1: SELECT Fname, Lname, AddressFROM EMPLOYEE, DEPARTMENTWHERE Dname='Research' AND Dnumber=Dno; • 관계대수 연산의 SELECT-PROJECT-JOIN과 유사 • (Dname='Research')은 선택 조건이고 관계대수에서 SELECT 연산에 해당함 • (Dnumber=Dno)은 조인조건이고 관계대수의 JOIN 연산에 해당함

  24. 기본 SQL의 구조 (계속) • Query 2: ‘Stafford’에 위치한 모든 프로젝트에 대해 프로젝트 번호(Pnumber), 담당부서 번호(Dnum), 부서 관리자의 성(Lname), 주소(Address), 생일(Bdate)을 검색하시오. Q2: SELECT Pnumber, Dnum, Lname, Address, Bdate FROM PROJECT, DEPARTMENT, EMPLOYEEWHERE Dnum=Dnumber AND Mgr_ssn=Ssn AND Plocation='Stafford‘; • Q2에서 두개의 조인조건이 존재 • 조인조건 Dnum=Dnumber는 프로젝트와 담당부서를 조인함 • 조인조건 Mgr_ssn=Ssn은 부서와 그 관리자를 조인

  25. 별명(alias), 재명명 및 투플변수 • SQL에서는 서로 다른 릴레이션에서 동일한 애트리뷰트가 사용될 수 있음 • 이 경우 릴레이션 이름과 함께 애트리뷰트 이름을 사용함으로써 모호함을 방지해야 함 • SQL 작성시 릴레이션 이름 다음에 (.)을 두고 애트리뷰트 이름을 명시함 • 예 : • EMPLOYEE.Lname, DEPARTMENT.Dname • EMPLOYEE.Name, DEPARTMENT.Name

  26. 별명(alias), 재명명 및 투플변수 (계속) • 어떤 질의들은 동일한 릴레이션을 두번 참조할 필요가 있음 • 이런 경우, 릴레이션 이름에 별명을 부여해야 함 • Query 8:종업원에 대해 이름(Fname)과 성(Lname), 직속 상사의 이름(Fname)과 성(Lname)을 검색하시오. Q8: SELECT E.Fname, E.Lname, S.Fname, S.LnameFROM EMPLOYEE AS E, EMPLOYEE AS S WHERE E.Super_ssn=S.Ssn ; • Q8에서, EMPLOYEE 릴레이션에 대해 두 개의 별명(튜플 변수) E와 S를 선언하여 사용함 • E와 S를 EMPLOYEE의 두 개의 사본으로 생각할 수 있음 • E는 감독을 받는 사원(종업원)을, S는 감독을 하는 사원(직속상사)을 나타냄

  27. 별명(alias), 재명명 및 투플변수 (계속) • 별명(튜플변수)를 선언할 때 AS를 생략할 수 있음 • (예) EMPLOYEE E, EMPLOYEE S • 릴레이션의 별명을 선언할 때 애트리뷰트 이름들을 재명명(rename)할 수도 있음 • (예) EMPLOYEE AS E(Fn, Mi, Ln, Ssn, Bd, Addr, Sex, Sal, Sssn, Dno) • 릴레이션이 한번 사용되더라도 필요시 별명(튜플변수)를 사용할 수 있음 Q1B: SELECT E.Fname, E.Lname, E.Address FROM EMPLOYEE E, DEPARTMENT D WHERE D.Dname=‘Research’ AND D.Dnumber=E.Dno;

  28. 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 ;

  29. ‘ * ’(별표)의 사용 • 선택된 튜플들의 모든 애트리뷰트 값들을 검색하려면 모든 애트리뷰트 이름을 명시적으로 열거하지 않고 단지 ‘*’을 사용함 • Examples: Q1C: SELECT *FROM EMPLOYEEWHERE Dno=5;Q1D: SELECT*FROM EMPLOYEE, DEPARTMENTWHERE Dname='Research' AND Dno=Dnumber; Q10A: SELECT*FROM EMPLOYEE, DEPARTMENT;

  30. DISTINCT의 사용 • SQL은 일반적으로 집합으로 취급하지 않음 • 중복된 튜플들이 나타날 수 있음 • 질의 결과에서 중복된 튜플들을 삭제하려면, 키워드 DISTINCT를 사용해야 함 • 예를 들어, Q11의 결과는 중복된 SALARY값들을 가지고 있지만 Q11A는 중복된 값들을 가지지 않음 Q11: SELECT ALL SalaryFROM EMPLOYEE; Q11A: SELECTDISTINCT SalaryFROM EMPLOYEE;

  31. 집합 연산 • SQL은 일부 집합 연산들을 수용함 • SQL에서는 합집합(UNION) 연산, 차집합(EXCEPT) 연산, 교집합(INTERSECT) 연산을 제공함 • 릴레이션에 대한 집합 연산의 결과는 튜플들의 집합임 • 즉, 중복된 튜플을 결과에서 제거됨 • 집합 연산들은 합집합 호환성을 갖는 릴레이션에만 적용 • 즉, 적용할 두 개의 릴레이션은 동일한 애트리뷰트들을 가지며 이 애트리뷰트는 같은 순서로 나타나야 함

  32. 집합 연산 (계속) • 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') ;

  33. 부분 문자열 비교 • LIKE 비교 연산자는 문자열의 일부에 대해 비교조건을 명시 • 부분 문자열은 두 개의 예약된 문자를 사용 • ‘%’은 0보다 큰 임의의 개수의 문자로 대체 • ‘-’는 임의의 한 개의 문자로 대체 • Query 12:주소가 ‘Houston, Texas’인 모든 사원을 검색하시오. Q12: SELECT Fname, Lname FROM EMPLOYEE WHERE Address LIKE '%Houston,TX%’ ;

  34. 부분 문자열 비교 (계속) • Query 12A: 1950년대에 태어난 모든 사원을 검색하시오. • 날짜 형식에 의해서 문자열의 8번째 문자가 ‘5’이어야 한다. • BDATA 값은 임의의 한 문자를 하나의 밑줄(_)로 대체하여 ‘________5_‘의 문자열을 사용함 Q12A: SELECT Fname, Lname FROM EMPLOYEE WHERE Bdate LIKE '_______5_' ;

  35. 산술 연산자 • SQL 질의 결과에서 표준 산술 연산자 더하기(+), 빼기(-), 곱하기(*), 나누기(/)를 수치값에 적용할 수 있음 • Query 13: ‘ProductX’ 프로젝트에 참여하는 모든 사원의 급여를 10% 올린 경우의 급여를 구하시오. Q13: SELECT E.Fname, E.Lname, 1.1*E.Salary AS Increased_salFROM EMPLOYEE AS E, WORKS_ON AS W, PROJECT AS PWHERE E.Ssn=W.Essn AND W.Pno=P.Pnumber AND P.Pname='ProductX’ ;

  36. 산술 연산자 (계속) • Query 14:급여가 30,000달러에서 40,000달러 사이에 있는 5번 부서의 모든 사원을 검색하라. Q14: SELECT *FROM EMPLOYEE WHERE (Salary BETWEEN30000 AND 40000) AND Dno = 5 ;

  37. 질의 결과의 정렬 • ORDERBY절은 하나 이상의 애트리뷰트 값 순서로 질의 결과 튜플을 정렬할 수 있음 • Query 15:사원 및 각 사원이 근무하는 프로젝트들의 리스트를 검색하는 데, 부서 이름 순서대로, 그리고 각 부서 내에서는 사원의 성과 이름의 알파벳 순서대로 구하시오. Q15: SELECT D.Dname, E.Lname, E.Fname, P.PnameFROM DEPARTMENT E, EMPLOYEE E, WORKS_ON W, PROJECT PWHERE D.Dnumber=E.Dno AND E.Ssn=W.Essn AND W.Pno=P.PnumberORDERBY D.Dname, E.Lname, E.Fname ;

  38. 질의 결과의 정렬 (계속) • 디폴트 정렬은 오름차순임 • 내림차순으로 정렬하고자 한다면 키워드 DESC로 지정 • 키워드ASC는 오름차순 정렬을 명시적으로 지정할 때 사용함 • Example • ORDER BY D.Dname DESC, E.Lname ASC, E.Fname ASC

  39. SQL 질의에 대한 요약 • SQL에서 간단한 검색 질의 하나는 4개까지의 절로 구성 • 필수적으로 질의에 나타내야 하는 두개의 절은 SELECT와 FROM 절임 • 4개의 절은 다음 순서로 명시함SELECT <attribute list> FROM <table list> [WHERE <condition>] [ORDER BY <attribute list>]

  40. SQL 질의에 대한 요약 (계속) • SELECT 절은 결과에 포함될 애트리뷰트들이나 함수를 나열함 • FROM 절은 질의에서 필요한 모든 릴레이션(별명)들을 명시함 • WHERE 절은 조인조건을포함하여 FROM 절에 명시된 릴레이션들로부터 튜플들을 선택하기 위한 조건들을 명시 • ORDER BY절은 질의 결과를 출력하는 순서를 명시

  41. 4.4 SQL에서 삽입, 삭제, 갱신문 • SQL에서 데이터베이스를 갱신하기 위해 사용되는 세가지 명령 • INSERT • DELETE • UPDATE

  42. INSERT • INSERT의 간단한 형식은 한 릴레이션에 튜플 한 개를 추가하는 데 사용 • 애트리뷰트 값들의 순서는 CREATE TABLE 명령에서 명시한 애트리뷰트들의 순서와 같아야 함

  43. INSERT (계속) • Example:U1: INSERT INTO EMPLOYEEVALUES ( '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') ;

  44. INSERT (계속) • Important Note:데이터베이스를 갱신할 때, DBMS는 DDL 명령에서 명시된 무결성 제약조건을 확인해야 함 • (예) 그림 3.6의 데이터베이스에서 아래 INSERT문은 무결성 제약조건을 위반하므로 실행이 거부된다. • U3: INSERTINTO EMPLOYEE (Fname, Lname, Ssn, Dno) VALUES (‘Robert’, ‘Hatcher’, ‘980760540’, 2) ; (외래키 Dno의 값 2가 DEPARTMENT 테이블에 존재하지 않음.) • U2A: INSERTINTO EMPLOYEE (Fname, Lname, Dno) VALUES (‘Robert’, ‘Hatcher’, 5) ; (기본키 Ssn의 값이 주어지지 않아 NULL값을 입력하려고 함.)

  45. 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 ;

  46. DELETE • 릴레이션에서 튜플들을 제거하는 명령 • 삭제할 튜플들의 조건을 나타내는 WHERE절을 포함함 • 한번에 한 테이블 내의 튜플들만 삭제함 • (CASCADE가 참조 무결성 제약조건에 명시되어 있지 않으면) • WHERE 절을 생략한 경우에는 테이블 내의 모든 튜플을 삭제 • 테이블은 데이터베이스 내에서 빈 테이블로 남게 됨 • WHERE 절의 조건을 만족하는 튜플 수에 따라 삭제함

  47. DELETE (계속) • Examples: U4A: DELETE FROM EMPLOYEEWHERE Lname='Brown’ ;U4B: DELETE FROM EMPLOYEEWHERE Ssn='123456789’ ;U4C: DELETE FROM EMPLOYEEWHERE Dno = 5 ;U4D: DELETE FROM EMPLOYEE ;

  48. UPDATE • 하나 이상의 튜플들의 애트리뷰트 값을 수정하기 위해 사용 • WHERE절은 릴레이션에서 수정할 튜플들을 선택하는 데 사용됨 • SET절은 변경할 애트리뷰트와 그들의 새로운 값을 명시함 • UPDATE 명령은 같은 릴레이션 내에서 여러 튜플을 수정할 수 있음

  49. UPDATE (계속) • Example:프로젝트 번호 10인 튜플에 대해 Plocation을 ‘Bellaire’로 변경하고 담당부서인 Dnum을 5로 변경하시오. U5: UPDATE PROJECTSET Plocation = 'Bellaire', Dnum = 5WHERE Pnumber=10 ;

  50. UPDATE (계속) • Example: 5번 부서에 있는 모든 종업원들의 봉급을 10% 인상한다. U6: UPDATE EMPLOYEESET Salary = Salary *1.1WHERE Dno = 5 ; • 변경된 SALARY 값은 원래 SALARY 값에 영향을 받음 • 오른쪽 SALARY 애트리뷰트는 수정되기 전의 SALARY 값을 • 왼쪾 SALARY 애트리뷰트는 수정된 후의 새로운 SALARY 값을 의미함

More Related