Presentation is loading. Please wait.

Presentation is loading. Please wait.

데이터베이스 (Database) SQL-99: 스키마 정의, 기본 제약조건, 질의어 문양세 강원대학교 IT대학 컴퓨터과학전공.

Similar presentations


Presentation on theme: "데이터베이스 (Database) SQL-99: 스키마 정의, 기본 제약조건, 질의어 문양세 강원대학교 IT대학 컴퓨터과학전공."— Presentation transcript:

1 데이터베이스 (Database) SQL-99: 스키마 정의, 기본 제약조건, 질의어 문양세 강원대학교 IT대학 컴퓨터과학전공

2 데이터베이스 강의 개요 SQL의 데이터 정의와 데이터 타입 SQL에서 기본 제약조건의 명시 SQL에서 스키마 변경문

3 SQL 개요 SQL의 유래 (Wiki) SQL의 진화 (Wiki) SQL 사용 용어
Structured Query Language IBM 연구소에서 설계 및 구현 데이터 정의어와 조작어를 모두 포함 SQL의 진화 (Wiki) 1986: SQL1(SQL-86) 1992: SQL2(SQL-92) 현재의 표준: SQL3라고 불렸던 SQL-99 SQL 사용 용어 릴레이션 = 테이블 투플 = 행 애트리뷰트 = 열

4 SQL에서 스키마와 카타로그 SQL-99 SQL 스키마 스키마 이름으로 식별 스키마 각 원소에 대한 기술문 뿐 아니라 스키마를 소유하는 사용자나 계정과 관련된 권한부여 식별자도 포함함 스키마 원소: 테이블, 제약조건, 뷰(가상테이블), 도메인, 권한부여 등 CREATE SCHEMA 문을 이용하여 생성함 예: JSMITH라는 권한부여 식별자를 갖는 사용자 소유의 스키마 COMPANY를 생성 CREATE SCHEMA COMPANY AUTHORIZATION JSMITH ; 카탈로그 특별 스키마인 “INFORMATION_SCHEMA”인 포함하며, 이는 카타로그 내 모든 스키마들과 이들 스키마 내 모든 원소 기술문들에 대한 정보를 제공함

5 CREATE TABLE 사용법 새로운 릴레이션을 생성하는 데 사용 릴레이션의 이름 명시
SQL-99 새로운 릴레이션을 생성하는 데 사용 릴레이션의 이름 명시 애트리뷰트 이름, 값집합, NOT NULL 제약조건 명시 키, 엔티티 무결성, 참조 무결성 제약조건 명시 예: CREATE TABLE EMPLOYEE… (스키마 표현을 생략) CREATE TABLE COMPANY.EMPLOYEE… (스키마를 명시적으로 표현) SCHEMA

6 CREATE TABLE 사용 예제 (1/6) CREATE TABLE EMPLOYEE
SQL-99 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)) ;

7 CREATE TABLE 사용 예제 (2/6) CREATE TABLE DEPARTMENT
SQL-99 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)) ;

8 CREATE TABLE 사용 예제 (3/6) CREATE TABLE DEPT_LOCATONS
SQL-99 CREATE TABLE DEPT_LOCATONS ( DNUMBER INT NOT NULL, DLOCATION VARCHAR(15) NOT NULL, PRIMARY KEY (DNUMBER, DLOCATON), FOREIGN KEY (DNUMBER) REFERENCES DEPARTMENT (DNUMBER));

9 CREATE TABLE 사용 예제 (4/6) CREATE TABLE PROJECT
SQL-99 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)) ;

10 CREATE TABLE 사용 예제 (5/6) CREATE TABLE WORKS_ON
SQL-99 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)) ; * DECIMAL(3,1): 에서 3는 세 자리, 1은 최소 한 시간

11 CREATE TABLE 사용 예제 (6/6) CREATE TABLE DEPENDENT
SQL-99 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)) ;

12 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+초의 소수점 이하 자리 (예: :12: )

13 SQL에서 애트리뷰트 타입과 도메인 (2/2) CREATE DOMAIN 새로운 도메인(즉, 데이터 타입)을 생성하는 데 사용
도메인의 이름과 데이터 타입 명시  새로 생성된 도메인을 테이블 생성 시 데이터 타입으로 사용 가능 예: CRAETE DOMAIN SSN_TYPE AS CHAR(9)  새롭게 생성된 SSN_TYPE을 테이블 생성 시 데이터 타입으로 변경 가능  C언어에서 #typedef에 해당함

14 데이터베이스 강의 개요 SQL의 데이터 정의와 데이터 타입 SQL에서 기본 제약조건의 명시 SQL에서 스키마 변경문

15 애트리뷰트 제약조건과 디폴트 값 명시 SQL은 애트리뷰트 값으로 NULL을 허용함 디폴트 값 명시
NOT NULL 제약조건을 지정하여 애트리뷰트에 NULL값을 허용하지 않을 수도 있음 예: CREATE TABLE DEPARTMENT ( DNUMBER INT NOT NULL, …) ; 디폴트 값 명시 DEFAULT문을 이용하여 애트리뷰트의 디폴트 값을 명시 예: CREATE TABLE EMPLOYEE ( DNO INT DEFAULT 1, …) ;

16 키와 참조 무결성 제약조건의 명시 (1/2) PRIMARY KEY 절 UNIQUE 절
SQL-99 PRIMARY KEY 절 릴레이션의 기본 키를 구성하는 하나 이상의 애트리뷰트들을 명시 예: CREATE TABLE DEPARTMENT ( DNUMBER INTEGER PRIMARY KEY, …) ; UNIQUE 절 대체키(또는 보조키)를 명시

