Chapter 5 SQL: 확장된질의, 주장, 트리거, 뷰 Copyright 2004 Pearson Education, Inc.
목차 5.1 더복잡한 SQL 검색질의 5.2 주장으로제약조건및트리거로동작 5.3 SQL에서뷰 ( 가상테이블 ) 5.4 SQL에서스키마변경문 Slide 5-1
5.1 더복잡한 SQL 검색질의 널값비교 중첩질의와집합비교 상관중첩질의 SQL의 EXIST함수와 UNIQUE함수 명시적집합과애트리뷰트의재명명 조인된테이블과외부조인 집단함수 GROUP BY와 HAVING 절 Slide 5-2
SQL 질의에서의 NULL SQL 은애트리뷰트의 NULL( 널 ) 인지검사하는질의들이있음 NULL 값 = 알려지지않는값, 이용할수없는값, 적용할수없는값 SQL 에서는 NULL 과비교하기위해 IS 나 IS NOT 을사용 그이유는각 NULL 값은모든다른 NULL 값과는다르다고간주 = 형태의비교가적당하지않음 Query 14: 감독관이없는모든종업원들의이름을검색하시오. Q14: SELECT Fname, Lname FROM EMPLOYEE WHERE Super_ssn IS NULL Note: 조인조건을지정했을때, 조인애트리뷰트에대해서 NULL 값을갖는튜플들은결과에나타나지않음 Slide 5-3
중첩질의와집합비교 완전한 SELECT 질의 ( 중첩질의 ) 는다른질의 ( 외부질의 ) 의 WHERE 절내에명시될수있음 이전질의들의대부분은중첩을사용하는선택적인형태에명시될수있음 Query 1: Research 에서근무하는모든사원의이름과주소를검색하시오.. Q1: SELECT Fname, Lname, Address FROM EMPLOYEE WHERE Dno IN (SELECT Dnumber FROM DEPARTMENT WHERE Dname='Research' ) Slide 5-4
중첩질의와집합비교 ( 계속 ) 중첩질의는 Research 부서의번호 (number) 를선택함 외부질의는 DNO 값이중첩질의결과에있으면 EMPLOYEE 튜플을선택함 비교연산자 IN 은하나의값 v 와값들의집합 V 를비교함 v 가 V 에서요소들 (elements) 중의하나이면 TRUE 이됨 일반적으로중첩질의들을여러레벨들을포함할수있음 모호한애트리뷰트에대한참조규칙은가장안쪽의중첩질의에서선언된릴레이션에속함 이예제에서, 중첩질의는외부쿼리에대해상관없음 Slide 5-5
중첩질의와집합비교 ( 계속 ) Query 4: 일반직원이든, 프로젝트를담당하는부서의관리자이든간에성이 Smith 인사원을포함하는모든프로젝트에대해서프로젝트번호의리스트를검색하라. Q4A: SELECT FROM WHERE DISTINCT Pnumber PROJECT Pnumber IN (SELECT Pnumber FROM PROJECT DEPARTMENT, EMPLOYEE WHERE Dnum = Dnumber AND Mgr_ssn = Ssn AND Lname = Smith ) OR Pnumber IN (SELECT Pnumber FROM WHERE PROJECT DEPARTMENT, EMPLOYEE Dnum = Dnumber AND Mgr_ssn = Ssn AND Lname = Smith ) Slide 5-6
중첩질의와집합비교 ( 계속 ) 중첩질의에여러개의애트리뷰트조합도사용가능함 SELECT FROM WHERE DISTINCT Essn WORKS_ON (Pno, Hours) IN (SELECT Pno, Hours FROM WORKS_ON WHERE Essn = 123456789 ) ; 중첩질의에사용가능한연산 : IN, NOT IN, ANY ( 또는 SOME) 과함께결합하여 >, >=, <, <=, <> 등의비교연산자 SELECT FROM WHERE Lname, Fname EMPLOYEE Salary > ALL ( SELECT Salary FROM EMPLOYEE WHERE Dno = 5 ) ; Slide 5-7
상관중첩질의 만약중첩질의의 WHERE 절에있는조건에서외부질의에선언된릴레이션의애트리뷰트를참조하는경우에두질의는상관된질의라고함 Query 16: 부양가족의이름과 (Fname) 과성별이같은사원들의이름을검색하시오. Q16: SELECT E.Fname, E.Lname FROM EMPLOYEE AS E WHERE E.Ssn IN (SELECT Essn FROM DEPENDENT AS D WHERE E.Fname=D.Dependent_name AND E.Sex=D.Sex ); Slide 5-8
상관중첩질의 ( 계속 ) Q16 에서, 중첩질의는외부질의에서의각튜플에대해서로다른결과를가짐 중첩된 SELECT FROM WHERE 블록과 = 과 IN 비교연산자를이용해서작성된질의는항상단일블록질의로변환할수있음 예를들어, Q16 는 Q16A 로쓰여질수있음 Q16A: SELECT E.Fname, E.name FROM EMPLOYEE AS E, DEPENDENT AS D WHERE E.Ssn=D.Essn AND E.Sex = D. Sex AND E.Fname=D.Dependent_name Slide 5-9
SQL 의 EXISTS 함수와 UNIQUE 함수 EXISTS 는상관중첩질의의결과가빈 ( 튜플을포함하지않음 ) 것인지아닌지를검사하는데사용 다음장에서 EXISTS 를사용하여질의 16 를 Q16B 처럼다른형태로나타낼수있음 Slide 5-10
EXISTS 함수 ( 계속 ) Query 16: 부양가족의이름과 (Fname) 과성별이같은사원들의이름을검색하시오. Q12B: SELECT E.Fname, E.Lname FROM EMPLOYEE AS E WHERE EXISTS ( SELECT * FROM DEPENDENT AS D WHERE E.Ssn=D.Essn AND E.Sex=D.Sex AND E.Fname=D.Dependent_name) Slide 5-11
EXISTS 함수 ( 계속 ) Query 6: 부양가족이없는종업원들의이름을검색하시오. Q6: SELECT Fname, Lname FROM EMPLOYEE WHERE NOT EXISTS (SELECT * FROM DEPENDENT WHERE Ssn=Essn) ; Q6 에서, 상관중첩질의는 EMPOYEE 튜플과관계있는모든 DEPENDENT 튜플을검색 만약 DEPENDENT 튜플들이존재하지않으면, EMPLOYEE 튜플이선택됨 EXISTS 함수는 SQL 표현능력을높이기위해필요함 Slide 5-12
EXISTS 함수 ( 계속 ) Query 7: 부양가족을적어도한명이상가진관리자의이름을검색하라. Q7: SELECT Fname, Lname FROM EMPLOYEE WHERE EXISTS (SELECT * FROM DEPENDENT WHERE Ssn=Essn) AND EXISTS (SELECT * FROM DEPARTMENT WHERE Ssn=Mgr_ssn) ; Slide 5-13
EXISTS 함수 ( 계속 ) Query 3: 5 번부서가담당하는모든프로젝트에근무하는사원들의이름을검색하라. Q3A: SELECT Fname, Lname FROM EMPLOYEE WHERE NOT EXISTS ( ( SELECT Pnumber FROM PROJECT WHERE Dnum=5 ) EXCEPT (SELECT Pno FROM WORKS_ON WHERE Ssn=Essn) ); Slide 5-14
EXISTS 함수 ( 계속 ) Query 3: 5 번부서가담당하는모든프로젝트에근무하는사원들의이름을검색하라. Q3B: SELECT Fname, Lname FROM EMPLOYEE WHERE NOT EXISTS ( SELECT * FROM WORKS_ON B WHERE B.Pno IN (SELECT Pnumber FROM WORKS_ON WHERE Dnum=5 ) AND NOT EXISTS (SELECT * FROM WORKS_ON C WHERE C.Essn=Ssn AND C.Pno=B.Pno))); Slide 5-15
명시적집합과애트리뷰트의재명명 중첩질의대신에 WHERE 절에값들의명시적집합을사용할수있음 Query 17: 프로젝트번호 1,2,3 에서일하는모든사원의사회보장번호를검색하시오. Q13: SELECT DISTINCT Essn FROM WORKS_ON WHERE Pno IN (1, 2, 3) ; Slide 5-16
명시적집합과애트리뷰트의재명명 질의결과에나타나는임의의애트리뷰트에새이름부여 Q8A: SELECT E.Lname AS Employee_name, S.Lname AS Supervisor_name FROM EMPLOYEE AS E, EMPLOYEE AS S WHERE E.Super_ssn = S.Ssn ; Slide 5-17
SQL 에서조인된테이블과외부조인 FROM 절에조인연산의결과를지정할수있음 다른릴에레이션처럼보이지만조인연산의결과임 여러가지유형의조인을명시할수있도록허용 JOIN, NATURAL JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, CROSS JOIN, etc Slide 5-18
SQL2 에서조인된릴레이션특징 ( 계속 ) 이전 Q1 은다음과같이쓰여질수있음 : Q1A: SELECT Fname, Lname, Address FROM (EMPLOYEE JOIN DEPARTMENT ON Dnumber=Dno) WHERE Dname='Research ; 이거나 : Q1B: SELECT Fname, Lname, Address FROM (EMPLOYEE NATURAL JOIN DEPARTMENT AS DEP (Dname, Dno, Mssn, Msdate) WHERE DNAME='Research ; Slide 5-19
SQL2 에서조인된릴레이션특징 ( 계속 ) Examples: Q8: SELECT E.Lname, S.Lname FROM EMPLOYEE E S WHERE E.Super_ssn=S.Ssn Q8 는다음과같이쓰여질수있음 : Q8: SELECT E.Lname AS Employee_name, S.Lname AS Supervisor_name FROM (EMPLOYEE AS E LEFT OUTER JOIN EMPLOYEE AS S ON E.Super_ssn=S.Ssn) ; Slide 5-20
SQL2 에서조인된릴레이션특징 ( 계속 ) Another Example; Q2 는조인된테이블들에서다중조인형태로취할수있음 조인된테이블의개념을사용하여 Q2A 로표현 Q2A: SELECT Pnumber, Dnum, Lname, Address, Bdate, FROM ((PROJECT JOIN DEPARTMENT ON Dnum=Dnumber) JOIN EMPLOYEE ON Mgr_ssn=Ssn) WHERE Plocation='Stafford ; Slide 5-21
SQL2 에서조인된릴레이션특징 ( 계속 ) 오라클에서는 LEFT, RIGHT, FULL OUTER JOIN 을위해 +=, =+, +=+ 연산자를각각사용한다. Q8C: SELECT E.Lname, S.Lname FROM EMPLOYEE E, EMPLOYEE S WHERE E.Super_ssn += S.Ssn ; Slide 5-22
SQL 에서집단함수 SQL 에서는 COUNT, SUM, MAX, MIN, AVG 등을포함 Query 19: 종업원의봉급의합, 최고봉급, 최저봉급, 평균봉급을구하시오. Q19: SELECT SUM(Salary), MAX(Salary), MIN(Salary), AVG(Salary) FROM EMPLOYEE ; Slide 5-23
SQL 에서집단함수 ( 계속 ) Query 20: Research 부서에있는모든사원들의봉급의합과최고봉급, 최소봉급, 평균봉급을구하시오. Q20: SELECT SUM(Salary), MAX(Salary), MIN(Salary), AVG(Salary) FROM (EMPLOYEE JOIN DEPARTMENT ON Dno=Dnumber ) WHERE DNAME='Research' Slide 5-24
SQL 에서집단함수 ( 계속 ) Queries 21 and 22: (Q21) 회사의총 tk 원의수와, (Q22) Research 부서에근무하는총사원의수를검색하시오. Q21: SELECT COUNT (*) FROM EMPLOYEE Q22: SELECT COUNT (*) FROM EMPLOYEE, DEPARTMENT WHERE Dno=Dnumber AND Dname='Research Slide 5-25
SQL 에서집단함수 Query 23: 데이터베이스에서서로다른급여들의개수를구하라. Q19: SELECT COUNT (DISTINCT Salary) FROM EMPLOYEE ; Query 5: 둘이상의부양가족이있는모든사원의이름을구하라. Q5: SELECT Lname, Fname FROM EMPLOYEE WHERE ( SELECT COUNT(*) FROM DEPENDENT WHERE Ssn=Essn ) >= 2; Slide 5-26
그룹핑 : GROUP BY 와 HAVING 절 많은경우에, 릴레이션내에있는튜플들의여러부분집단으로나누고집단함수를적용하기도함 튜플의각부분집합은그룹화애트리뷰트 ( 들 ) 에대해값이같은튜플들로구성됨 각그룹마다독립적으로집단함수들을적용할수있음 SQL 은 SELECT 절에나타나는애트리뷰트들중에서그룹화애트리뷰트를 GROUP BY 절에명시 Slide 5-27
그룹핑 : GROUP BY 와 HAVING 절 ( 계속 ) Query 24: 각부서에대해서부서번호, 부서에속한사원들의수, 각부서에소속된사원들의평균급여를구하라. Q24: SELECT Dno, COUNT (*), AVG (Salary) FROM EMPLOYEE GROUP BY Dno ; Q24 에서, EMPLOYEE 튜플들을그룹화애트리뷰트인 DNO 값이같은튜플들끼리여러그룹으로분할함 각그룹의튜플들에대하여 COUNT 와 AVG 함수를적용함 SELECT 절에는그룹화애트리뷰트와각튜플들의그룹에적용할집단함수들만포함함 조인조건은그룹화와함꼐사용할수있음 Slide 5-28
그룹핑 : GROUP BY 와 HAVING 절 ( 계속 ) Query 25: 각프로젝트에대해서프로젝트번호, 프로젝트이름, 그프로젝트에서근무하는사원들의수를검색하시오. Q25: SELECT Pnumber, Pname, COUNT (*) FROM PROJECT, WORKS_ON WHERE Pnumber=Pno GROUP BY Pnumber, Pname ; 이경우, 두개의릴레이션을조인한후에그룹화와집단함수가적용됨 Slide 5-29
그룹핑 : GROUP BY 와 HAVING 절 ( 계속 ) 때로어떤조건들을만족하는그룹들에대해서만집단함수들의값을구하기도함 HAVING 절은집단함수를적용할그룹들을선택하는데사용됨 Slide 5-30
그룹핑 : GROUP BY 와 HAVING 절 ( 계속 ) Query 26: 두명이상의사원이근무하는각프로젝트에대해서프로젝트번호, 프로젝트이름, 프로젝트에서근무하는사원의수를검색하시오. Q26: SELECT Pnumber, Pname, COUNT(*) FROM PROJECT, WORKS_ON WHERE Pnumber=Pno GROUP BY Pnumber, Pname HAVING COUNT (*) >2 WHERE 절에있는선택조건은집단함수를적용할투플들을한정하고 HAVING 절은집단함수를적용할그룹들을선택한다 Slide 5-31
그룹핑 : GROUP BY 와 HAVING 절 ( 계속 ) Query 27: 각프로젝트에대해서프로젝트번호, 프로젝트이름, 5 번부서에근무하면서프로젝트에서근무하는사원의수를검색하라. Q27: SELECT Pnumber, Pname, COUNT(*) FROM PROJECT, WORKS_ON, EMPLOYEE WHERE Pnumber=Pno AND Ssn=Essn AND Dno=5 GROUP BY Pnumber, Pname WHERE 절에서명시한조건, 즉 5 번부서에근무하는투플들로만제한함 따라서집계함수 COUNT 에는 5 번부서에근무하는사원의수만계산됨 Slide 5-32
그룹핑 : GROUP BY 와 HAVING 절 ( 계속 ) 질의 28 ( 잘못작성된예 ): 6 명이상의사원이근무하는부서에대해서각부서번호와 40,000 달러가넘는급여를받는사원의수를검색하라. SELECT Dname, COUNT(*) FROM DEPARTMENT, EMPLOYEE WHERE Dnumber=Dno AND Salary > 40000 GROUP BY Dname HAVING COUNT (*) > 5; WHERE 절에서급여가 40,000 만달러가넘는투플들을한정하였고, 따라서 HAVING 절의 COUNT 함수는 40,000 만달러가넘는사원들의수가 6 명이상인그룹만선택함 원하는결과와다름. 즉, WHERE 절을먼저적용한후에 GROUP BY, HAVING 절을적용함. 질의 Q28 처럼작성해야제대로된결과를얻을수있음. Slide 5-33
그룹핑 : GROUP BY 와 HAVING 절 ( 계속 ) 질의 28: 6 명이상의사원이근무하는부서에대해서각부서번호와 40,000 달러가넘는급여를받는사원의수를검색하라. Q28: SELECT Dnumber, COUNT(*) FROM DEPARTMENT, EMPLOYEE WHERE Dnumber=Dno AND Salary > 40000 AND ( SELECT Dno FROM EMPLOYEE GROUP BY Dno HAVING COUNT (*) >5) ; 위의질의가제대로된결과를생성함. Slide 5-34
SQL 질의에대한논의와요약 SQL 에서하나의질의는 6 개의절로구성 필수적으로질의에나타내야하는두개의절은 SELECT 와 FROM 절임 6 개의절은다음순서로명시함 SELECT <attribute list> FROM <table list> [WHERE <condition>] [GROUP BY <grouping attribute(s)>] [HAVING <group condition>] [ORDER BY <attribute list>] Slide 5-35
SQL 질의에대한논의와요약 ( 계속 ) SELECT 절은결과에포함될애트리뷰트들이나함수를나열함 FROM 절은질의에서필요한모든릴레이션 ( 별명 ) 들을명시함 중첩질의들에사용되는릴레이션들은명시하지않음 WHERE 절은조인조건을포함하여 FROM 절에명시된릴레이션들로부터튜플들을선택하기위한조건들을명시 GROUP BY절은그룹화애트리뷰트를명시 HAVING 절은선택된튜플들의그룹들에대한조건을명시 ORDER BY절은질의결과를출력하는순서를명시 질의는 WHERE절, GROUP BY절과 HAVING절의순서로적용함으로써평가됨 Slide 5-36
5.2 주장으로제약조건및 트리거로동작명시 관계모델의기본적인제약조건들을제외한추가적인제약조건들을명시할때사용 CREATE ASSERTION CREATE TRIGGER Chapter 5-37
주장으로일반제약조건명시하기 일반적인제약조건을선언적주장을통해명시함 ( 예 ) 사원의급여가자신이근무하는부서의관리자의급여보다많으면안된다 라는제약조건 CREATE ASSERTION SALARY_CONSTRAINT CHECK ( NOT EXISTS ( SELECT * FROM EMPLOYEE E, EMPLOYEE M, DEPARTMENT D WHERE E.Salary > M.Salary AND E.Dno=D.Dnumber AND D.Mgr_ssn=M.Ssn ) ); Chapter 5-38
주장으로일반제약조건명시하기 ( 계속 ) 주어진조건을위해하는질의를명시 NOT EXISTS 절내에포함시킴 질의의결과가공집합이되어야함 이질의의결과가공집합이아니면주장은위배됨 Chapter 5-39
SQL 의트리거에대한소개 목적 : 조건이발생할때데이터베이스를모니터하기위해행동의유형을명시 트리거는주장과유사한구문으로표기되며다음사항을포함함 이벤트 (e.g., DB 갱신연산 ) : BEFORE, AFTER 키워드와함께사용 조건 : 트리거이벤트발생시검사할선택적인조건명시 동작 : 해당조건이만족되면수행 Chapter 5-40
SQL 의트리거에대한소개 ( 계속 ) 삽입과갱신연산을하는동안사원의월급을그의관리자와비교하기위한트리거의사용 R5: CREATE TRIGGER SALARY_VIOLATION BEFORE INSERT OR UPDATE OF SALARY, SUPERVISOR_SSN ON EMPLOYEE FOR EACH ROW WHEN (NEW.SALARY >(SELECT SALARY FROM EMPLOYEE WHERE SSN=NEW.SUPERVISOR_SSN)) INFORM_SUPERVISOR(NEW.Supervisor_ssn,NEW.Ssn ); Chapter 5-41
5.3 SQL 에서뷰 ( 가상테이블 ) SQL에서뷰는다른테이블들에서유도된 가상 테이블 뷰에적용할수있는갱신연산들은제한됨 물리적인형태로저장되지는않기때문에 뷰에대한질의는아무런제한을받지않음 몇개연산들을뷰로표현하여사용하는데편리함 Chapter 5-42
SQL 에서뷰 ( 가상테이블 ) ( 계속 ) 뷰를정의하는 SQL 명령 : CREATE VIEW 뷰의정의는 ( 가상 ) 테이블이름 애트리뷰트이름들의목록 함수나산술연산들을적용하거나, 기본릴레이션의애트리뷰트이름과다른이름을사용하고자할때이용 뷰의내용을나타내는질의 Chapter 5-43
SQL 에서뷰 ( 가상테이블 ) ( 계속 ) 뷰 ( 가상테이블 ) 의예제 V1: CREATE VIEW WORKS_ON1 AS SELECT Fname, Lname, Pname, Hours FROM EMPLOYEE, PROJECT, WORKS_ON WHERE Ssn=Essn AND Pno=Pnumber ; V2: CREATE VIEW DEPT_INFO(Dept)name, No_of_emps, Total_sal) AS SELECT Dname, COUNT(*), SUM(Salary) FROM DEPARTMENT, EMPLOYEE WHERE Dnumber=Dno GROUP BY Dname ; Chapter 5-44
SQL 에서뷰 ( 가상테이블 ) ( 계속 ) 생성된뷰 ( 가상테이블 ) 에대해 SQL 질의를명시함 QV1: SELECT Fname, Lname FROM WORKS_ON1 WHERE Pname= ProductX ; 어떤뷰가더이상필요하지않으면뷰를제거함 DROP VIEW WORKS_ON1; Chapter 5-45
뷰의구현, 뷰갱신, 및온라인뷰 질의수정 (query modification) 방식 뷰에대한질의를기본테이블들에대한질의로변환하여처리 단점 : 복잡한질의로정의된뷰들은비효율적 특히짧은시간내에뷰에많을질의가적용될때 QV1 질의의수정예 : SELECT FROM WHERE Fname, Lname EMPLOYEE, PROJECT, WORKS_ON Ssn=Essn AND Pno=Pnumber AND Pname= ProductX ; Chapter 5-46
뷰의구현, 뷰갱신, 및온라인뷰 ( 계속 ) 뷰의실체화 (view materialization) 임의뷰테이블을물리적으로생성하고유지하는방식 가정 : 뷰에다른질의들이사용됨 문제점 : 기본테이블이갱신되면뷰테이블도변경해야함 해결방법 : 오버헤드가적은점진적갱신 (incremental update) 기법필요 Chapter 5-47
뷰의구현, 뷰갱신, 및온라인뷰 ( 계속 ) 집단함수를사용하지않는단일뷰의갱신 뷰의갱신은단일기본테이블에대한갱신으로사상될수있음 조인을포함하는뷰의갱신 기본릴레이션들에대한갱신동작으로사상될수있음 경우에따라여러가지갱신방법으로사상될수있음 Chapter 5-48
SQL 에서뷰 ( 가상테이블 ) ( 계속 ) 뷰갱신질의의예 : UV1: UPDATE WORKS_ON1 SET Pname= ProductY WHERE Lname= Smith AND Fname= John AND Pname= ProductX ; Chapter 5-49
SQL 에서뷰 ( 가상테이블 ) ( 계속 ) (a) UPDATE WORKS_ON SET Pno = ( SELECT Pnumber FROM PROJECT WHERE Pname= ProductY ) WHERE Essn IN (SELECT Ssn FROM EMPLOYEE WHERE Lname= Smith AND Fname= John ) AND Pno =( SELECT Pnumber FROM PROJECT WHERE Pnmae= ProductX ); (b) UPDATE PROJECT SET Pname= ProductY WHERE Pname= ProductX ; Chapter 5-50
SQL 에서뷰 ( 가상테이블 ) ( 계속 ) 그룹화와집단함수를사용하여정의된뷰는갱신할 수없음 UV2: UPDATE DEPT_INFO SET Total_sal = 100000 WHERE Dname= Research ; 일반적으로다수의테이블을조인하여정의한뷰는갱신할수없음 WITH CHECK OPTION: SQL 에서뷰의갱신이가능하려면뷰정의에이절을추가해야함 뷰를갱신할수있는가를검사할수있고뷰의갱신을위한실행계획을찾아낼수있음 Chapter 5-51
5.4 SQL 에서스키마변경문 DROP 명령문 릴레이션, 도메인, 제약조건등이름을가진스키마요소를제거함 제거된릴레이션은질의, 갱신, 또는다른명령어들을더이상사용하지못함 예 : DROP SCHEMA COMPANY CASCADE ; DROP TABLE DEPENDENT CASCADE ; Chapter 5-52
5.4 SQL 에서스키마변경문 ( 계속 ) ALTER 명령문 기본릴레이션이나다름아름을가진스키마요소들의정의를변경함 예 : ALTER TABLE COMPANY.EMPLOYEE ADD COLUMN Job VARCHAR(12) ; ALTER TABLE COMPANY.EMPLOYEE DROP COLUMN Address CASCADE ; ALTER TABLE COMPANY.DEPARTMENT ALTER COLUMN Mgr_ssn DROP DEFAULT ; ALTER TABLE COMPANY.DEPARTMENT ALTER COLUMN Mgr_ssn SET DEFAULT 333445555 ; ALTER TABLE COMPANY.EMPLOYEE DROP CONSTRAINT EMPSUPERFK CASCADE; 애트리뷰트를새로추가할경우, 기존투플들은새로추가된애트리뷰트에대해 NULL 값을지정함 Slide 5-53