데이터베이스 (database) sql-99: 스키마 정의 , 기본 제약조건 , 질의어...

94
데데데데데데 (Database) SQL-99: 데데데 데데 , 데데 데데데데 , 데데데 데데데 데데데데데 IT 데데 데데데데데데데

Upload: ingrid

Post on 15-Jan-2016

106 views

Category:

Documents


0 download

DESCRIPTION

데이터베이스 (Database) SQL-99: 스키마 정의 , 기본 제약조건 , 질의어 문양세 강원대학교 IT 대학 컴퓨터과학전공. 데이터베이스 강의 개요. SQL-99. SQL 의 데이터 정의와 데이터 타입 SQL 에서 기본 제약조건의 명시 SQL 에서 스키마 변경문 SQL 에서의 기본 질의 더 복잡한 SQL 질의 SQL 에서 삽입 , 삭제 , 갱신문 SQL 의 기타기능. SQL 개요. SQL-99. SQL 의 유래 (Wiki) Structured Query Language - PowerPoint PPT Presentation

TRANSCRIPT

데이터베이스 (Database)

SQL-99: 스키마 정의 , 기본 제약조건 , 질의어

문양세강원대학교 IT 대학 컴퓨터과학전공

Database by Yang-Sae MoonPage 2

데이터베이스 강의 개요

SQL 의 데이터 정의와 데이터 타입

SQL 에서 기본 제약조건의 명시

SQL 에서 스키마 변경문

SQL 에서의 기본 질의

더 복잡한 SQL 질의

SQL 에서 삽입 , 삭제 , 갱신문

SQL 의 기타기능

SQL-99

Database by Yang-Sae MoonPage 3

SQL 개요

SQL 의 유래 (Wiki)

• Structured Query Language

• IBM 연구소에서 설계 및 구현

• 데이터 정의어와 조작어를 모두 포함

SQL 의 진화 (Wiki)

• 1986: SQL1(SQL-86)

• 1992: SQL2(SQL-92)

• 현재의 표준 : SQL3 라고 불렸던 SQL-99

SQL 사용 용어• 릴레이션 = 테이블

• 투플 = 행

• 애트리뷰트 = 열

SQL-99

Database by Yang-Sae MoonPage 4

SQL 에서 스키마와 카타로그

SQL 스키마• 스키마 이름으로 식별

• 스키마 각 원소에 대한 기술문 뿐 아니라 스키마를 소유하는 사용자나 계정과 관련된

권한부여 식별자도 포함함

• 스키마 원소 : 테이블 , 제약조건 , 뷰 ( 가상테이블 ), 도메인 , 권한부여 등

• CREATE SCHEMA 문을 이용하여 생성함

예 : JSMITH 라는 권한부여 식별자를 갖는 사용자 소유의 스키마

COMPANY 를 생성• CREATE SCHEMA COMPANY AUTHORIZATION JSMITH ;

카탈로그• 특별 스키마인 “ INFORMATION_SCHEMA” 인 포함하며 , 이는 카타로그 내 모든

스키마들과 이들 스키마 내 모든 원소 기술문들에 대한 정보를 제공함

SQL-99

Database by Yang-Sae MoonPage 5

CREATE TABLE 사용법

새로운 릴레이션을 생성하는 데 사용

릴레이션의 이름 명시

애트리뷰트 이름 , 값집합 , NOT NULL 제약조건 명시

키 , 엔티티 무결성 , 참조 무결성 제약조건 명시

예 : CREATE TABLE EMPLOYEE… ( 스키마 표현을 생략 )

CREATE TABLE COMPANY.EMPLOYEE… ( 스키마를 명시적으로

표현 )

SQL-99

SCHEMA

Database by Yang-Sae MoonPage 6

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

SQL-99

Database by Yang-Sae MoonPage 7

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

SQL-99

Database by Yang-Sae MoonPage 8

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

SQL-99

Database by Yang-Sae MoonPage 9

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

SQL-99

Database by Yang-Sae MoonPage 10

CREATE TABLE 사용 예제 (5/6)