17 키와 참조 무결성 제약조건의 명시 (2/2) FOREIGN KEY 절 참조 무결성 지정
SQL-99 FOREIGN KEY 절 참조 무결성 지정 외래 키를 정의할 때 참조 무결성의 위반 시 취할 동작을 명시할 수 있음 위반의 종류: ON DELETE, ON UPDATE 동작의 종류: SET NULL, SET DEFAULT, CASCADE 예: ON DELETE CASCADE: 삭제되는 투플을 참조하고 있는 모든 투플을 삭제 ON UPDATE CASCADE: 수정되는 투플을 참조하는 모든 투플의 외래키 값을 수정된 투플의 새롭게 갱신된 기본키 값으로 수정

18 제약조건에 이름 부여 SQL-99 CONSTRAINT 절에 이름 부여 예: CONSTRAINT EMPSUPERFK FOREIGN KEY (SUPERSSN) REFERENCES EMPLOYEE(SSN), ON DELETE SET NULL ON UPDATE CASCADE;

19 키 제약조건과 디폴트 값 명시 예 (1/3) CREATE TABLE EMPLOYEE
SQL-99 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) ;

20 키 제약조건과 디폴트 값 명시 예 (2/3) CREATE TABLE DEPARTMENT
SQL-99 CREATE TABLE DEPARTMENT ( DNAME VARCHAR(15) NOT NULL, DNUMBER INT NOT NULL, MGRSSN CHAR(9) NOT NULL DEFAULT “ ” MGRSTARTDATE DATE, CONSTRAINT DEPTPK PRIMARY KEY (DNUMBER), CONSTRAINT DEPTSK UNIQUE (DNAME), CONSTRAINT DEPTMGRFK FOREIGN KEY (MGRSSN) REFERENCES EMPLOYEE (SSN) ON DELETE SET DEFAULT ON UPDATE CASCADE) ; 해당 투플이 삭제되면 그 투플을 참조하고 있는 모든 투플을 기본값으로 변경하라

21 키 제약조건과 디폴트 값 명시 예 (3/3) CREATE TABLE DEPT_LOCATONS
SQL-99 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) ; 해당 투플이 삭제되면 그 투플을 참조하고 있는 모든 투플을 삭제하라 해당 투플이 변경되면 그 투플을 참조하고 있는 모든 투플을 변경하라

22 CHECK를 이용한 제약조건 명시 테이블(투플 기반) 제약조건 명시 도메인 값 제약 CREATE TABLE 문 끝 부분에 명시
SQL-99 테이블(투플 기반) 제약조건 명시 CREATE TABLE 문 끝 부분에 명시 예: 매니저의 시작날짜가 부서의 창설일보다 늦은 값을 가져야 한다. CHECK(DEPT_CREATE_DATE < MGRSTARTDATE); 도메인 값 제약 CHECK문을 이용하여 애트리뷰트의 값집합을 제약 예: CREATE TABLE DEPARTMENT ( DNUMBER INT CHECK(DNUMBER > 0 AND DNUMBER < 21), …) ;

23 데이터베이스 강의 개요 SQL의 데이터 정의와 데이터 타입 SQL에서 기본 제약조건의 명시 SQL에서 스키마 변경문

24 DROP SCHEMA 스키마를 제거하는 명령어 옵션으로 예: DROP SCHEMA COMPANY CASCADE;
SQL-99 스키마를 제거하는 명령어 예: DROP SCHEMA COMPANY CASCADE; 옵션으로 CASCASE 선택 시: 제거되는 스키마에 포함된 모든 테이블, 도메인, 기타 요소를 모두 제거함 RESTRICT 선택 시: 비어있는 스키마를 제거할 때 사용 (비어있지 않으면 제거가 되지 않음)

25 DROP TABLE 릴레이션을 제거하는 명령어 옵션으로 예: DROP TABLE DEPENDENT CASCADE;
SQL-99 릴레이션을 제거하는 명령어 예: DROP TABLE DEPENDENT CASCADE; 옵션으로 RESTRICT 선택 시: 임의의 제약조건(예: 다른 릴레이션에 있는 외래키에서 참조하는 경우)이나 뷰에서 참조되지 않는 테이블만을 제거함 CASCASE 선택 시: 테이블과 테이블을 참조하는 모든 제약조건 및 뷰를 자동적으로 제거함

26 ALTER TABLE (1/2) 기본 테이블의 정의를 변경하는 명령어 옵션으로 열(애트리뷰트)의 추가/제거 열 정의의 변경
SQL-99 기본 테이블의 정의를 변경하는 명령어 열(애트리뷰트)의 추가/제거 열 정의의 변경 테이블 제약 조건들의 추가/제거 옵션으로 CASCASE 선택 시: 기존 열을 삭제할 경우 열을 참조하는 모든 제약 조건들과 뷰를 제거함 RESTRICT 선택 시: 제거되는 열을 참조하는 뷰와 제약조건이 없는 경우에만 열을 제거함

27 ALTER TABLE (2/2) 예 1: EMPLOYEE 테이블에 JOB 애트리뷰트 추가
SQL-99 예 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 “ ”;

28 데이터베이스 강의 개요 SQL의 데이터 정의와 데이터 타입 SQL에서 기본 제약조건의 명시 SQL에서 스키마 변경문

29 SQL의 기본 질의 – SELECT문 데이터베이스에서 정보를 검색하는 기본 문장
따라서 SQL 테이블은 투플들의 집합이 아니라 투플들의 다중집합 (multi-set or bag)임 사용자는 키 제약조건이나 DISTINCT 선택사항을 사용하여 SQL 릴레이션들을 집합으로 제한할 수도 있음

30 SELECT-FROM-WHERE 구조 SQL-99 SELECT 문의 구조자료 SELECT <애트리뷰트 목록> FROM <테이블 목록> WHERE <조건> <애트리뷰트 목록>: 질의 결과에 나타나는 애트리뷰트 이름 목록 <테이블 목록>: 질의 대상이 되는 릴레이션 목록 <조건>: 질의 결과의 투플들이 만족해야 하는 조건(부울)식 SQL 질의와 관계 대수 SQL은 관계 대수의 SELECT, PROJECT, JOIN 명령으로 표현 가능함 SELECT 절: 프로젝션 애트리뷰트에 해당 WHERE 절: 선택조건, 조인조건에 해당 SQL 질의의 결과 동일한 속성값을 가지는 투플들이 중복될 수 있음 (DISTINCT 사용하면 …)

