데이터베이스 (Database) : 스키마정의, 기본제약조건, 질의어 문양세강원대학교 IT특성화대학컴퓨터과학전공
데이터베이스강의개요 SQL 의데이터정의와데이터타입 SQL 에서기본제약조건의명시 SQL 에서스키마변경문 SQL 에서의기본질의 더복잡한 SQL 질의 SQL 에서삽입, 삭제, 갱신문 SQL 의기타기능 Page 2
SQL 개요 SQL 의유래 (Wiki) Structured Query Language IBM 연구소에서설계및구현 데이터정의어와조작어를모두포함 SQL 의진화 (Wiki) 1986: SQL1(SQL 86) 1992: SQL2(SQL 92) 현재의표준 : SQL3 라고불렸던 SQL 99 SQL 사용용어 릴레이션 = 테이블 투플 = 행 애트리뷰트 = 열 Page 3
SQL에서스키마와카타로그 SQL 스키마 스키마이름으로식별 스키마각원소에대한기술문뿐아니라스키마를소유하는사용자나계정과관련된권한 부여식별자도포함함 스키마원소 : 테이블, 제약조건, 뷰 ( 가상테이블 ), 도메인, 권한부여등 CREATE SCHEMA 문을이용하여생성함 예 : JSMITH 라는권한부여식별자를갖는사용자소유의스키마 COMPANY 를생성 CREATE SCHEMA COMPANY AUTHORIZATION JSMITH ; 카탈로그 특별스키마인 INFORMATION_SCHEMA 인포함하며, 이는카타로그내모든스키마 들과이들스키마내모든원소기술문들에대한정보를제공함 Page 4
CREATE TABLE 사용법 새로운릴레이션을생성하는데사용 릴레이션의이름명시 애트리뷰트이름, 값집합, NOT NULL 제약조건명시 키, 엔티티무결성, 참조무결성제약조건명시 예 : CREATE TABLE EMPLOYEE ( 스키마표현을생략 ) CREATE TABLE COMPANY.EMPLOYEE ( 스키마를명시적으로표현 ) SCHEMA Page 5
CREATE TABLE 사용예제 (1/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), SUPERSSN CHAR(9), DNO INT NOT NULL, PRIMARY KEY (SSN), FOREIGN KEY (SUPERSSN) REFERENCES EMPLOYEE(SSN), FOREIGN KEY (DNO) REFERENCES DEPARTMENT (DNUMBER)) ; Page 6
CREATE TABLE 사용예제 (2/6) CREATE TABLE DEPARTMENT ( DNAME VARCHAR(15) NOT NULL, DNUMBER INT NOT NULL, MGRSSN CHAR(9) NOT NULL, MGRSTARTDATE DATE, PRIMARY KEY (DNUMBER), UNIQUE (DNAME), FOREIGN KEY (MGRSSN) REFERENCE EMPLOYEE (SSN)) ; Page 7
CREATE TABLE 사용예제 (3/6) CREATE TABLE DEPT_LOCATONS ( DNUMBER INT NOT NULL, DLOCATION VARCHAR(15) NOT NULL, PRIMARY KEY (DNUMBER, DLOCATON), FOREIGN KEY (DNUMBER) REFERENCES DEPARTMENT (DNUMBER)); Page 8
CREATE TABLE 사용예제 (4/6) 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)) ; Page 9
CREATE TABLE 사용예제 (5/6) CREATE TABLE WORKS_ON ( ESSN CHAR(9) NOT NULL, PNO INT NOT NULL, HOURS DECIMAL(3, 1) [SINGLE,] NOT NULL, PRIMARY KEY (ESSN, PNO), FOREIGN KEY (ESSN) REFERENCES EMPLOYEE (SSN), FOREIGN KEY (PNO) REFERENCES PROJECT (PNUMBER)) ; Page 10
CREATE TABLE 사용예제 (6/6) CREATE TABLE DEPENDENT ( ESSN CHAR(9) NOT NULL, DEPENDENT_NAME VARCHAR(15) NOT NULL, SEX CHAR, BDATE DATE, REATIONSHIP VARCHAR(8), PRIMARY KEY (ESSN, DEPENDENT_NAME), FOREIGN KEY (ESSN) REFERENCES EMPLOYEE (SSN)) ; Page 11
SQL에서애트리뷰트타입과도메인 (1/2) 애트리뷰트의데이터타입 정수 : INTEGER, INT, SMALLINT 실수 : FLOAT, REAl, DOUBLE PRECISION 고정길이문자열 : CHAR(n), CHARACTER(n) 가변길이문자열 : VARCHAR(n), CHAR VARYING(n), CHARACTER VARYING(n) ( 문자열연결연산 :, 예: abc XYZ 는 abcxyz 와동일함 ) 비트열 : BIT(n) 고정길이, BIT VARYING(n) 가변길이 불리언 (boolean): True, False, Unknown 날짜와시간 : DATE(YYYY MM DD), TIME(HH:MM:SS) 타임스탬프 : DATE+TIME+ 초의소수점이하자리 ( 예 : 2002 09 27 09:12:47 648302) Page 12
SQL에서애트리뷰트타입과도메인 (2/2) CREATE DOMAIN 새로운도메인 ( 즉, 데이터타입 ) 을생성하는데사용 도메인의이름과데이터타입명시 새로생성된도메인을테이블생성시데이터타입으로사용가능 예 : CRAETE DOMAIN SSN_TYPE AS CHAR(9) 새롭게생성된 SSN_TYPE 을테이블생성시데이터타입으로변경가능 C 언어에서 #typedef 에해당함 Page 13
데이터베이스강의개요 SQL 의데이터정의와데이터타입 SQL 에서기본제약조건의명시 SQL 에서스키마변경문 SQL 에서의기본질의 더복잡한 SQL 질의 SQL 에서삽입, 삭제, 갱신문 SQL 의기타기능 Page 14
애트리뷰트제약조건과디폴트값명시 SQL 은애트리뷰트값으로 NULL 을허용함 NOT NULL 제약조건을지정하여애트리뷰트에 NULL 값을허용하지않을수도있음 예 : CREATE TABLE DEPARTMENT 디폴트값명시 ( DNUMBER INT NOT NULL, ) ; DEFAULT 문을이용하여애트리뷰트의디폴트값을명시 예 : CREATE TABLE EMPLOYEE 도메인값제약 ( DNO INT DEFAULT 1, ) ; CHECK 문을이용하여애트리뷰트의값집합을제약 예 : CREATE TABLE DEPARTMENT ( DNUMBER INT CHECK(DNUMBER > 0 AND DNUMBER < 21), ) ; Page 15
애트리뷰트제약조건과디폴트값명시예 (1/3) CREATE TABLE EMPLOYEE ( FNAME VARCHAR(15) NOT NULL, DNO INT NOT NULL DEFAULT 1, CONSTRAINT EMPPK PRIMARY KEY (SSN), CONSTRAINT EMPSUPERFK FOREIGN KEY (SUPERSSN) 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) ; Page 16
애트리뷰트제약조건과디폴트값명시예 (2/3) CREATE TABLE DEPARTMENT ( DNAME VARCHAR(15) NOT NULL, DNUMBER INT NOT NULL, MGRSSN CHAR(9) NOT NULL DEFAULT 888665555 MGRSTARTDATE CONSTRAINT DEPTPK PRIMARY KEY (DNUMBER), CONSTRAINT DEPTSK UNIQUE (DNAME), CONSTRAINT DEPTMGRFK DATE, FOREIGN KEY (MGRSSN) REFERENCE EMPLOYEE (SSN) ON DELETE SET DEFAULT ON UPDATE CASCADE) ; 해당투플이삭제되면그투플을참조하고있는모든투플을기본값으로변경하라 Page 17
애트리뷰트제약조건과디폴트값명시예 (3/3) CREATE TABLE DEPT_LOCATONS ( DNUMBER INT NOT NULL, DLOCATION VARCHAR(15) NOT NULL, PRIMARY KEY (DNUMBER, DLOCATON), FOREIGN KEY (DNUMBER) REFERENCES DEPARTMENT (DNUMBER) ON DELETE CASCADE ON UPDATE CASCADE) ; 해당투플이삭제되면그투플을참조하고있는모든투플을삭제하라 해당투플이변경되면그투플을참조하고있는모든투플을변경하라 Page 18
키와참조무결성제약조건의명시 (1/2) PRIMARY KEY 절 릴레이션의기본키를구성하는하나이상의애트리뷰트들을명시 예 : CREATE TABLE DEPARTMENT ( DNUMBER INTEGER PRIMARY KEY, ) ; UNIQUE 절 대체키 ( 또는보조키 ) 를명시 Page 19
키와참조무결성제약조건의명시 (2/2) FOREIGN KEY 절 참조무결성지정 외래키를정의할때참조무결성의위반시취할동작을명시할수있음 위반의종류 : ON DELETE, ON UPDATE 동작의종류 : SET NULL, SET DEFAULT, CASCADE 예 : ON DELETE CASCADE: 삭제되는투플을참조하고있는모든투플을삭제 ON UPDATE CASCADE: 수정되는투플을참조하는모든투플의외래키값을수정 된투플의새롭게갱신된기본키값으로수정 Page 20
제약조건에이름부여 CONSTRAINT 절에이름부여 예 : CONSTRAINT EMPSUPERFK FOREIGN KEY (SUPERSSN) REFERENCES EMPLOYEE(SSN), ON DELETE SET NULL ON UPDATE CASCADE; Page 21
CHECK를이용한제약조건명시 테이블 ( 투플기반 ) 제약조건명시 C REATE TABLE 문끝부분에명시 예 : 매니저의시작날짜가부서의창설일보다늦은값을가져야한다. CHECK(DEPT_CREATE_DATE CREATE DATE < MGRSTARTDATE); Page 22
데이터베이스강의개요 SQL 의데이터정의와데이터타입 SQL 에서기본제약조건의명시 SQL 에서스키마변경문 SQL 에서의기본질의 더복잡한 SQL 질의 SQL 에서삽입, 삭제, 갱신문 SQL 의기타기능 Page 23
DROP SCHEMA 스키마를제거하는명령어 예 : DROP SCHEMA COMPANY CASCADE; 옵션으로 CASCASE 선택시 : 제거되는스키마에포함된모든테이블, 도메인, 기타요소를모두제거함 RESTRICT 선택시 : 비어있는스키마를제거할때사용 ( 비어있지않으면제거가되지않음 ) Page 24
DROP TABLE 릴레이션을제거하는명령어 예 : DROP TABLE DEPENDENT CASCADE; 옵션으로 RESTRICT 선택시 : 임의의제약조건 ( 예 : 다른릴레이션에있는외래키에서참조하는경우 ) 이나뷰에서 참조되지않는테이블만을제거함 CASCASE 선택시 : 테이블과테이블을참조하는모든제약조건및뷰를자동적으로제거함 Page 25
ALTER TABLE (1/2) 기본테이블의정의를변경하는명령어 열 ( 애트리뷰트 ) 의추가 / 제거 열정의의변경 테이블제약조건들의추가 / 제거 옵션으로 CASCASE 선택시 : 기존열을삭제할경우열을참조하는모든제약조건들과뷰를제거함 RESTRICT 선택시 : 택시 제거되는열을참조하는뷰와제약조건이없는경우에만열을제거함 Page 26
ALTER TABLE (2/2) 예 1: EMPLOYEE 테이블에 JOB 애트리뷰트추가 ALTER TABLE COMPANY.EMPLOYEE ADD JOB VARCHAR(12); 예 2: EMPLOYEE 테이블에 ADDRESS 애트리뷰트제거 ALTER TABLE COMPANY.EMPLOYEE DROP ADDRESS CASCADE; 예 3: EMPLOYEE 테이블의 MGRSSN 애트리뷰트 DEFAULT 절변경 ALTER TABLE COMPANY.EMPLOYEE ALTER MGRSSN DROP DEFAULT; ALTER TABLE COMPANY.EMPLOYEE ALTER COLUMN MGRSSN SET DEFAULT 333445555 ; Page 27
데이터베이스강의개요 SQL 의데이터정의와데이터타입 SQL 에서기본제약조건의명시 SQL 에서스키마변경문 SQL 에서의기본질의 더복잡한 SQL 질의 SQL 에서삽입, 삭제, 갱신문 SQL 의기타기능 Page 28
SQL의기본질의 SELECT문 데이터베이스에서정보를검색하는기본문장 여기서의 SELECTEC 문은관계대수의실렉트연산과동일하지는않음 제 6 장에서논의한관계모델과는달리 SQL 의테이블 ( 릴레이션 ) 은모든애 트리뷰트들의값이동일한투플을하나이상가질수도있음 따라서 SQL 테이블은투플들의집합이아니라투플들의다중집합 (multi set or bag) 임 사용자는키제약조건이나 DISTINCT 선택사항을사용하여 SQL 릴레이 션들을집합으로제한할수도있음 Page 29
SELECT--WHERE 구조 SELECT 문의구조자료 SELECT < 애트리뷰트목록 > < 테이블목록 > WHERE < 조건 > < 애트리뷰트목록 >: 질의결과에나타나는애트리뷰트이름목록 < 테이블목록 >: 질의대상이되는릴레이션목록 < 조건 >: 질의결과의투플들이만족해야하는조건 ( 부울 ) 식 SQL 질의와관계대수 SQL 은관계대수의 SELECT, PROJECT, JOIN 명령으로표현가능함 SELECT 절 : 프로젝션애트리뷰트에해당 WHERE 절 : 선택조건, 조인조건에해당 SQL 질의의결과 동일한속성값을가지는투플들이중복될수있음 (DISTINCT 사용하면 ) Page 30
SELECT--WHERE 예제 (1/3) 질의 0 이름이 John B. Smith 인사원의생일 (BDATE) 과주소 (ADDRESS) 를검색하시오. SELECT BDATE, ADDRESS EMPLOYEE WHERE FNAME= John AND MINIT= B AND LNAME= Smith ; 관계대수표현 Π BDATE, ADDRESS (σ NAME= John AND MINIT= B AND LNAME= Smith (EMPLOYEE)) Page 31
SELECT--WHERE 예제 (2/3) 질의 1 Research 부서에서일하는모든사원의이름 (FNAME, LNAME) 과주소를검색하시오. SELECT FNAME, LNAME, ADDRESS EMPLOYEE, DEPARTMENT WHERE DNAME= Research AND DNUMBER=DNO ; 관계대수연산 SELECT PROJECT JOIN 과유사 SELECT 절은관계대수의 PROJECT 연산에해당 WHERE 절에서 DNAME= Research 은선택조건, 관계대수에서 SELECT 연산에해당 WHERE 절에서 DNUMBER=DNO 는조인조건, 관계대수의 JOIN 연산에해당 Page 32
SELECT--WHERE 예제 (3/3) 질의 2 Stafford 에위치한모든프로젝트에대하여프로젝트번호, 담당부서번호, 부서관리자의 성, 주소, 생일을검색하라. SELECT PNUMBER, DNUM, LNAME, ADDRESS, BDATE PROJECT, DEPARTMENT, EMPLOYEE WHERE DNUM=DNUMBER AND MGRSSN=SSN AND PLOCATION= Stafford ; 두개의조인조건이존재 조인조건 DNUM=DNUMBER 는프로젝트와담당부서를조인 조인조건 MGRSSN=SSN 은부서와담당관리자를조인 Page 33
모호한애트리뷰트이름과별명사용 (1/3) 동일한이름을갖는애트리뷰트의사용 서로다른릴레이션에서동일한이름을갖는애트리뷰트가사용될수있음 릴레이션이름과함께애트리뷰트이름을사용함으로써모호함을방지해야함 질의작성시릴레이션이름다음에점 () (.) 을두고애트리뷰트이름을명시함 질의 1A Research 부서에서일하는모든종업원들의이름과주소를검색하시오. SELECT FNAME, EMPLOYEE.NAME, ADDRESS EMPLOYEE, DEPARTMENT WHERE DEPARTMENT.NAME= Research AND DEPARTMENT.DNUMBER=EMPLOYEE.DNUMBER E E E U E ; Page 34
모호한애트리뷰트이름과별명사용 (2/3) 동일한릴레이션을두번참조하는경우 동일한릴레이션을두번참조하는경우에도모호성이발생함 이경우에도모호함을방지하기위하여릴레이션이름의별명을애트리뷰트이름앞에붙 여서사용함 질의 8 종업원에대해, 종업원의성과이름, 직속감독자의성과이름을검색하시오. SELECT E.FNAME, E.LNAME, S.FNAME, S.LNAME EMPLOYEE E, EMPLOYEE S // EMPLOYEE에대한별명 WHERE E.SUPERSSN=S.SSN ; 위예는 EMPLOYEE 에대해서두개의별명 (alias) E 와 S 를선언하여사용함 Page 35
모호한애트리뷰트이름과별명사용 (3/3) 릴레이션에대한별명 키워드 AS 의이용 From 절의릴레이션이름바로다음에오거나, EMPLOYEE AS E 처럼키워드 AS 를이용 해서릴레이션과연관시킴 애트리뷰트이름재명명 질의내에서별명을주어릴레이션의애트리뷰트를재명명할수도있음 EMPLOYEE AS E(FN, MI, LN, SSN, BD, ADDR, SEX, SAL, SSSN, DNO) ; 별명 FN 은 FNAME, MI 은 MINIT, LN 은 LNAME 대신이용 질의 1B 별명을이용하여질의 1A 를간단히나타낼수있음 SELECT E.FNAME, E.NAME, E.ADDRESS EMPLOYEE E, DEPARTMENT D // EMPLOYEE AS E, DEPARTMENT AS D WHERE D.NAME= Research AND D.DNUMBER=E.DNUMBER ; Page 36
WHERE의생략과 의사용 (1/3) WHERE 절의생략 SQL 에서 WHERE 절을생략하면투플선택에대한조건이없다는것을의미함 절에있는테이블의모든투플이조건을만족하게됨 질의 9 데이터베이스에서 EMPLOYEE 의모든 SSN 을 선택하시오. 질의 10 SELECT SSN EMPLOYEE ; EMPLOYEE 의 SSN 과 DEPARTMENT 의 DNAME 의모든 조합을선택하시오. SELECT SSN, DNAME EMPLOYEE, DEPARTMENT ; Page 37
WHERE의생략과 의사용 (2/3) 선택된투플들의모든애트리뷰트값들을검색하는경우 모든애트리뷰트이름을명시적으로열거하지않고단지 를사용함 질의 1C 5 번 DEPARTMENT 에서일하는 EMPLOYEE 투플들의모든애트리뷰트값들을검색하라 SELECT EMPLOYEE WHERE DNO=5 ; Page 38
WHERE의생략과 의사용 (3/3) 질의 1D Research 부서에서일하는모든종업원들에대하여 EMPLOYEE 의모든애트리뷰트들과 DEPARTMENT 의모든애트리뷰트들을검색하라. SELECT EMPLOYEE, DEPARTMENT 질의 10A WHERE DNAME= Research AND DNO=DNUMBER ; 릴레이션 EMPLOYEE 와 DEPARTMENT 의카티션프로덕트결과를모두검색하라. 릴레이션와의카티션프로덕트결과를모두검색하라 SELECT EMPLOYEE, DEPARTMENT ; Page 39
SQL에서집합으로서의테이블 (1/2) 투플의중복허용 릴레이션이나질의의결과로중복된투플들이나타날수있으므로, SQL 에서는일반적으 로릴레이션을집합으로취급하지않음 중복된투플의삭제 질의 11 SELECT 항목에서키워드 DISTINCT 를사용 DISTINCT 는질의결과에서유일한투플들만남기라는의미의키워드임 모든사원의급여를검색하라. SELECT 질의 11A SALARY EMPLOYEE ; 모든사원의구별되는급여를검색하라. SELECT DISTINCT SALARY EMPLOYEE ; Page 40
SQL에서집합으로서의테이블 (2/2) SQL 에서의집합연산 합집합 (UNION), 차집합 (EXCEPT), 교집합 (INTERSECT) 릴레이션에대한집합연산의결과는투플들의집합임 중복된투플을결과에서제거함 질의 4 성이 ʹSmithʹ인종업원 ( 일반직원혹은프로젝트를담당하는부서의관리자 ) 이참여하는프로젝트의프로젝트번호목록을작성하시오. ( SELECT PNUMBER // Smith 가관리자인 projects WHERE PROJECT, DEPARTMENT, EMPLOYEE DNUM=DNUMBER AND MGRSSN=SSN AND LNAME=ʹSmithʹ) UNION ( SELECT PNUMBER // Smith 가참여하는 projects PROJECT, WORKS_ON, EMPLOYEE WHERE PNUMBER=PNO PNO AND ESSN=SSN AND LNAME=ʹSmithʹ) ; Page 41
부분문자열패턴비교와산술연산자 (1/3) 문자열에대한비교 SQL 은 LIKE 비교연산자를사용하여문자열 ( 혹은부분문자열 ) 에대해비교조건을 적용할수있음 부분문자열을표현할때 % % 는임의의개수의문자를의미하고, _ 는임의의한문자를 의미함 Page 42
부분문자열패턴비교와산술연산자 (2/3) 질의 12 주소가 Houston, Texas 인모든종업원을검색하시오. SELECT FNAME, LNAME EMPLOYEE 질의 12 A WHERE ADDRESS LIKE ʹ%Houston, TX% ; [WHERE ADDRESS LIKE *Houston, TX* ;] // 다른버전의의예 1950 년대에태어난모든사원을검색하라. SELECT FNAME, LNAME EMPLOYEE WHERE BDATE LIKE 5 ; [WHERE BDATE LIKE??5???????? ;] // 다른버전의예 Page 43
부분문자열패턴비교와산술연산자 (3/3) 질의內산술식허용 질의 13 ProductX 프로젝트에참여하는모든사원의급여를 10% 올린경우의급여를검색하라. SELECT [SELECT FNAME, LNAME, 1.1*SALARY FNAME, LNAME, 1.1*SALARY AS NEWSALARY] EMPLOYEE, WORKS_ON, ON PROJECT 질의 14 WHERE SSN=ESSN AND PNO=PNUMBER AND PNAME= ProductX ; 급여가 30,000$ 에서 40,000$ 사이에있는 5 번부서의모든사원을검색하라. SELECT * EMPLOYEE WHERE (SALARYBETWEEN 30000AND 40000) AND DNO=5 Page 44
질의결과의정렬 (1/2) 질의결과의정렬 ORDER BY 절 하나이상의애트리뷰트값순서로질의결과투플을정렬 Default 정렬은오름차순 (ASC) 임 키워드 DESC: 내림차순으로정렬 Descending 키워드 ASC: 오름차순정렬 Ascending 예 : ORDER BY DNAME DESC, LANME ASC, FNAME ASC Page 45
질의결과의정렬 (2/2) 질의 15 프로젝트에참여하는종업원을부서의알파벳순서대로, 각부서내에서는성과이름의알 파벳순서대로출력하시오. SELECT WHERE DNAME, LNAME, FNAME, PNAME DEPARTMENT, EMPLOYEE, WORKS_ON, PROJECT DNUMBER=DNO AND SSN=ESSN AND PNO=PNUMBER ORDER BY DNAME, LNAME, FNAME ; Page 46
데이터베이스강의개요 SQL 의데이터정의와데이터타입 SQL 에서기본제약조건의명시 SQL 에서스키마변경문 SQL 에서의기본질의 더복잡한 SQL 질의 SQL 에서삽입, 삭제, 갱신문 SQL 의기타기능 Page 47
더복잡한 SQL 질의 널값을포함한비교 중첩질의 (nested query) 와집합비교 상관중첩질의 SQL 의 EXISTS 함수와 UNIQUE 함수 SQL 에서명시적집합과애트리뷰트의재명명 SQL 에서조인된테이블 SQL 에서집단함수 그룹핑 : Group by 와 Having 절 SQL 에대한논의와요약 Page 48
널값을포함한비교 널값의의미 알려지지않은값 ( 존재하지만알지못하는 ) 이용할수없거나보류해둔값 ( 존재하지만의도적으로보류한 ) 적용할수없는애트리뷰트 ( 이투플에는정의되지않는 ) 애트리뷰트의값이 NULL 인지검사하는연산자 ( 아래질의 18 참조 ) IS NULL IS NOT NULL 질의 18 상사가없는모든종업원들의이름을검색하시오. SELECT FNAME, LNAME EMPLOYEE WHERE SUPERSSN IS NULL ; Page 49
중첩질의 (nested query) 와집합비교 (1/5) 중첩질의 다른질의의 WHERE 절내에완전한 SELECT 질의가나타나는형태 외부질의와내부질의로구분됨 비교연산자 IN 외부질의의한투플에대하여, 이투플이임의의투플집합의원소가되는지비교하는 연산임 집합에있어서원소여부를확인하는 와동일한기능을함 Page 50
중첩질의 (nested query) 와집합비교 (2/5) 질의 4A 성이 Smith 인종업원 ( 일반직원혹은프로젝트를담당하는부서의관리자 ) 이참여하는 프로젝트의프로젝트번호목록을작성하시오. SELECT DISTINCT PNUMBER PROJECT WHERE PNUMBER IN ( SELECT PNUMBER OR WHERE PNUMBER IN ( SELECT PNO PROJECT, DEPARTMENT, EMPLOYEE DNUM=DNUMBER AND MGRSSN=SSN AND LNAME= Smith ) WORKS_ON, EMPLOYEE WHERE ESSN=SSN AND LNAME= Smith ) ; Page 51
중첩질의 (nested query) 와집합비교 (3/5) 질의 : SSN 이 123456789 인사원이일하는프로젝트와일한시간의조합이 동일한사원의 SSN 을검색하라. SELECT DISTINCT ESSN WORKS_ON WHERE (PNO, HOURS) IN ( SELECT PNO, HOURS WORKS_ON WHERE SSN= 123456789 ); Page 52
중첩질의 (nested query) 와집합비교 (4/5) = ALL 연산자 하나의값 v 가집합 V 내의모든값들과같으면참이됨 ALL 앞에 = 대신 >, >=, <, <=, < 를사용할수도있음 = ANY(= SOME) 연산자 하나의값 v 가집합 V 내의어떤하나의값과같으면참이됨 ANY(SOME) 앞에 = 대신 >, >=, <, <=, < 를사용할수도있음 질의 : 5 번부서에근무하는모든사원보다급여가많은사원을검색하라. SELECT LNAME, FNAME EMPLOYEE WHERE SALARY >ALL( SELECT SALARY EMPLOYEE WHERE DNO=5) ; Page 53
중첩질의 (nested query) 와집합비교 (5/5) 중첩질의에서애트리뷰트이름의모호성 만약외부질의문의 절에있는릴레이션과내부질의문의 절에있는다른릴 레이션에동일한애트리뷰트이름이있다면애트리뷰트이름의모호성이발생할수있음 애매한애트리뷰트에대한참조규칙은항상가장안쪽가까운질의문에선언된릴레이션 을먼저참조하는것임 내부질의에서외부질의에명시된릴레이션의애트리뷰트를참조하려면별명을사용해 야함 질의 16 자신의부양가족과이름, 성별이같은종업원들의이름을검색하시오. SELECT E.FNAME, E.LNAME EMPLOYEE AS E WHERE E.SSN IN ( SELECT ESSN DEPENDENT WHERE E.FNAME=DEPENDENT_NAME AND E.SEX=SEX) ; Page 54
상관중첩질의 (correlated nested query) (1/2) 상관된질의 (Correlated Query) 내부질의의 WHERE 절에있는조건에서외부질의에선언된릴레이션의일부애트리뷰 트를참조하는경우에두질의를상관된질의라고함 상관중첩질의의예 ( 질의 16) 자신의부양가족과이름, 성별이같은종업원들의이름을검색하시오. SELECT E.FNAME, E.LNAME EMPLOYEE AS E WHERE E.SSN IN ( SELECT ESSN DEPENDENT WHERE E.FNAME=DEPENDENT_NAME AND E.SEX=SEX) ; 비중첩질의로의변환 중첩된 SELECT WHERE 블록과 = 및 IN 비교연산자를이용해서작성 한질의는항상단일블록질의로변환할수있음 Page 55
상관중첩질의 (correlated nested query) (2/2) 질의 16 을비중첩질의로변환한예 : 질의 16A 자신의부양가족과이름, 성별이같은종업원들의이름을검색하시오. SELECT WHERE E.FNAME, E.LNAME EMPLOYEE AS E, DEPENDENT AS D E.SSN=D.ESSN AND E.FNAME=DEPENDENT_NAME AND E.SEX=D.SEX ; Page 56
EXISTS 함수 (1/4) EXISTS 함수 상관된중첩질의에서내부질의의결과가공집합인가를검사함 EXISTS(Q): 질의 Q 의결과에최소한한개의투플이있다면참을반환 질의 16B 자신의부양가족과이름, 성별이같은종업원들의이름을검색하시오. SELECT E.FNAME, E.LNAME EMPLOYEE E WHERE EXISTS ( SELECT * WHERE DEPENDENT E.SSN=ESSN AND SEX=E.SEX AND E.FNAME=DEPENDENT_NAME) ; Page 57
EXISTS 함수 (2/4) NOT EXIST 함수 상관된중첩질의에서내부질의의결과가공집합인가를검사함 NOT EXISTS(Q): 질의 Q 의결과에투플이없다면참을반환 질의 6 부양가족이없는종업원들의이름을검색하시오. SELECT FNAME, LNAME EMPLOYEE WHERE NOT EXISTS ( SELECT * DEPENDENT WHERE SSN=ESSN) ; Page 58
EXISTS 함수 (3/4) 질의 7 부양가족이적어도한명이상있는관리자의이름을검색하라. SELECT FNAME, LNAME EMPLOYEE WHERE EXISTS ( SELECT * AND WHERE EXISTS ( SELECT * DEPENDENT SSN=ESSN) DEPARTMENT WHERE SSN=MGRSSN) ; Page 59
EXISTS 함수 (4/4) 질의 3B 5 번부서가담당하는모든프로젝트에근무하는사원들의이름을검색하라. ( 각사원에대하여그사원이근무하지않는 5 번부서가관리하는프로젝트가존재하지않 는경우에그사원을검색하라 ) SELECT FNAME, LNAME EMPLOYEE WHERE NOT EXISTS ( SELECT * B.PNO 가 5 번부서에서관리하는프로젝트다 B.PNO 프로젝트에서근무하는사원이존재하지않는다 WORKS_ON AS B WHERE (B.PNO IN ( SELECT AND PNUMBER PROJECT WHERE DNUM=5)) NOT EXISTS ( SELECT * WORKS_ON AS C WHERE C.PNO=B.PNO)) ; Page 60
명시적집합과애트리뷰트재명명 (1/2) WHERE 절에값들의명시적집합사용가능 질의 17 프로젝트번호 1, 2, 3 에서일하는모든종업원들의 SSN 을검색하시오. SELECT DISTINCT ESSN WORKS_ONON WHERE PNO IN (1, 2, 3) ; Page 61
명시적집합과애트리뷰트재명명 (2/2) 질의결과애트리뷰트의재명명 결과에나타나는애트리뷰트의이름은키워드 AS 를사용하여원하는새이름으로재명명 할수있음 AS 를사용하여애트리뷰트와릴레이션에별명을붙일수있음 질의 8A 종업원에대해, 종업원의성과이름, 직속감독자의성과이름을검색하시오. SELECT WHERE E.LNAME AS EMPLOYEE_NAME, S.LNAME AS SUPERVISOR_ NAME EMPLOYEE AS E, EMPLOYEE AS S E.SUPERSSN=S.SSN; Page 62
SQL에서조인된테이블 절에조인연산의결과를지정 질의의 절에조인연산의결과를지정할수있음 질의 1A Research 부서에서일하는모든종업원들의이름과주소를검색하시오. SELECT FNAME, LNAME, ADDRESS (EMPLOYEE JOIN DEPARTMENTON DNO=DNUMBER) DNUMBER) 질의 1B WHERE DNAME= Research ; SELECT FNAME, LNAME, ADDRESS (EMPLOYEE NATURALJOIN (DEPARTMENT AS DEPT (DNAME, DNO, MSSN, MSDATE))) WHERE DNAME= Research ; Page 63
집단함수 (Aggregate Function) (1/4) 집단함수 SQL 에서는 COUNT, SUM, MAX, MIN, AVG 등의집단 (or 내장 ) 함수를제공함 COUNT 함수는질의에서투플이나값의개수를반환함 SUM, MAX, MIN, AVG 함수는수치값들의다중집합에적용되며, 각각합, 최대값, 최소 값, 평균값을반환함 질의 19 종업원의급여의합, 최고급여, 최저급여, 평균급여를구하시오. SELECT SUM (SALARY), MAX (SALARY), MIN (SALARY), AVG (SALARY) EMPLOYEE ; Page 64
집단함수 (Aggregate Function) (2/4) 집단함수 조건을만족하는투플들을대상으로집단함수값들을얻으려면, WHERE 절에서투플의 조건을제시할수있음 질의 20 Research 부서에있는모든종업원들의급여의합과최고급여, 최소급여, 평균급여를 구하시오. SELECT SUM (SALARY), MAX (SALARY), MIN (SALARY), AVG (SALARY) EMPLOYEE, DEPARTMENT WHERE DNO=DNUMBER AND DNAME= Research ; Page 65
집단함수 (Aggregate Function) (3/4) COUNT( ): 투플들의수를반환 질의 21 회사내의총종업원의수를검색하시오. SELECT COUNT ( ) 질의 22 EMPLOYEE ; Research 부서에속해있는종업원의수를검색하시오. SELECT COUNT ( ) EMPLOYEE, DEPARTMENT WHERE DNO=DNUMBER DNUMBER AND DNAME= Research ; Page 66
집단함수 (Aggregate Function) (4/4) 특정투플을선택하기위해집단함수이용 : 중첩질의이용 질의 5 둘이상의부양가족이있는모든사원의이름을검색하시오. SELECT LNAME, FNAME EMPLOYEE WHERE ( SELECT COUNT ( ) DEPENDENT WHERE SSN=ESSN ) >= 2 ; Page 67
Grouping: Group by & Having (1/7) 그룹화 (grouping) 특정애트리뷰트 ( 들 ) 의값이같은투플들을모아서그룹을생성하고, 이들그룹에대하여 집단함수를적용함 이때, 특정애트리뷰트들을그룹화애트리뷰트라하며, SQL 의 GROUP BY 절에지정함 대부분의경우, SELECT 절에그룹화애트리뷰트 ( 들 ) 를지정하여, 그값과그값에해당하 는투플그룹에집단함수를적용한결과를동시에반환함 Page 68
Grouping: Group by & Having (2/7) 질의 24 각부서에대해서, 부서번호, 부서내에있는종업원의수, 평균봉급은? SELECT DNO, COUNT ( ), AVG (SALARY) EMPLOYEE GROUP BY DNO ; EMPLOYEE 투플들을 DNO 값을기준으로분할하여그룹들을생성함 그다음에, 각그룹의투플들에대하여 COUNT 와 AVG 함수를적용함 Page 69
Grouping: Group by & Having (3/7) 질의 25 각프로젝트에대해서프로젝트번호, 프로젝트이름, 그프로젝트에서근무하는사원들의 수를검색하라. SELECT PNUMBER, PNAME, COUNT ( ) WHERE PROJECT, WORKS_ON PNUMBER=PNO GROUP BY PNUMBER ; Page 70
Grouping: Group by & Having (4/7) Having: GROUP BY 절에대한조건을제시할수있음 질의 26 두명이상의사원이근무하는각프로젝트에대해서프로젝트번호, 프로젝트이름, 프로 젝트에서근무하는사원의수를검색하라. SELECT WHERE PNUMBER, PNAME, COUNT( ) PROJECT, WORKS_ONON PNUMBER=PNO GROUP BY PNUMBER ; HAVING COUNT( ) >= 2 각그룹에대해조건체크 Page 71
Grouping: Group by & Having (5/7) Page 72
Grouping: Group by & Having (6/7) 질의 27 각프로젝트에대해서프로젝트번호, 프로젝트이름, 5 번부서에속하면서프로젝트에서 근무하는사원의수를검색하라. SELECT PNUMBER, PNAME, COUNT ( ) WHERE PROJECT, WORKS_ON, EMPLOYEE PNUMBER=PNO AND SSN=ESSN AND DNO=5 GROUP BY PNUMBER ; Page 73
Grouping: Group by & Having (7/7) 질의 28 6 명이상의사원이근무하는각부서에대해서부서번호와 40,000000 달러가넘는급여를받 는사원의수를검색하라. SELECT DNUMBER, COUNT ( ) WHERE DEPARTMENT, EMPLOYEE DNUMBER=DNO AND SALARY > 40000 AND DNO IN ( SELECT DNO GROUP BY EMPLOYEE DNO GROUP BY DNUMBER ; HAVING COUNT ( ) >= 6) Page 74
SQL에대한논의와요약 SQL 질의는 6 개의절로구성되지만, 필수사항은처음의두개뿐임 질의의평가순서 WHERE 절 GROUP BY HAVING SELECT ORDER BY SELECT < 애트리뷰트목록 > SELECT 절은질의결과에포함될애트리뷰트들이나함수를나열함 < 테이블목록 > 절은질의의대상을명시하는곳으로조인된릴레이션이나릴레이션 ( 들 ) 을지정함 [WHERE < 조건 >] WHERE 절은투플들에대한조건을명시함 [GROUP BY < 집단화애트리뷰트 >] GROUP BY절은그룹화애트리뷰트들을지정함 [HAVING < 집단조건 >] HAVING 절은그룹들에대한조건을지정함 [ORDER BY < 애트리뷰트목록 >] ORDER BY 절은정렬기준이되는애트리뷰트 ( 들 ) 을지정함 Page 75
데이터베이스강의개요 SQL 의데이터정의와데이터타입 SQL 에서기본제약조건의명시 SQL 에서스키마변경문 SQL 에서의기본질의 더복잡한 SQL 질의 SQL 에서삽입, 삭제, 갱신문 SQL 의기타기능 Page 76
삽입, 삭제, 갱신구문 INSERT 명령 DELETE E E 명령 UPDATE 명령 Page 77
INSERT 구문 (1/3) INSERT 의간단한형식은릴레이션에투플하나를추가하는것임 삽입하는투플값은 CREATE TABLE 명령에서지정한애트리뷰트순서와동일하게지정 해야함 U1: INSERT INTO EMPLOYEE VALUES ( Richard, K, Marini, 653298653, 30 DEC 52, 98 Oak Forest, Katy, TX, M,37000, 987654321,4) ; 값들의순서를애트리뷰트순서와다르게지정하려면 INSERT 문장에서애트리뷰트이름 을명시해야함 U1A: INSERT INTO EMPLOYEE (FNAME, LNAME, DNO, SSN) VALUES ( Richard (Richard, Marini, 4, 653298653 ) ; 이름을명시하지않은애트리뷰트들은 NULL 이나 DEFAULT 값을가짐 Page 78
INSERT 구문 (2/3) 무결성조건 DDL 에서무결성제약조건을지정할수있으며, 이경우이를만족해야함 그러나 DBMS 에따라서효율성때문에일부제약조건들을지원하지않을수있음 2 번부서가존재하지않으므로삽입이될수없음 U2: INSERT INTO EMPLOYEE (FNAME, LNAME, SSN, DNO) VALUES ( Robert, Hatcher, 980760540, 2) ; 기본키인 SSN 이 Null 값이므로삽입이될수없음 U2A: INSERT INTO EMPLOYEE (FNAME, LNAME, DNO) VALUES ( Robert, Hatcher, 5) ; Page 79
INSERT 구문 (3/3) SELECT 와결합된 INSERT 명령 질의의결과로생성된다중투플을또다른릴레이션에삽입하는경우에 SELECT 와 INSERT 가결합된문장을사용함 U3A: CREATE TABLE DEPTS_INFO ( DEPT_NAME VARCHAR(15), NO_OF_EMPS INTEGER, TOTAL_SAL INTEGER) ; U3B: INSERT INTO DEPTS_INFO (DEPT_NAME, NO_OF_EMPS, OF TOTAL_SAL) SELECT WHERE DNAME, COUNT ( ), SUM (SALARY) DEPARTMENT, EMPLOYEE DNUMBER=DNO GROUP BY DNAME ; Page 80
DELETE 구문 DELETE 명령은릴레이션에서투플 ( 들 ) 을제거하는명령임 삭제할투플에대한조건은 WHERE 절에서명시함 한번의 DELETE 명령으로 WHERE 절의조건을만족하는투플을모두삭제함 U4A: U4B: U4C: DELETE EMPLOYEE WHERE LNAME= Brown ; DELETE EMPLOYEE WHERE SSN= 123456789 ; DELETE EMPLOYEE WHERE DNO IN ( SELECT DNUMBER DEPARTMENT WHERE DNAME= Research ) ; WHERE 절을생략한경우에는테이블내의모든투플을삭제하며, 테이블은데이터베이스내에서빈테이블로남게됨 U4D: DELETE EMPLOYEE; Page 81
UPDATE 구문 (1/2) UPDATE 명령은투플의애트리뷰트값을수정하기위해사용함 WHERE 절은한릴레이션에서수정할투플을선택하는데사용됨 SET 절은변경할애트리뷰트와그들의새로운값을명시함 예 : PROJECT 테이블에서 PNUMBER 가 10 인투플에대하여 PLOCATION 을 Bellaire 로 변경하고, 담당부서인 DNUM 을 5 로변경하라. U5: UPDATE PROJECT SET PLOCATION= Bellaire, DNUM=5 WHERE PNUMBER=10 ; Page 82
UPDATE 구문 (2/2) 예 : Research 부서에있는모든종업원들의봉급을 10% 인상하라. U6: UPDATE EMPLOYEE SET SALARY=SALARY*1.1 WHERE DNO IN ( SELECT DNUMBER DEPARTMENT WHERE DNAME= Research ) ; Page 83
데이터베이스강의개요 SQL 의데이터정의와데이터타입 SQL 에서기본제약조건의명시 SQL 에서스키마변경문 SQL 에서의기본질의 더복잡한 SQL 질의 SQL 에서삽입, 삭제, 갱신문 SQL 의기타기능 Page 84
SQL의기타기능 권한기능 SQL 은데이터베이스사용자에게권한을부여하고취소하는기능을제공함 호스트언어와결합되어사용 SQL 은 C, C++, JAVA, PASCAL 등과같은범용프로그래밍언어내에서사용될수있음 Embedded SQL/C, C++, COBOL, JAVA, PASCAL 트랜잭션기능 SQL 은트랜잭션제어명령문을가짐 동시성제어와회복 VIEW 관련명령어 (TABLE 과유사 ) 기타유용한명령어 상용 DBMS 는 SQL 명령이외에도물리적데이터베이스설계매개변수와릴레이션들을 위한파일구조, 인덱스와같은접근경로를명시하기위한명령어의집합을가지고있음 Page 85
권한기능의예제화면 Page 86
Embedded SQL 예제 : C Page 87
Embedded SQL 예제 : PHP <html> <body> <?PHP $conn = mysql_connect ( localhost, root, apmsetup ); $db_status = mysql_select_db ( goods ); if (!$db_status) { error ( DB_ERROR ); exit; } $query = INSERT INTO fruit VALUES. ( $name, $price, $color, $country ) ; $result = mysql_query ($query); if ($result) print 입력되었습니다.<br> ; else print 입력되지않았습니다.<br> ;?> </body> </html> Page 88
트랜젹션제어명령문 Page 89
SQL VIEW (1/2) View 의특성 SQL 에서뷰는다른테이블들에서유도된 가상 테이블 실제로저장되지는않음 기본테이블들의열로구성 뷰에대한질의는아무런제한을받지않음 몇개연산들을뷰로표현하여사용하는데편리함 데이터접근제어로보안성제공 뷰에적용할수있는갱신 ( 삽입, 삭제 ) 연산들은제한됨 물리적인형태로저장되지는않기때문에, 뷰는일반적인 Alter 문으로변경할수없음 명령어 뷰를정의하는 SQL 명령 : CREATE VIEW <view name> 뷰를삭제하는 SQL 명령 : DROP VIEW <view name> Page 90
SQL VIEW (2/2) Page 91
기타명령어 ( 인덱스생성 / 삭제 ) Page 92
요약 SQL 의데이터정의와데이터타입 SQL 에서기본제약조건의명시 SQL 에서스키마변경문 SQL 에서의기본질의 더복잡한 SQL 질의 SQL 에서삽입, 삭제, 갱신 SQL 의기타기능 ( 인덱스생성 / 삭제 ) Page 93