CREATE TABLE WORKS_ON( ESSN CHAR(9) NOT NULL,

PNO INT NOT NULL,HOURSDECIMAL(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 은 최소 한 시간

SQL-99

Database by Yang-Sae MoonPage 11

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

SQL-99

Database by Yang-Sae MoonPage 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+ 초의 소수점 이하 자리 ( 예 : 2002-09-27 09:12:47

648302)

SQL-99

Database by Yang-Sae MoonPage 13

SQL 에서 애트리뷰트 타입과 도메인 (2/2)

CREATE DOMAIN

• 새로운 도메인 ( 즉 , 데이터 타입 ) 을 생성하는 데 사용

• 도메인의 이름과 데이터 타입 명시

새로 생성된 도메인을 테이블 생성 시 데이터 타입으로 사용 가능

• 예 : CRAETE DOMAIN SSN_TYPE AS CHAR(9)

새롭게 생성된 SSN_TYPE 을 테이블 생성 시 데이터 타입으로 변경 가능

C 언어에서 #typedef 에 해당함

SQL-99

Database by Yang-Sae MoonPage 14

데이터베이스 강의 개요

SQL 의 데이터 정의와 데이터 타입

SQL 에서 기본 제약조건의 명시

SQL 에서 스키마 변경문

SQL 에서의 기본 질의

더 복잡한 SQL 질의

SQL 에서 삽입 , 삭제 , 갱신문

SQL 의 기타기능

SQL-99

Database by Yang-Sae MoonPage 15

애트리뷰트 제약조건과 디폴트 값 명시

SQL 은 애트리뷰트 값으로 NULL 을 허용함• NOT NULL 제약조건을 지정하여 애트리뷰트에 NULL 값을 허용하지 않을 수도 있음

예 : CREATE TABLE DEPARTMENT

( DNUMBER INT NOT NULL, …) ;

디폴트 값 명시• DEFAULT 문을 이용하여 애트리뷰트의 디폴트 값을 명시

예 : CREATE TABLE EMPLOYEE

( DNO INT DEFAULT 1, …) ;

SQL-99

Database by Yang-Sae MoonPage 16

키와 참조 무결성 제약조건의 명시 (1/2)

PRIMARY KEY 절• 릴레이션의 기본 키를 구성하는 하나 이상의 애트리뷰트들을 명시

예 : CREATE TABLE DEPARTMENT

( DNUMBER INTEGER PRIMARY KEY, …) ;

UNIQUE 절• 대체키 ( 또는 보조키 ) 를 명시

SQL-99

Database by Yang-Sae MoonPage 17

키와 참조 무결성 제약조건의 명시 (2/2)

FOREIGN KEY 절• 참조 무결성 지정

• 외래 키를 정의할 때 참조 무결성의 위반 시 취할 동작을 명시할 수 있음

• 위반의 종류 : ON DELETE, ON UPDATE

• 동작의 종류 : SET NULL, SET DEFAULT, CASCADE

• 예 :

ON DELETE CASCADE: 삭제되는 투플을 참조하고 있는 모든 투플을 삭제

ON UPDATE CASCADE: 수정되는 투플을 참조하는 모든 투플의 외래키 값을

수정된 투플의 새롭게 갱신된 기본키 값으로 수정

SQL-99

Database by Yang-Sae MoonPage 18

제약조건에 이름 부여

CONSTRAINT 절에 이름 부여

예 : CONSTRAINT EMPSUPERFK

FOREIGN KEY (SUPERSSN) REFERENCES EMPLOYEE(SSN),

ON DELETE SET NULL ON UPDATE CASCADE;

SQL-99

Database by Yang-Sae MoonPage 19

키 제약조건과 디폴트 값 명시 예 (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) ;

SQL-99

Database by Yang-Sae MoonPage 20

키 제약조건과 디폴트 값 명시 예 (2/3) SQL-99

CREATE TABLE DEPARTMENT ( DNAME VARCHAR(15) NOT NULL,

DNUMBER INT NOT NULL,MGRSSN CHAR(9) NOT NULL DEFAULT

“888665555”MGRSTARTDATE DATE,

CONSTRAINT DEPTPKPRIMARY KEY (DNUMBER),

CONSTRAINT DEPTSKUNIQUE (DNAME),

CONSTRAINT DEPTMGRFKFOREIGN KEY (MGRSSN) REFERENCES EMPLOYEE

(SSN)ON DELETE SET DEFAULT ON UPDATE CASCADE) ;

해당 투플이 삭제되면 그 투플을 참조하고 있는 모든 투플을 기본값으로 변경하라

Database by Yang-Sae MoonPage 21

키 제약조건과 디폴트 값 명시 예 (3/3) 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) ;

해당 투플이 삭제되면 그 투플을 참조하고 있는 모든 투플을 삭제하라

해당 투플이 변경되면 그 투플을 참조하고 있는 모든 투플을 변경하라

Database by Yang-Sae MoonPage 22

CHECK 를 이용한 제약조건 명시

테이블 ( 투플 기반 ) 제약조건 명시

• CREATE TABLE 문 끝 부분에 명시

• 예 : 매니저의 시작날짜가 부서의 창설일보다 늦은 값을 가져야 한다 .

CHECK(DEPT_CREATE_DATE < MGRSTARTDATE);

도메인 값 제약• CHECK 문을 이용하여 애트리뷰트의 값집합을 제약

예 : CREATE TABLE DEPARTMENT

( DNUMBER INT CHECK(DNUMBER > 0 AND DNUMBER <

21), …) ;

SQL-99

Database by Yang-Sae MoonPage 23

데이터베이스 강의 개요

SQL 의 데이터 정의와 데이터 타입

SQL 에서 기본 제약조건의 명시

SQL 에서 스키마 변경문

SQL 에서의 기본 질의

더 복잡한 SQL 질의

SQL 에서 삽입 , 삭제 , 갱신문

SQL 의 기타기능

SQL-99

Database by Yang-Sae MoonPage 24

DROP SCHEMA

스키마를 제거하는 명령어• 예 : DROP SCHEMA COMPANY CASCADE;

옵션으로• CASCASE 선택 시 :

제거되는 스키마에 포함된 모든 테이블 , 도메인 , 기타 요소를 모두 제거함

• RESTRICT 선택 시 :

비어있는 스키마를 제거할 때 사용 ( 비어있지 않으면 제거가 되지 않음 )

SQL-99

Database by Yang-Sae MoonPage 25

DROP TABLE

릴레이션을 제거하는 명령어• 예 : DROP TABLE DEPENDENT CASCADE;

옵션으로• RESTRICT 선택 시 :

임의의 제약조건 ( 예 : 다른 릴레이션에 있는 외래키에서 참조하는 경우 ) 이나 뷰에서

참조되지 않는 테이블만을 제거함

• CASCASE 선택 시 :

테이블과 테이블을 참조하는 모든 제약조건 및 뷰를 자동적으로 제거함

SQL-99

Database by Yang-Sae MoonPage 26

ALTER TABLE (1/2)

기본 테이블의 정의를 변경하는 명령어

• 열 ( 애트리뷰트 ) 의 추가 / 제거

• 열 정의의 변경

• 테이블 제약 조건들의 추가 / 제거

옵션으로

• CASCASE 선택 시 :

기존 열을 삭제할 경우 열을 참조하는 모든 제약 조건들과 뷰를 제거함

• RESTRICT 선택 시 :

제거되는 열을 참조하는 뷰와 제약조건이 없는 경우에만 열을 제거함

SQL-99

Database by Yang-Sae MoonPage 27

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”;

SQL-99

Database by Yang-Sae MoonPage 28

데이터베이스 강의 개요

SQL 의 데이터 정의와 데이터 타입

SQL 에서 기본 제약조건의 명시

SQL 에서 스키마 변경문

SQL 에서의 기본 질의

더 복잡한 SQL 질의

SQL 에서 삽입 , 삭제 , 갱신문

SQL 의 기타기능

SQL-99

Database by Yang-Sae MoonPage 29

SQL 의 기본 질의 – SELECT 문

데이터베이스에서 정보를 검색하는 기본 문장

여기서의 SELECT 문은 관계대수의 실렉트 연산과 동일하지는 않음

제 6 장에서 논의한 관계 모델과는 달리 SQL 의 테이블 ( 릴레이션 ) 은

모든 애트리뷰트들의 값이 동일한 투플을 하나 이상 가질 수도 있음

따라서 SQL 테이블은 투플들의 집합이 아니라 투플들의 다중집합

(multi-set or bag) 임

사용자는 키 제약조건이나 DISTINCT 선택사항을 사용하여 SQL

릴레이션들을 집합으로 제한할 수도 있음

SQL-99

Database by Yang-Sae MoonPage 30

SELECT-FROM-WHERE 구조

SELECT 문의 구조자료

SELECT < 애트리뷰트 목록 >

FROM < 테이블 목록 >

WHERE < 조건 >

• < 애트리뷰트 목록 >: 질의 결과에 나타나는 애트리뷰트 이름 목록

• < 테이블 목록 >: 질의 대상이 되는 릴레이션 목록

• < 조건 >: 질의 결과의 투플들이 만족해야 하는 조건 ( 부울 ) 식

SQL 질의와 관계 대수• SQL 은 관계 대수의 SELECT, PROJECT, JOIN 명령으로 표현 가능함

• SELECT 절 : 프로젝션 애트리뷰트에 해당

• WHERE 절 : 선택조건 , 조인조건에 해당

SQL 질의의 결과• 동일한 속성값을 가지는 투플들이 중복될 수 있음 (DISTINCT 사용하면 … )

SQL-99

Database by Yang-Sae MoonPage 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))