31 SELECT-FROM-WHERE 예제 (1/3)
SQL-99 질의 0 이름이 ‘John B. Smith’인 사원의 생일(BDATE)과 주소(ADDRESS)를 검색하시오. SELECT BDATE, ADDRESS FROM EMPLOYEE WHERE FNAME=‘John’ AND MINIT=‘B’ AND LNAME=‘Smith’ ; 관계대수 표현 ΠBDATE, ADDRESS(σNAME=‘John’ AND MINIT=‘B’ AND LNAME=‘Smith’(EMPLOYEE))

32 SELECT-FROM-WHERE 예제 (2/3)
SQL-99 질의 1 ‘Research’ 부서에서 일하는 모든 사원의 이름(FNAME, LNAME)과 주소를 검색하시오. SELECT FNAME, LNAME, ADDRESS FROM EMPLOYEE, DEPARTMENT WHERE DNAME=‘Research’ AND DNUMBER=DNO ; 관계대수 연산 SELECT-PROJECT-JOIN과 유사 SELECT 절은 관계 대수의 PROJECT 연산에 해당 WHERE 절에서 DNAME=‘Research’은 선택조건, 관계대수에서 SELECT 연산에 해당 WHERE 절에서 DNUMBER=DNO는 조인조건, 관계대수의 JOIN 연산에 해당

33 SELECT-FROM-WHERE 예제 (3/3)
SQL-99 질의 2 ‘Stafford’에 위치한 모든 프로젝트에 대하여 프로젝트 번호, 담당부서 번호, 부서 관리자의 성, 주소, 생일을 검색하라. SELECT PNUMBER, DNUM, LNAME, ADDRESS, BDATE FROM PROJECT, DEPARTMENT, EMPLOYEE WHERE DNUM=DNUMBER AND MGRSSN=SSN AND PLOCATION=‘Stafford’ ; 두 개의 조인조건이 존재 조인조건 DNUM=DNUMBER는 프로젝트와 담당 부서를 조인 조인조건 MGRSSN=SSN은 부서와 담당 관리자를 조인

34 모호한 애트리뷰트 이름과 별명 사용 (1/3) 동일한 이름을 갖는 애트리뷰트의 사용 질의 1A
SQL-99 동일한 이름을 갖는 애트리뷰트의 사용 서로 다른 릴레이션에서 동일한 이름을 갖는 애트리뷰트가 사용될 수 있음 릴레이션 이름과 함께 애트리뷰트 이름을 사용함으로써 모호함을 방지해야 함 질의 작성 시 릴레이션 이름 다음에 점(.)을 두고 애트리뷰트 이름을 명시함 질의 1A ‘Research’ 부서에서 일하는 모든 종업원들의 이름과 주소를 검색하시오. SELECT FNAME, EMPLOYEE.NAME, ADDRESS FROM EMPLOYEE, DEPARTMENT WHERE DEPARTMENT.NAME=‘Research’ AND DEPARTMENT.DNUMBER=EMPLOYEE.DNUMBER ;

35 모호한 애트리뷰트 이름과 별명 사용 (2/3) 동일한 릴레이션을 두 번 참조하는 경우 질의 8
SQL-99 동일한 릴레이션을 두 번 참조하는 경우 동일한 릴레이션을 두 번 참조하는 경우에도 모호성이 발생함 이 경우에도 모호함을 방지하기 위하여 릴레이션 이름의 별명을 애트리뷰트 이름 앞에 붙여서 사용함 질의 8 종업원에 대해, 종업원의 성과 이름, 직속 감독자의 성과 이름을 검색하시오. SELECT E.FNAME, E.LNAME, S.FNAME, S.LNAME FROM EMPLOYEE E, EMPLOYEE S // EMPLOYEE에 대한 별명 WHERE E.SUPERSSN=S.SSN ; 위 예는 EMPLOYEE에 대해서 두 개의 별명(alias) E와 S를 선언하여 사용함

36 모호한 애트리뷰트 이름과 별명 사용 (3/3) 릴레이션에 대한 별명
SQL-99 릴레이션에 대한 별명 키워드 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 FROM EMPLOYEE E, DEPARTMENT D // EMPLOYEE AS E, DEPARTMENT AS D WHERE D.NAME=‘Research’ AND D.DNUMBER=E.DNUMBER ;

37 WHERE의 생략과 ‘’의 사용 (1/3) WHERE 절의 생략 질의 9 질의 10
SQL-99 WHERE 절의 생략 SQL에서 WHERE 절을 생략하면 투플 선택에 대한 조건이 없다는 것을 의미함 FROM 절에 있는 테이블의 모든 투플이 조건을 만족하게 됨 질의 9 데이터베이스에서 EMPLOYEE의 모든 SSN을 선택하시오. SELECT SSN FROM EMPLOYEE ; 질의 10 EMPLOYEE의 SSN과 DEPARTMENT의 DNAME의 모든 조합을 선택하시오. SELECT SSN, DNAME FROM EMPLOYEE, DEPARTMENT ;

38 WHERE의 생략과 ‘’의 사용 (2/3) 선택된 투플들의 모든 애트리뷰트 값들을 검색하는 경우 질의 1C
SQL-99 선택된 투플들의 모든 애트리뷰트 값들을 검색하는 경우 모든 애트리뷰트 이름을 명시적으로 열거하지 않고 단지 ‘’를 사용함 질의 1C 5번 DEPARTMENT에서 일하는 EMPLOYEE 투플들의 모든 애트리뷰트 값들을 검색하라 SELECT  FROM EMPLOYEE WHERE DNO=5 ;