Database by Yang-Sae MoonPage 32

SELECT-FROM-WHERE 예제 (2/3)

질의 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 연산에 해당

SQL-99

Database by Yang-Sae MoonPage 33

SELECT-FROM-WHERE 예제 (3/3)

질의 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 은 부서와 담당 관리자를 조인

SQL-99

Database by Yang-Sae MoonPage 34

모호한 애트리뷰트 이름과 별명 사용 (1/3)

동일한 이름을 갖는 애트리뷰트의 사용• 서로 다른 릴레이션에서 동일한 이름을 갖는 애트리뷰트가 사용될 수 있음

• 릴레이션 이름과 함께 애트리뷰트 이름을 사용함으로써 모호함을 방지해야 함

• 질의 작성 시 릴레이션 이름 다음에 점 (.) 을 두고 애트리뷰트 이름을 명시함

질의 1A

• ‘Research’ 부서에서 일하는 모든 종업원들의 이름과 주소를 검색하시오 .

SELECT FNAME, EMPLOYEE.NAME, ADDRESS

FROM EMPLOYEE, DEPARTMENT

WHERE DEPARTMENT.NAME=‘Research’ AND

DEPARTMENT.DNUMBER=EMPLOYEE.DNUMBER ;

SQL-99

Database by Yang-Sae MoonPage 35

모호한 애트리뷰트 이름과 별명 사용 (2/3)

동일한 릴레이션을 두 번 참조하는 경우• 동일한 릴레이션을 두 번 참조하는 경우에도 모호성이 발생함

• 이 경우에도 모호함을 방지하기 위하여 릴레이션 이름의 별명을 애트리뷰트 이름 앞에

붙여서 사용함

질의 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 를 선언하여 사용함

SQL-99

Database by Yang-Sae MoonPage 36

모호한 애트리뷰트 이름과 별명 사용 (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

FROM EMPLOYEE E, DEPARTMENT D // EMPLOYEE AS E, DEPART-

MENT AS D

WHERE D.NAME=‘Research’ AND D.DNUMBER=E.DNUMBER ;

SQL-99

Database by Yang-Sae MoonPage 37

WHERE 의 생략과 ‘’의 사용 (1/3)

WHERE 절의 생략• SQL 에서 WHERE 절을 생략하면 투플 선택에 대한 조건이 없다는 것을 의미함

• FROM 절에 있는 테이블의 모든 투플이 조건을 만족하게 됨

질의 9

• 데이터베이스에서 EMPLOYEE 의 모든 SSN 을

선택하시오 .

SELECT SSN

FROM EMPLOYEE ;

질의 10

• EMPLOYEE 의 SSN 과 DEPARTMENT 의 DNAME 의 모든

조합을 선택하시오 .

SELECT SSN, DNAME

FROM EMPLOYEE, DEPARTMENT ;

SQL-99

Database by Yang-Sae MoonPage 38

WHERE 의 생략과 ‘’의 사용 (2/3)

선택된 투플들의 모든 애트리뷰트 값들을 검색하는 경우• 모든 애트리뷰트 이름을 명시적으로 열거하지 않고 단지 ‘’를 사용함

질의 1C

• 5 번 DEPARTMENT 에서 일하는 EMPLOYEE 투플들의 모든 애트리뷰트 값들을

검색하라

SELECT

FROM EMPLOYEE

WHERE DNO=5 ;

SQL-99

Database by Yang-Sae MoonPage 39

WHERE 의 생략과 ‘’의 사용 (3/3)

질의 1D

• ‘Research’ 부서에서 일하는 모든 종업원들에 대하여 EMPLOYEE 의 모든

애트리뷰트들과 DEPARTMENT 의 모든 애트리뷰트들을 검색하라 .

SELECT

FROM EMPLOYEE, DEPARTMENT

WHERE DNAME=‘Research’ AND DNO=DNUMBER ;

질의 10A

• 릴레이션 EMPLOYEE 와 DEPARTMENT 의 카티션 프로덕트 결과를 모두 검색하라 .

SELECT

FROM EMPLOYEE, DEPARTMENT ;

SQL-99

Database by Yang-Sae MoonPage 40

SQL 에서 집합으로서의 테이블 (1/2)

투플의 중복허용• 릴레이션이나 질의의 결과로 중복된 투플들이 나타날 수 있으므로 , SQL 에서는

일반적으로 릴레이션을 집합으로 취급하지 않음

• 중복된 투플의 삭제

SELECT 항목에서 키워드 DISTINCT 를 사용

DISTINCT 는 질의 결과에서 유일한 투플들만 남기라는 의미의 키워드임

질의 11• 모든 사원의 급여를 검색하라 .

SELECT SALARY

FROM EMPLOYEE ;

질의 11A• 모든 사원의 구별되는 급여를 검색하라 .

SELECT DISTINCT SALARY

FROM EMPLOYEE ;

SQL-99

Database by Yang-Sae MoonPage 41

SQL 에서 집합으로서의 테이블 (2/2)

SQL 에서의 집합 연산• 합집합 (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') ;

SQL-99

Database by Yang-Sae MoonPage 42

부분 문자열 패턴 비교와 산술 연산자 (1/3)

문자열에 대한 비교• SQL 은 LIKE 비교 연산자를 사용하여 문자열 (혹은 부분 문자열 ) 에 대해 비교조건을

적용할 수 있음

• 부분 문자열을 표현할 때 ‘ %’ 는 임의의 개수의 문자를 의미하고 , ‘_’ 는 임의의 한

문자를

의미함

SQL-99

Database by Yang-Sae MoonPage 43

부분 문자열 패턴 비교와 산술 연산자 (2/3)

질의 12

• 주소가 Houston, Texas 인 모든 종업원을 검색하시오 .

SELECT FNAME, LNAME

FROM EMPLOYEE

WHERE ADDRESS LIKE '%Houston, TX%’ ;

[WHERE ADDRESS LIKE ‘*Houston, TX*’ ;] // 다른 버전의 예

질의 12 A

• 1950년대에 태어난 모든 사원을 검색하라 .

SELECT FNAME, LNAME

FROM EMPLOYEE

WHERE BDATE LIKE ‘__5________’ ;

[WHERE BDATE LIKE ‘??5????????’ ;] // 다른 버전의 예

SQL-99

Database by Yang-Sae MoonPage 44

부분 문자열 패턴 비교와 산술 연산자 (3/3)

질의內 산술식 허용

질의 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 30000 AND 40000) AND DNO=5

SQL-99

Database by Yang-Sae MoonPage 45

질의 결과의 정렬 (1/2)

질의 결과의 정렬• ORDER BY 절

하나 이상의 애트리뷰트 값 순서로 질의 결과 투플을 정렬

• Default 정렬은 오름차순 (ASC) 임

키워드 DESC: 내림차순으로 정렬 – Descending

키워드 ASC: 오름차순 정렬 – Ascending

예 : ORDER BY DNAME DESC, LANME ASC, FNAME ASC

SQL-99

Database by Yang-Sae MoonPage 46

질의 결과의 정렬 (2/2)

질의 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 ;

SQL-99

Database by Yang-Sae MoonPage 47

데이터베이스 강의 개요

SQL 의 데이터 정의와 데이터 타입

SQL 에서 기본 제약조건의 명시

SQL 에서 스키마 변경문

SQL 에서의 기본 질의

조금 복잡한 SQL 질의

SQL 에서 삽입 , 삭제 , 갱신문

SQL 의 기타기능

SQL-99

Database by Yang-Sae MoonPage 48

더 복잡한 SQL 질의

널 값을 포함한 비교

중첩 질의 (nested query) 와 집합비교

상관 중첩 질의

SQL 의 EXISTS 함수와 UNIQUE 함수

SQL 에서 명시적 집합과 애트리뷰트의 재명명

SQL 에서 조인된 테이블

SQL 에서 집단함수

그룹핑 : Group by 와 Having 절

SQL 에 대한 논의와 요약

SQL-99

Database by Yang-Sae MoonPage 49

널 값을 포함한 비교

널 값의 의미• 알려지지 않은 값 ( 존재하지만 알지 못하는 )

• 이용할 수 없거나 보류해둔 값 ( 존재하지만 의도적으로 보류한 )

• 적용할 수 없는 애트리뷰트 ( 이 투플에는 정의되지 않는 )

애트리뷰트의 값이 NULL 인지 검사하는 연산자 ( 아래 질의 18 참조 )

• IS NULL

• IS NOT NULL

질의 18

• 상사가 없는 모든 종업원들의 이름을 검색하시오 .

SELECT FNAME, LNAME

FROM EMPLOYEE

WHERE SUPERSSN IS NULL ;

SQL-99

Database by Yang-Sae MoonPage 50

중첩질의 (nested query) 와 집합비교 (1/5)

중첩 질의• 다른 질의의 WHERE 절 내에 완전한 SELECT 질의가 나타나는 형태

• 외부 질의와 내부 질의로 구분됨

비교 연산자 IN

• 외부 질의의 한 투플에 대하여 , 이 투플이 임의의 투플 집합의 원소가 되는지 비교하는

연산임

• 집합에 있어서 원소 여부를 확인하는 와 동일한 기능을 함

SQL-99

Database by Yang-Sae MoonPage 51

중첩질의 (nested query) 와 집합비교 (2/5)

질의 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’) ;