39 WHERE의 생략과 ‘’의 사용 (3/3) 질의 1D 질의 10A
SQL-99 질의 1D ‘Research’ 부서에서 일하는 모든 종업원들에 대하여 EMPLOYEE의 모든 애트리뷰트들과 DEPARTMENT의 모든 애트리뷰트들을 검색하라. SELECT  FROM EMPLOYEE, DEPARTMENT WHERE DNAME=‘Research’ AND DNO=DNUMBER ; 질의 10A 릴레이션 EMPLOYEE와 DEPARTMENT의 카티션 프로덕트 결과를 모두 검색하라. FROM EMPLOYEE, DEPARTMENT ;

40 SQL에서 집합으로서의 테이블 (1/2) 투플의 중복허용 질의 11 질의 11A
중복된 투플의 삭제 SELECT 항목에서 키워드 DISTINCT를 사용 DISTINCT는 질의 결과에서 유일한 투플들만 남기라는 의미의 키워드임 질의 11 모든 사원의 급여를 검색하라. SELECT SALARY FROM EMPLOYEE ; 질의 11A 모든 사원의 구별되는 급여를 검색하라. SELECT DISTINCT SALARY FROM EMPLOYEE ;

41 SQL에서 집합으로서의 테이블 (2/2) SQL에서의 집합 연산 질의 4
합집합(UNION), 차집합(EXCEPT), 교집합(INTERSECT) 릴레이션에 대한 집합 연산의 결과는 투플들의 집합임 → 중복된 투플을 결과에서 제거함 질의 4 성이 'Smith'인 종업원(일반 직원 혹은 프로젝트를 담당하는 부서의 관리자)이 참여하는 프로젝트의 프로젝트 번호 목록을 작성하시오. ( SELECT PNUMBER // Smith가 관리자인 projects FROM PROJECT, DEPARTMENT, EMPLOYEE WHERE DNUM=DNUMBER AND MGRSSN=SSN AND LNAME='Smith') UNION ( SELECT PNUMBER // Smith가 참여하는 projects FROM PROJECT, WORKS_ON, EMPLOYEE WHERE PNUMBER=PNO AND ESSN=SSN AND LNAME='Smith') ;

42 부분 문자열 패턴 비교와 산술 연산자 (1/3) 문자열에 대한 비교
SQL-99 문자열에 대한 비교 SQL은 LIKE 비교 연산자를 사용하여 문자열(혹은 부분 문자열)에 대해 비교조건을 적용할 수 있음 부분 문자열을 표현할 때 ‘%’는 임의의 개수의 문자를 의미하고, ‘_’는 임의의 한 문자를 의미함

43 부분 문자열 패턴 비교와 산술 연산자 (2/3) 질의 12 질의 12 A
SQL-99 질의 12 주소가 Houston, Texas인 모든 종업원을 검색하시오. SELECT FNAME, LNAME FROM EMPLOYEE WHERE ADDRESS LIKE '%Houston, TX%’ ; [WHERE ADDRESS LIKE ‘*Houston, TX*’ ;] // 다른 버전의 예 질의 12 A 1950년대에 태어난 모든 사원을 검색하라. WHERE BDATE LIKE ‘__5________’ ; [WHERE BDATE LIKE ‘??5????????’ ;] // 다른 버전의 예

44 부분 문자열 패턴 비교와 산술 연산자 (3/3) 질의內 산술식 허용 질의 13 질의 14
SQL-99 질의內 산술식 허용 질의 13 ‘ProductX’ 프로젝트에 참여하는 모든 사원의 급여를 10% 올린 경우의 급여를 검색하라. SELECT FNAME, LNAME, 1.1*SALARY [SELECT FNAME, LNAME, 1.1*SALARY AS NEWSALARY] FROM EMPLOYEE, WORKS_ON, PROJECT WHERE SSN=ESSN AND PNO=PNUMBER AND PNAME=‘ProductX’ ; 질의 14 급여가 30,000$에서 40,000$ 사이에 있는 5번 부서의 모든 사원을 검색하라. SELECT * FROM EMPLOYEE WHERE (SALARY BETWEEN AND 40000) AND DNO=5

45 질의 결과의 정렬 (1/2) 질의 결과의 정렬 ORDER BY 절 하나 이상의 애트리뷰트 값 순서로 질의 결과 투플을 정렬
SQL-99 질의 결과의 정렬 ORDER BY 절 하나 이상의 애트리뷰트 값 순서로 질의 결과 투플을 정렬 Default 정렬은 오름차순(ASC)임 키워드 DESC: 내림차순으로 정렬 – Descending 키워드 ASC: 오름차순 정렬 – Ascending 예: ORDER BY DNAME DESC, LANME ASC, FNAME ASC

46 질의 결과의 정렬 (2/2) SQL-99 질의 15 프로젝트에 참여하는 종업원을 부서의 알파벳 순서대로, 각 부서 내에서는 성과 이름의 알파벳 순서대로 출력하시오. SELECT DNAME, LNAME, FNAME, PNAME FROM DEPARTMENT, EMPLOYEE, WORKS_ON, PROJECT WHERE DNUMBER=DNO AND SSN=ESSN AND PNO=PNUMBER ORDER BY DNAME, LNAME, FNAME ;

47 데이터베이스 강의 개요 SQL의 데이터 정의와 데이터 타입 SQL에서 기본 제약조건의 명시 SQL에서 스키마 변경문

48 더 복잡한 SQL 질의 널 값을 포함한 비교 중첩 질의(nested query)와 집합비교 상관 중첩 질의
SQL의 EXISTS함수와 UNIQUE함수 SQL에서 명시적 집합과 애트리뷰트의 재명명 SQL에서 조인된 테이블 SQL에서 집단함수 그룹핑: Group by와 Having 절 SQL에 대한 논의와 요약

49 널 값을 포함한 비교 널 값의 의미 애트리뷰트의 값이 NULL인지 검사하는 연산자 (아래 질의 18 참조) 질의 18
SQL-99 널 값의 의미 알려지지 않은 값 (존재하지만 알지 못하는) 이용할 수 없거나 보류해둔 값 (존재하지만 의도적으로 보류한) 적용할 수 없는 애트리뷰트 (이 투플에는 정의되지 않는) 애트리뷰트의 값이 NULL인지 검사하는 연산자 (아래 질의 18 참조) IS NULL IS NOT NULL 질의 18 상사가 없는 모든 종업원들의 이름을 검색하시오. SELECT FNAME, LNAME FROM EMPLOYEE WHERE SUPERSSN IS NULL ;

50 중첩질의(nested query)와 집합비교 (1/5)
SQL-99 중첩 질의 다른 질의의 WHERE 절 내에 완전한 SELECT 질의가 나타나는 형태 외부 질의와 내부 질의로 구분됨 비교 연산자 IN 외부 질의의 한 투플에 대하여, 이 투플이 임의의 투플 집합의 원소가 되는지 비교하는 연산임 집합에 있어서 원소 여부를 확인하는 와 동일한 기능을 함

51 중첩질의(nested query)와 집합비교 (2/5)
SQL-99 질의 4A 성이 ‘Smith’인 종업원(일반 직원 혹은 프로젝트를 담당하는 부서의 관리자)이 참여하는 프로젝트의 프로젝트 번호 목록을 작성하시오. SELECT DISTINCT PNUMBER FROM PROJECT WHERE PNUMBER IN ( SELECT PNUMBER FROM PROJECT, DEPARTMENT, EMPLOYEE WHERE DNUM=DNUMBER AND MGRSSN=SSN AND LNAME=‘Smith’) OR PNUMBER IN ( SELECT PNO FROM WORKS_ON, EMPLOYEE WHERE ESSN=SSN AND LNAME=‘Smith’) ; ( SELECT PNUMBER // Smith가 관리자인 projects FROM PROJECT, DEPARTMENT, EMPLOYEE WHERE DNUM=DNUMBER AND MGRSSN=SSN AND LNAME='Smith') UNION ( SELECT PNUMBER // Smith가 참여하는 projects FROM PROJECT, WORKS_ON, EMPLOYEE WHERE PNUMBER=PNO AND ESSN=SSN AND LNAME='Smith') ;

52 중첩질의(nested query)와 집합비교 (3/5)
SQL-99 질의: SSN이 인 사원이 일하는 프로젝트와 일한 시간의 조합이 동일한 사원의 SSN을 검색하라. SELECT DISTINCT ESSN FROM WORKS_ON WHERE (PNO, HOURS) IN ( SELECT PNO, HOURS WHERE SSN=‘ ’);

53 중첩질의(nested query)와 집합비교 (4/5)
SQL-99 = ALL 연산자 하나의 값 v가 집합 V내의 모든 값들과 같으면 참이 됨 ALL 앞에 = 대신 >, >=, <, <=를 사용할 수도 있음 = ANY(= SOME) 연산자 하나의 값 v가 집합 V내의 어떤 하나의 값과 같으면 참이 됨 ANY(SOME) 앞에 = 대신 >, >=, <, <=를 사용할 수도 있음 질의: 5번 부서에 근무하는 모든 사원보다 급여가 많은 사원을 검색하라. SELECT LNAME, FNAME FROM EMPLOYEE WHERE SALARY > ALL ( SELECT SALARY WHERE DNO=5) ;

54 중첩질의(nested query)와 집합비교 (5/5)
SQL-99 중첩 질의에서 애트리뷰트 이름의 모호성 만약 외부 질의문의 FROM 절에 있는 릴레이션과 내부 질의문의 FROM 절에 있는 다른 릴레이션에 동일한 애트리뷰트 이름이 있다면 애트리뷰트 이름의 모호성이 발생할 수 있음 애매한 애트리뷰트에 대한 참조규칙은 항상 가장 안쪽 가까운 질의문에 선언된 릴레이션을 먼저 참조하는 것임 내부 질의에서 외부 질의에 명시된 릴레이션의 애트리뷰트를 참조하려면 별명을 사용해야 함 질의 16 자신의 부양가족과 이름, 성별이 같은 종업원들의 이름을 검색하시오. SELECT E.FNAME, E.LNAME FROM EMPLOYEE AS E WHERE E.SSN IN ( SELECT ESSN FROM DEPENDENT WHERE E.FNAME=DEPENDENT_NAME AND E.SEX=SEX) ;

55 상관 중첩질의(correlated nested query) (1/2)
SQL-99 상관된 질의 (Correlated Query) 내부 질의의 WHERE 절에 있는 조건에서 외부질의에 선언된 릴레이션의 일부 애트리뷰트를 참조하는 경우에 두 질의를 상관된 질의라고 함 상관 중첩질의의 예 (질의 16) 자신의 부양가족과 이름, 성별이 같은 종업원들의 이름을 검색하시오. SELECT E.FNAME, E.LNAME FROM EMPLOYEE AS E WHERE E.SSN IN ( SELECT ESSN FROM DEPENDENT WHERE E.FNAME=DEPENDENT_NAME AND E.SEX=SEX) ; 비중첩 질의로의 변환 중첩된 SELECT … FROM … WHERE… 블록과 “=“ 및 IN 비교 연산자를 이용해서 작성한 질의는 항상 단일 블록 질의로 변환할 수 있음

56 상관 중첩질의(correlated nested query) (2/2)
SQL-99 질의 16을 비중첩 질의로 변환한 예: 질의 16A 자신의 부양가족과 이름, 성별이 같은 종업원들의 이름을 검색하시오. SELECT E.FNAME, E.LNAME FROM EMPLOYEE AS E, DEPENDENT AS D WHERE E.SSN=D.ESSN AND E.FNAME=DEPENDENT_NAME AND E.SEX=D.SEX ;

57 EXISTS 함수 (1/4) EXISTS 함수 질의 16B 상관된 중첩질의에서 내부 질의의 결과가 공집합인가를 검사함
SQL-99 EXISTS 함수 상관된 중첩질의에서 내부 질의의 결과가 공집합인가를 검사함 EXISTS(Q): 질의 Q의 결과에 최소한 한 개의 투플이 있다면 참을 반환 질의 16B 자신의 부양가족과 이름, 성별이 같은 종업원들의 이름을 검색하시오. SELECT E.FNAME, E.LNAME FROM EMPLOYEE E WHERE EXISTS ( SELECT * FROM DEPENDENT WHERE E.SSN=ESSN AND SEX=E.SEX AND E.FNAME=DEPENDENT_NAME) ;

58 EXISTS 함수 (2/4) NOT EXIST 함수 질의 6 상관된 중첩질의에서 내부 질의의 결과가 공집합인가를 검사함
SQL-99 NOT EXIST 함수 상관된 중첩질의에서 내부 질의의 결과가 공집합인가를 검사함 NOT EXISTS(Q): 질의 Q의 결과에 투플이 없다면 참을 반환 질의 6 부양가족이 없는 종업원들의 이름을 검색하시오. SELECT FNAME, LNAME FROM EMPLOYEE WHERE NOT EXISTS ( SELECT * FROM DEPENDENT WHERE SSN=ESSN) ;

59 EXISTS 함수 (3/4) 질의 7 부양가족이 적어도 한명 이상 있는 관리자의 이름을 검색하라.
SQL-99 질의 7 부양가족이 적어도 한명 이상 있는 관리자의 이름을 검색하라. SELECT FNAME, LNAME FROM EMPLOYEE WHERE EXISTS ( SELECT * FROM DEPENDENT WHERE SSN=ESSN) AND EXISTS ( SELECT * FROM DEPARTMENT WHERE SSN=MGRSSN) ;

60 EXISTS 함수 (4/4) -- 생략 SQL-99 질의 3B 5번 부서가 담당하는 모든 프로젝트에 근무하는 사원들의 이름을 검색하라. (각 사원에 대하여 그 사원이 근무하지 않는 5번 부서의 관리 프로젝트가 존재하지 않는 경우에 그 사원을 검색하라) SELECT FNAME, LNAME FROM EMPLOYEE WHERE NOT EXISTS ( SELECT * FROM WORKS_ON AS B WHERE (B.PNO IN ( SELECT PNUMBER FROM PROJECT WHERE DNUM=5)) AND NOT EXISTS ( SELECT * FROM WORKS_ON AS C WHERE C.PNO=B.PNO)) ; B.PNO가 5번 부서에서 관리하는 프로젝트다 B.PNO 프로젝트에서 근무하는 사원이 존재하지 않는다

61 명시적 집합과 애트리뷰트 재명명 (1/2) WHERE 절에 값들의 명시적 집합 사용 가능 질의 17
SQL-99 WHERE 절에 값들의 명시적 집합 사용 가능 질의 17 프로젝트 번호 1, 2, 3에서 일하는 모든 종업원들의 SSN을 검색하시오. SELECT DISTINCT ESSN FROM WORKS_ON WHERE PNO IN (1, 2, 3) ;

62 명시적 집합과 애트리뷰트 재명명 (2/2) 질의 결과 애트리뷰트의 재명명 질의 8A
SQL-99 질의 결과 애트리뷰트의 재명명 결과에 나타나는 애트리뷰트의 이름은 키워드 AS를 사용하여 원하는 새 이름으로 재명명할 수 있음 AS를 사용하여 애트리뷰트와 릴레이션에 별명을 붙일 수 있음 질의 8A 종업원에 대해, 종업원의 성과 이름, 직속 감독자의 성과 이름을 검색하시오. SELECT E.LNAME AS EMPLOYEE_NAME, S.LNAME AS SUPERVISOR_NAME FROM EMPLOYEE AS E, EMPLOYEE AS S WHERE E.SUPERSSN=S.SSN;

63 SQL에서 조인된 테이블 FROM 절에 조인 연산의 결과를 지정 질의 1A 질의 1B
‘Research’ 부서에서 일하는 모든 종업원들의 이름과 주소를 검색하시오. SELECT FNAME, LNAME, ADDRESS FROM (EMPLOYEE JOIN DEPARTMENT ON DNO=DNUMBER) WHERE DNAME=‘Research’ ; 질의 1B FROM (EMPLOYEE NATURAL JOIN (DEPARTMENT AS DEPT (DNAME, DNO, MSSN, MSDATE)))

64 집단 함수 (Aggregate Function) (1/4)
SQL-99 집단함수 SQL에서는 COUNT, SUM, MAX, MIN, AVG 등의 집단 (or 내장) 함수를 제공함 COUNT 함수는 질의에서 투플이나 값의 개수를 반환함 SUM, MAX, MIN, AVG 함수는 수치 값들의 다중집합에 적용되며, 각각 합, 최대값, 최소값, 평균값을 반환함 질의 19 종업원의 급여의 합, 최고 급여, 최저 급여, 평균 급여를 구하시오. SELECT SUM (SALARY), MAX (SALARY), MIN (SALARY), AVG (SALARY) FROM EMPLOYEE ;

65 집단 함수 (Aggregate Function) (2/4)
SQL-99 집단함수 조건을 만족하는 투플들을 대상으로 집단 함수 값들을 얻으려면, WHERE절에서 투플의 조건을 제시할 수 있음 질의 20 ‘Research’ 부서에 있는 모든 종업원들의 급여의 합과 최고 급여, 최소 급여, 평균 급여를 구하시오. SELECT SUM (SALARY), MAX (SALARY), MIN (SALARY), AVG (SALARY) FROM EMPLOYEE, DEPARTMENT WHERE DNO=DNUMBER AND DNAME=‘Research’ ;

66 집단 함수 (Aggregate Function) (3/4)
SQL-99 COUNT(): 투플들의 수를 반환 질의 21 회사내의 총 종업원의 수를 검색하시오. SELECT COUNT () FROM EMPLOYEE ; 질의 22 ‘Research’ 부서에 속해 있는 종업원의 수를 검색하시오. FROM EMPLOYEE, DEPARTMENT WHERE DNO=DNUMBER AND DNAME=‘Research’ ;

67 집단 함수 (Aggregate Function) (4/4)
SQL-99 특정 투플을 선택하기 위해 집단함수 이용: 중첩 질의 이용 질의 5 둘 이상의 부양가족이 있는 모든 사원의 이름을 검색하시오. SELECT LNAME, FNAME FROM EMPLOYEE WHERE (SELECT COUNT () FROM DEPENDENT WHERE SSN=ESSN ) >= 2 ;

68 Grouping: Group by & Having (1/7)
SQL-99 그룹화 (grouping) 특정 애트리뷰트(들)의 값이 같은 투플들을 모아서 그룹을 생성하고, 이들 그룹에 대하여 집단함수를 적용함 이 때, 특정 애트리뷰트들을 그룹화 애트리뷰트라 하며, SQL의 GROUP BY절에 지정함 대부분의 경우, SELECT절에 그룹화 애트리뷰트(들)를 지정하여, 그 값과 그 값에 해당하는 투플 그룹에 집단함수를 적용한 결과를 동시에 반환함

69 Grouping: Group by & Having (2/7)
SQL-99 질의 24 각 부서에 대해서, 부서 번호, 부서 내에 있는 종업원의 수, 평균 봉급은? SELECT DNO, COUNT(), AVG(SALARY) FROM EMPLOYEE GROUP BY DNO ; EMPLOYEE 투플들을 DNO 값을 기준으로 분할하여 그룹들을 생성함 그 다음에, 각 그룹의 투플들에 대하여 COUNT와 AVG함수를 적용함

70 Grouping: Group by & Having (3/7)
SQL-99 질의 25 각 프로젝트에 대해서 프로젝트 번호, 프로젝트 이름, 그 프로젝트에서 근무하는 사원들의 수를 검색하라. SELECT PNUMBER, PNAME, COUNT () FROM PROJECT, WORKS_ON WHERE PNUMBER=PNO GROUP BY PNUMBER ;

71 Grouping: Group by & Having (4/7)
SQL-99 Having: GROUP BY 절에 대한 조건을 제시할 수 있음 질의 26 세 명 이상의 사원이 근무하는 각 프로젝트에 대해서 프로젝트 번호, 프로젝트 이름, 프로젝트에서 근무하는 사원의 수를 검색하라. SELECT PNUMBER, PNAME, COUNT() FROM PROJECT, WORKS_ON WHERE PNUMBER=PNO GROUP BY PNUMBER HAVING COUNT() >= 3 ; 각 그룹에 대해 조건 체크

72 Grouping: Group by & Having (5/7)
SQL-99

73 Grouping: Group by & Having (6/7)
SQL-99 질의 27 각 프로젝트에 대해서 프로젝트 번호, 프로젝트 이름, 5번 부서에 속하면서 프로젝트에서 근무하는 사원의 수를 검색하라. SELECT PNUMBER, PNAME, COUNT () FROM PROJECT, WORKS_ON, EMPLOYEE WHERE PNUMBER=PNO AND SSN=ESSN AND DNO=5 GROUP BY PNUMBER ;

74 Grouping: Group by & Having (7/7) - 생략
SQL-99 질의 28 6명 이상의 사원이 근무하는 각 부서에 대해서 부서번호와 40,000 달러가 넘는 급여를 받는 사원의 수를 검색하라. SELECT DNUMBER, COUNT () FROM DEPARTMENT, EMPLOYEE WHERE DNUMBER=DNO AND SALARY > AND DNO IN ( SELECT DNO FROM EMPLOYEE GROUP BY DNO HAVING COUNT () >= 6) GROUP BY DNUMBER ;

75 SQL에 대한 논의와 요약 SQL 질의는 6개의 절로 구성되지만, 필수사항은 처음의 두 개 뿐임
질의의 평가 순서 FROM → WHERE절 → GROUP BY → HAVING → SELECT → ORDER BY SELECT <애트리뷰트 목록> SELECT 절은 질의 결과에 포함될 애트리뷰트들이나 함수를 나열함 FROM <테이블 목록> FROM 절은 질의의 대상을 명시하는 곳으로 조인된 릴레이션이나 릴레이션(들)을 지정함 [WHERE <조건>] WHERE 절은 투플들에 대한 조건을 명시함 [GROUP BY <집단화 애트리뷰트>] GROUP BY절은 그룹화 애트리뷰트들을 지정함 [HAVING <집단 조건>] HAVING 절은 그룹들에 대한 조건을 지정함 [ORDER BY <애트리뷰트 목록>] ORDER BY 절은 정렬 기준이 되는 애트리뷰트(들)을 지정함

76 데이터베이스 강의 개요 SQL의 데이터 정의와 데이터 타입 SQL에서 기본 제약조건의 명시 SQL에서 스키마 변경문

77 삽입, 삭제, 갱신 구문 SQL-99 INSERT 명령 DELETE 명령 UPDATE 명령

78 INSERT 구문 (1/3) INSERT의 간단한 형식은 릴레이션에 투플 하나를 추가하는 것임
SQL-99 INSERT의 간단한 형식은 릴레이션에 투플 하나를 추가하는 것임 삽입하는 투플 값은 CREATE TABLE 명령에서 지정한 애트리뷰트 순서와 동일하게 지정해야 함 U1: INSERT INTO EMPLOYEE VALUES (‘Richard’,‘K’,‘Marini’,‘ ’,‘30-DEC-52’, ‘98 Oak Forest, Katy, TX’,‘M’,37000,‘ ’,4) ; 값들의 순서를 애트리뷰트 순서와 다르게 지정하려면 INSERT 문장에서 애트리뷰트 이름을 명시해야 함 U1A: INSERT INTO EMPLOYEE (FNAME, LNAME, DNO, SSN) VALUES (FNAME=‘Richard’, LNAME=‘Marini’,DNO= 4, SSN=‘ ’) ; 이름을 명시하지 않은 애트리뷰트들은 NULL이나 DEFAULT 값을 가짐

79 INSERT 구문 (2/3) 무결성 조건 DDL에서 무결성 제약조건을 지정할 수 있으며, 이 경우 이를 만족해야 함
SQL-99 무결성 조건 DDL에서 무결성 제약조건을 지정할 수 있으며, 이 경우 이를 만족해야 함 그러나 DBMS에 따라서 효율성 때문에 일부 제약조건들을 지원하지 않을 수 있음 2번 부서가 존재하지 않으므로 삽입이 될 수 없음 U2: INSERT INTO EMPLOYEE (FNAME, LNAME, SSN, DNO) VALUES (‘Robert’, ‘Hatcher’, ‘ ’, 2) ; 기본키인 SSN이 Null값이므로 삽입이 될 수 없음 U2A: INSERT INTO EMPLOYEE (FNAME, LNAME, DNO) VALUES (‘Robert’, ‘Hatcher’, 5) ;

80 INSERT 구문 (3/3) SELECT와 결합된 INSERT 명령
SQL-99 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, TOTAL_SAL) SELECT DNAME, COUNT (), SUM (SALARY) FROM DEPARTMENT, EMPLOYEE WHERE DNUMBER=DNO GROUP BY DNAME ;

81 DELETE 구문 DELETE 명령은 릴레이션에서 투플(들)을 제거하는 명령임
SQL-99 DELETE 명령은 릴레이션에서 투플(들)을 제거하는 명령임 삭제할 투플에 대한 조건은 WHERE 절에서 명시함 한번의 DELETE 명령으로 WHERE 절의 조건을 만족하는 투플을 모두 삭제함 U4A: DELETE FROM EMPLOYEE WHERE LNAME=‘Brown’ ; U4B: DELETE FROM EMPLOYEE WHERE SSN=‘ ’ ; U4C: DELETE FROM EMPLOYEE WHERE DNO IN ( SELECT DNUMBER FROM DEPARTMENT WHERE DNAME=‘Research’ ) ; WHERE 절을 생략한 경우에는 테이블내의 모든 투플을 삭제하며, 테이블은 데이터베이스 내에서 빈 테이블로 남게 됨 U4D: DELETE FROM EMPLOYEE;

82 UPDATE 구문 (1/2) UPDATE 명령은 투플의 애트리뷰트 값을 수정하기 위해 사용함
SQL-99 UPDATE 명령은 투플의 애트리뷰트 값을 수정하기 위해 사용함 WHERE 절은 한 릴레이션에서 수정할 투플을 선택하는데 사용됨 SET절은 변경할 애트리뷰트와 그들의 새로운 값을 명시함 예: PROJECT 테이블에서 PNUMBER가 10인 투플에 대하여 PLOCATION을 ‘Bellaire’로 변경하고, 담당 부서인 DNUM을 5로 변경하라. U5: UPDATE PROJECT SET PLOCATION=‘Bellaire’, DNUM=5 WHERE PNUMBER=10 ;

83 UPDATE 구문 (2/2) SQL-99 예: ‘Research’ 부서에 있는 모든 종업원들의 봉급을 10% 인상하라. U6: UPDATE EMPLOYEE SET SALARY=SALARY*1.1 WHERE DNO IN ( SELECT DNUMBER FROM DEPARTMENT WHERE DNAME=‘Research’) ;

84 데이터베이스 강의 개요 SQL의 데이터 정의와 데이터 타입 SQL에서 기본 제약조건의 명시 SQL에서 스키마 변경문

85 SQL의 기타 기능 권한 기능 호스트 언어와 결합되어 사용 트랜잭션 기능 VIEW 관련 명령어 (TABLE과 유사)
SQL은 C, C++, JAVA, PASCAL 등과 같은 범용 프로그래밍 언어 내에서 사용될 수 있음 Embedded SQL/C, C++, COBOL, JAVA, PASCAL 트랜잭션 기능 SQL은 트랜잭션 제어 명령문을 가짐 – 동시성 제어와 회복 VIEW 관련 명령어 (TABLE과 유사) 기타 유용한 명령어 상용 DBMS는 SQL 명령 이외에도 물리적 데이터베이스 설계 매개변수와 릴레이션들을 위한 파일 구조, 인덱스와 같은 접근경로를 명시하기 위한 명령어의 집합을 가지고 있음

86 권한 기능의 예제 화면 SQL-99

87 Embedded SQL 예제: C SQL-99

88 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>

89 트랜젹션 제어 명령문 SQL-99

90 SQL VIEW (1/2) View의 특성 명령어
기본 테이블들의 열로 구성 뷰에 대한 질의는 아무런 제한을 받지 않음 몇 개 연산들을 뷰로 표현하여 사용하는데 편리함 데이터 접근제어로 보안성 제공 뷰에 적용할 수 있는 갱신(삽입, 삭제) 연산들은 제한됨 -- 물리적인 형태로 저장되지는 않기 때문에, 뷰는 일반적인 Alter 문으로 변경할 수 없음 명령어 뷰를 정의하는 SQL 명령: CREATE VIEW <view-name> 뷰를 삭제하는 SQL 명령: DROP VIEW <view-name>

91 SQL VIEW (2/2) SQL-99

92 기타 명령어 (인덱스 생성/삭제) SQL-99

93 요약 SQL의 데이터 정의와 데이터 타입 SQL에서 기본 제약조건의 명시 SQL에서 스키마 변경문 SQL에서의 기본 질의

94 Homework #3 SQL-99


Download ppt "데이터베이스 (Database) SQL-99: 스키마 정의, 기본 제약조건, 질의어 문양세 강원대학교 IT대학 컴퓨터과학전공."

Similar presentations


Ads by Google