SQL-99

( 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') ;

Database by Yang-Sae MoonPage 52

중첩질의 (nested query) 와 집합비교 (3/5)

질의 : SSN 이 123456789 인 사원이 일하는 프로젝트와 일한 시간의

조합이 동일한 사원의 SSN 을 검색하라 .

SELECT DISTINCT ESSN

FROM WORKS_ON

WHERE (PNO, HOURS) IN ( SELECT PNO, HOURS

FROM WORKS_ON

WHERE SSN=‘123456789’);

SQL-99

Database by Yang-Sae MoonPage 53

중첩질의 (nested query) 와 집합비교 (4/5)

= ALL 연산자• 하나의 값 v 가 집합 V 내의 모든 값들과 같으면 참이 됨

• ALL 앞에 = 대신 >, >=, <, <= 를 사용할 수도 있음

= ANY(= SOME) 연산자• 하나의 값 v 가 집합 V 내의 어떤 하나의 값과 같으면 참이 됨

• ANY(SOME) 앞에 = 대신 >, >=, <, <= 를 사용할 수도 있음

질의 : 5 번 부서에 근무하는 모든 사원보다 급여가 많은 사원을 검색하

라 .SELECT LNAME, FNAMEFROM EMPLOYEEWHERE SALARY > ALL ( SELECT SALARY

FROM EMPLOYEEWHERE DNO=5) ;

SQL-99

Database by Yang-Sae MoonPage 54

중첩질의 (nested query) 와 집합비교 (5/5)

중첩 질의에서 애트리뷰트 이름의 모호성• 만약 외부 질의문의 FROM 절에 있는 릴레이션과 내부 질의문의 FROM 절에 있는

다른 릴레이션에 동일한 애트리뷰트 이름이 있다면 애트리뷰트 이름의 모호성이 발생할

수 있음

• 애매한 애트리뷰트에 대한 참조규칙은 항상 가장 안쪽 가까운 질의문에 선언된

릴레이션을 먼저 참조하는 것임

• 내부 질의에서 외부 질의에 명시된 릴레이션의 애트리뷰트를 참조하려면 별명을

사용해야 함

질의 16

• 자신의 부양가족과 이름 , 성별이 같은 종업원들의 이름을 검색하시오 .SELECT E.FNAME, E.LNAMEFROM EMPLOYEE AS EWHERE E.SSN IN ( SELECT ESSN

FROM DEPENDENT WHERE E.FNAME=DEPENDENT_NAME AND

E.SEX=SEX) ;

SQL-99

Database by Yang-Sae MoonPage 55

상관 중첩질의 (correlated nested query) (1/2)

상관된 질의 (Correlated Query)

• 내부 질의의 WHERE 절에 있는 조건에서 외부질의에 선언된 릴레이션의 일부

애트리뷰트를 참조하는 경우에 두 질의를 상관된 질의라고 함

상관 중첩질의의 예 ( 질의 16)

• 자신의 부양가족과 이름 , 성별이 같은 종업원들의 이름을 검색하시오 .SELECT E.FNAME, E.LNAMEFROM EMPLOYEE AS EWHERE E.SSN IN ( SELECT ESSN

FROM DEPENDENT WHERE E.FNAME=DEPENDENT_NAME AND

E.SEX=SEX) ;

비중첩 질의로의 변환• 중첩된 SELECT … FROM … WHERE… 블록과 “ =“ 및 IN 비교 연산자를

이용해서 작성한 질의는 항상 단일 블록 질의로 변환할 수 있음

SQL-99

Database by Yang-Sae MoonPage 56

상관 중첩질의 (correlated nested query) (2/2)

질의 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 ;

SQL-99

Database by Yang-Sae MoonPage 57

EXISTS 함수 (1/4)

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)

;

SQL-99

Database by Yang-Sae MoonPage 58

EXISTS 함수 (2/4)

NOT EXIST 함수• 상관된 중첩질의에서 내부 질의의 결과가 공집합인가를 검사함

• NOT EXISTS(Q): 질의 Q 의 결과에 투플이 없다면 참을 반환

질의 6

• 부양가족이 없는 종업원들의 이름을 검색하시오 .

SELECT FNAME, LNAME

FROM EMPLOYEE

WHERE NOT EXISTS ( SELECT *

FROM DEPENDENT

WHERE SSN=ESSN) ;

SQL-99

Database by Yang-Sae MoonPage 59

EXISTS 함수 (3/4)

질의 7

• 부양가족이 적어도 한명 이상 있는 관리자의 이름을 검색하라 .

SELECT FNAME, LNAME

FROM EMPLOYEE

WHERE EXISTS ( SELECT *

FROM DEPENDENT

WHERE SSN=ESSN)

AND

EXISTS ( SELECT *

FROM DEPARTMENT

WHERE SSN=MGRSSN) ;

SQL-99

Database by Yang-Sae MoonPage 60

EXISTS 함수 (4/4) -- 생략

질의 3B

• 5 번 부서가 담당하는 모든 프로젝트에 근무하는 사원들의 이름을 검색하라 .

( 각 사원에 대하여 그 사원이 근무하지 않는 5 번 부서의 관리 프로젝트가 존재하지

않는 경우에 그 사원을 검색하라 )

SELECT FNAME, LNAME

FROM EMPLOYEE

WHERE NOT EXISTS ( SELECT *

FROM WORKS_ON AS B

WHERE (B.PNO IN ( SELECTPNUMBER

FROM PROJECT

WHERE DNUM=5))

AND

NOT EXISTS ( SELECT *

FROM WORKS_ON AS C

WHERE C.PNO=B.PNO)) ;

SQL-99

B.PNO 가 5 번 부서에서 관리하는

프로젝트다

B.PNO 프로젝트에서근무하는 사원이 존재하지 않는다

Database by Yang-Sae MoonPage 61

명시적 집합과 애트리뷰트 재명명 (1/2)

WHERE 절에 값들의 명시적 집합 사용 가능

질의 17

• 프로젝트 번호 1, 2, 3 에서 일하는 모든 종업원들의 SSN 을 검색하시오 .

SELECT DISTINCT ESSN

FROM WORKS_ON

WHERE PNO IN (1, 2, 3) ;

SQL-99

Database by Yang-Sae MoonPage 62

명시적 집합과 애트리뷰트 재명명 (2/2)

질의 결과 애트리뷰트의 재명명• 결과에 나타나는 애트리뷰트의 이름은 키워드 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;

SQL-99

Database by Yang-Sae MoonPage 63

SQL 에서 조인된 테이블

FROM 절에 조인 연산의 결과를 지정• 질의의 FROM 절에 조인연산의 결과를 지정할 수 있음

질의 1A

• ‘Research’ 부서에서 일하는 모든 종업원들의 이름과 주소를 검색하시오 .

SELECT FNAME, LNAME, ADDRESS

FROM (EMPLOYEE JOIN DEPARTMENT ON DNO=DNUMBER)

WHERE DNAME=‘Research’ ;

질의 1B

SELECT FNAME, LNAME, ADDRESS

FROM (EMPLOYEE NATURAL JOIN

(DEPARTMENT AS DEPT (DNAME, DNO, MSSN, MSDATE)))

WHERE DNAME=‘Research’ ;

SQL-99

Database by Yang-Sae MoonPage 64

집단 함수 (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)

FROM EMPLOYEE ;

SQL-99

Database by Yang-Sae MoonPage 65

집단 함수 (Aggregate Function) (2/4)

집단함수• 조건을 만족하는 투플들을 대상으로 집단 함수 값들을 얻으려면 , WHERE 절에서

투플의 조건을 제시할 수 있음

질의 20

• ‘Research’ 부서에 있는 모든 종업원들의 급여의 합과 최고 급여 , 최소 급여 , 평균

급여를 구하시오 .

SELECT SUM (SALARY), MAX (SALARY), MIN (SALARY), AVG

(SALARY)

FROM EMPLOYEE, DEPARTMENT

WHERE DNO=DNUMBER AND DNAME=‘Research’ ;

SQL-99

Database by Yang-Sae MoonPage 66

집단 함수 (Aggregate Function) (3/4)

COUNT(): 투플들의 수를 반환

질의 21

• 회사내의 총 종업원의 수를 검색하시오 .

SELECT COUNT ()

FROM EMPLOYEE ;

질의 22

• ‘Research’ 부서에 속해 있는 종업원의 수를 검색하시오 .

SELECT COUNT ()

FROM EMPLOYEE, DEPARTMENT

WHERE DNO=DNUMBER AND DNAME=‘Research’ ;

SQL-99

Database by Yang-Sae MoonPage 67

집단 함수 (Aggregate Function) (4/4)

특정 투플을 선택하기 위해 집단함수 이용 : 중첩 질의 이용

질의 5

• 둘 이상의 부양가족이 있는 모든 사원의 이름을 검색하시오 .

SELECT LNAME, FNAME

FROM EMPLOYEE

WHERE (SELECT COUNT ()

FROM DEPENDENT

WHERE SSN=ESSN ) >= 2 ;

SQL-99

Database by Yang-Sae MoonPage 68

Grouping: Group by & Having (1/7)

그룹화 (grouping)

• 특정 애트리뷰트 ( 들 ) 의 값이 같은 투플들을 모아서 그룹을 생성하고 , 이들 그룹에

대하여 집단함수를 적용함

• 이 때 , 특정 애트리뷰트들을 그룹화 애트리뷰트라 하며 , SQL 의 GROUP BY 절에

지정함

• 대부분의 경우 , SELECT 절에 그룹화 애트리뷰트 ( 들 ) 를 지정하여 , 그 값과 그 값에

해당하는 투플 그룹에 집단함수를 적용한 결과를 동시에 반환함

SQL-99

Database by Yang-Sae MoonPage 69

Grouping: Group by & Having (2/7)

질의 24

• 각 부서에 대해서 , 부서 번호 , 부서 내에 있는 종업원의 수 , 평균 봉급은 ?

SELECT DNO, COUNT(), AVG(SALARY)

FROM EMPLOYEE

GROUP BY DNO ;

EMPLOYEE 투플들을 DNO 값을 기준으로 분할하여 그룹들을 생성함

그 다음에 , 각 그룹의 투플들에 대하여 COUNT 와 AVG 함수를 적용함

SQL-99

Database by Yang-Sae MoonPage 70

Grouping: Group by & Having (3/7)

질의 25

• 각 프로젝트에 대해서 프로젝트 번호 , 프로젝트 이름 , 그 프로젝트에서 근무하는

사원들의 수를 검색하라 .

SELECT PNUMBER, PNAME, COUNT ()

FROM PROJECT, WORKS_ON

WHERE PNUMBER=PNO

GROUP BY PNUMBER ;

SQL-99

Database by Yang-Sae MoonPage 71

Grouping: Group by & Having (4/7)

Having: GROUP BY 절에 대한 조건을 제시할 수 있음

질의 26

• 세 명 이상의 사원이 근무하는 각 프로젝트에 대해서 프로젝트 번호 , 프로젝트 이름 ,

프로젝트에서 근무하는 사원의 수를 검색하라 .

SELECT PNUMBER, PNAME, COUNT()

FROM PROJECT, WORKS_ON

WHERE PNUMBER=PNO

GROUP BY PNUMBER

HAVING COUNT() >= 3 ;

SQL-99

각 그룹에 대해 조건 체크

Database by Yang-Sae MoonPage 72

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

Database by Yang-Sae MoonPage 73

Grouping: Group by & Having (6/7)

질의 27

• 각 프로젝트에 대해서 프로젝트 번호 , 프로젝트 이름 , 5 번 부서에 속하면서

프로젝트에서 근무하는 사원의 수를 검색하라 .

SELECT PNUMBER, PNAME, COUNT ()

FROM PROJECT, WORKS_ON, EMPLOYEE

WHERE PNUMBER=PNO AND SSN=ESSN AND DNO=5

GROUP BY PNUMBER ;

SQL-99

Database by Yang-Sae MoonPage 74

Grouping: Group by & Having (7/7) - 생략

질의 28

• 6 명 이상의 사원이 근무하는 각 부서에 대해서 부서번호와 40,000 달러가 넘는 급여를

받는 사원의 수를 검색하라 .

SELECT DNUMBER, COUNT ()

FROM DEPARTMENT, EMPLOYEE

WHERE DNUMBER=DNO AND SALARY > 40000 AND

DNO IN ( SELECT DNO

FROM EMPLOYEE

GROUP BY DNO

HAVING COUNT () >= 6)

GROUP BY DNUMBER ;

SQL-99

Database by Yang-Sae MoonPage 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 절은 정렬 기준이 되는 애트리뷰트 ( 들 ) 을 지정함

SQL-99

Database by Yang-Sae MoonPage 76

데이터베이스 강의 개요

SQL 의 데이터 정의와 데이터 타입

SQL 에서 기본 제약조건의 명시

SQL 에서 스키마 변경문

SQL 에서의 기본 질의

더 복잡한 SQL 질의

SQL 에서 삽입 , 삭제 , 갱신문

SQL 의 기타기능

SQL-99

Database by Yang-Sae MoonPage 77

삽입 , 삭제 , 갱신 구문

INSERT 명령

DELETE 명령

UPDATE 명령

SQL-99

Database by Yang-Sae MoonPage 78

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 (FNAME=‘Richard’, LNAME=‘Marini’,DNO= 4,

SSN=‘653298653’) ;

이름을 명시하지 않은 애트리뷰트들은 NULL 이나 DEFAULT 값을 가짐

SQL-99

Database by Yang-Sae MoonPage 79

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

SQL-99

Database by Yang-Sae MoonPage 80

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, TO-

TAL_SAL)

SELECT DNAME, COUNT (), SUM (SALARY)

FROM DEPARTMENT, EMPLOYEE

WHERE DNUMBER=DNO

GROUP BY DNAME ;

SQL-99

Database by Yang-Sae MoonPage 81

DELETE 구문

DELETE 명령은 릴레이션에서 투플 ( 들 ) 을 제거하는 명령임• 삭제할 투플에 대한 조건은 WHERE 절에서 명시함

• 한번의 DELETE 명령으로 WHERE 절의 조건을 만족하는 투플을 모두 삭제함

U4A: DELETE FROM EMPLOYEE

WHERE LNAME=‘Brown’ ;

U4B: DELETE FROM EMPLOYEE

WHERE SSN=‘123456789’ ;

U4C: DELETE FROM EMPLOYEE

WHERE DNO IN ( SELECT DNUMBER

FROM DEPARTMENT

WHERE DNAME=‘Research’ ) ;

• WHERE 절을 생략한 경우에는 테이블내의 모든 투플을 삭제하며 , 테이블은

데이터베이스 내에서 빈 테이블로 남게 됨

U4D: DELETE FROM EMPLOYEE;

SQL-99

Database by Yang-Sae MoonPage 82

UPDATE 구문 (1/2)

UPDATE 명령은 투플의 애트리뷰트 값을 수정하기 위해 사용함• WHERE 절은 한 릴레이션에서 수정할 투플을 선택하는데 사용됨

• SET 절은 변경할 애트리뷰트와 그들의 새로운 값을 명시함

• 예 : PROJECT 테이블에서 PNUMBER 가 10 인 투플에 대하여 PLOCATION 을

‘ Bellaire’ 로 변경하고 , 담당 부서인 DNUM 을 5 로 변경하라 .

U5: UPDATE PROJECT

SET PLOCATION=‘Bellaire’, DNUM=5

WHERE PNUMBER=10 ;

SQL-99

Database by Yang-Sae MoonPage 83

UPDATE 구문 (2/2)

• 예 : ‘Research’ 부서에 있는 모든 종업원들의 봉급을 10% 인상하라 .

U6: UPDATE EMPLOYEE

SET SALARY=SALARY*1.1

WHERE DNO IN (SELECT DNUMBER

FROM DEPARTMENT

WHERE DNAME=‘Research’) ;

SQL-99

Database by Yang-Sae MoonPage 84

데이터베이스 강의 개요

SQL 의 데이터 정의와 데이터 타입

SQL 에서 기본 제약조건의 명시

SQL 에서 스키마 변경문

SQL 에서의 기본 질의

더 복잡한 SQL 질의

SQL 에서 삽입 , 삭제 , 갱신문

SQL 의 기타기능

SQL-99

Database by Yang-Sae MoonPage 85

SQL 의 기타 기능

권한 기능• SQL 은 데이터베이스 사용자에게 권한을 부여하고 취소하는 기능을 제공함

호스트 언어와 결합되어 사용• SQL 은 C, C++, JAVA, PASCAL 등과 같은 범용 프로그래밍 언어 내에서 사용될 수

있음

• Embedded SQL/C, C++, COBOL, JAVA, PASCAL

트랜잭션 기능• SQL 은 트랜잭션 제어 명령문을 가짐 – 동시성 제어와 회복

VIEW 관련 명령어 (TABLE 과 유사 )

기타 유용한 명령어• 상용 DBMS 는 SQL 명령 이외에도 물리적 데이터베이스 설계 매개변수와

릴레이션들을 위한 파일 구조 , 인덱스와 같은 접근경로를 명시하기 위한 명령어의

집합을 가지고 있음

SQL-99

Database by Yang-Sae MoonPage 86

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

Database by Yang-Sae MoonPage 87

Embedded SQL 예제 : CSQL-99

Database by Yang-Sae MoonPage 88

Embedded SQL 예제 : PHPSQL-99

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

Database by Yang-Sae MoonPage 89

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

Database by Yang-Sae MoonPage 90

SQL VIEW (1/2)SQL-99

View 의 특성• SQL 에서 뷰는 다른 테이블들에서 유도된 “가상” 테이블 - 실제로 저장되지는 않음

• 기본 테이블들의 열로 구성

• 뷰에 대한 질의는 아무런 제한을 받지 않음

• 몇 개 연산들을 뷰로 표현하여 사용하는데 편리함

• 데이터 접근제어로 보안성 제공

• 뷰에 적용할 수 있는 갱신 ( 삽입 , 삭제 ) 연산들은 제한됨

-- 물리적인 형태로 저장되지는 않기 때문에 , 뷰는 일반적인 Alter 문으로 변경할 수

없음

명령어• 뷰를 정의하는 SQL 명령 : CREATE VIEW <view-name>

• 뷰를 삭제하는 SQL 명령 : DROP VIEW <view-name>

Database by Yang-Sae MoonPage 91

SQL VIEW (2/2)SQL-99

Database by Yang-Sae MoonPage 92

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

Database by Yang-Sae MoonPage 93

요약

SQL 의 데이터 정의와 데이터 타입

SQL 에서 기본 제약조건의 명시

SQL 에서 스키마 변경문

SQL 에서의 기본 질의

더 복잡한 SQL 질의

SQL 에서 삽입 , 삭제 , 갱신

SQL 의 기타기능 ( 인덱스 생성 / 삭제 )

SQL-99

Database by Yang-Sae MoonPage 94

Homework #3SQL-99