데데데데데데 (Database) SQL 데데 데데 : 데데 , 데 , 데데데데데 데데 데데데 데데데데데 IT 데데 데데데데데데데
Jan 03, 2016
데이터베이스 (Database)
SQL 추가 기능 :주장 , 뷰 , 프로그래밍 기법
문양세강원대학교 IT 대학 컴퓨터과학전공
Database by Yang-Sae MoonPage 2
강의 내용
주장 (Assertions) 으로 일반적인 제약조건 명시
SQL 에서 뷰 ( 가상 테이블 )
데이터베이스 프로그래밍
내포된 SQL (Embedded SQL)
함수 호출 , SQL/CLI [ 생략 ]
저장 프로시저와 SQL/PSM [ 생략 ]
요약
SQL 추가 기능
Database by Yang-Sae MoonPage 3
주장 (Assertion) 에 의한 제약조건 명시 (1/2)
( 주장의 사용은 기본 SQL 에는 포함되지 않음 )
주장은 관계 DB 에서 제약 조건을 명시하기 위해 사용함
( 특히 , 테이블을 정의 ( 생성 ) 하는 단계에서 주로 사용함 )
사용법• 명령어 : CREATE ASSERTION
• 포함되는 내용 : 제약조건 이름을 가지며 , 다음에 키워드 CHECK 가 오며 ,
데이터베이스 상태가 주장을 만족하는 여부 ( 참 / 거짓 ) 에 따라 조건 (condition) 이
뒤에 옴
SQL 추가 기능
Database by Yang-Sae MoonPage 4
주장 (Assertion) 에 의한 제약조건 명시 (2/2)
주장의 예제 :
• 사원의 급여가 자신이 근무하는 부서의 관리자의 급여보다 많을 수 없다 .
CREATE ASSERTION SALARY_CONSTRAINT
CHECK (NOT EXISTS (
SELECT *
FROM EMPLOYEE E, EMPLOYEE M, DEPARTMENT D
WHERE E.SALARY > M.SALARY AND
E.DNO=D.NUMBER AND
D.MGRSSN=M.SSN))
SQL 추가 기능
Database by Yang-Sae MoonPage 5
일반적인 주장의 사용 - 생략
주어진 조건을 위반하는 질의를 명시
• 해당 질의 ( 의 결과 ) 를 NOT EXISTS 절 내에 포함시킴
질의의 결과가 공집합이 되어야 함
• 이 질의의 결과가 공집합이 아니면 주장은 위반됨
SQL 추가 기능
Database by Yang-Sae MoonPage 6
SQL 트리거
목적 : 조건이 발생할 때 데이터베이스를 모니터하기 위해 ( 제약조건 )
행동의 유형을 명시
트리거는 주장과 유사한 구문으로 표기되며 다음 사항을 포함함• 사건 (e.g., 갱신 연산 ): 어떤 사건이 있으면 검사가 시작됨
• 조건 : 동작을 수행할 조건을 명시함
• 동작 : 주어진 조건이 만족되면 수행
SQL 추가 기능
Database by Yang-Sae MoonPage 7
SQL 트리거 예제
삽입과 갱신 연산을 하는 동안 사원의 월급을 그의 관리자와 비교하기
위한 트리거의 사용
CREATE TRIGGER INFORM_SUPERVISOR
BEFORE INSERT OR UPDATE OF
SALARY, SUPERVISOR_SSN ON EMPLOYEE
FOR EACH ROW
WHEN
(NEW.SALARY > (SELECT SALARY FROM EM-
PLOYEE
WHERE SSN = NEW.SUPERVISOR_SSN))
…
SQL 추가 기능
Database by Yang-Sae MoonPage 8
강의 내용
주장 (Assertions) 으로 일반적인 제약조건 명시
SQL 에서 뷰 ( 가상 테이블 )
데이터베이스 프로그래밍
내포된 SQL (Embedded SQL)
함수 호출 , SQL/CLI [ 생략 ]
저장 프로시저와 SQL/PSM [ 생략 ]
요약
SQL 추가 기능
Database by Yang-Sae MoonPage 9
SQL 에서 뷰의 개념
SQL 에서 뷰는 다른 테이블들에서 유도된 “가상” 테이블
뷰에 적용할 수 있는 갱신 연산들은 제한됨• 물리적인 형태로 저장되지는 않기 때문임 ( 다른 테이블에 영향을 주기 때문임 )
뷰에 대한 질의는 특별한 제한을 받지 않음
몇 개 연산들을 뷰로 표현하여 사용하는데 편리함
SQL 추가 기능
Database by Yang-Sae MoonPage 10
SQL 에서 뷰의 명시
뷰를 정의하는 SQL 명령 : CREATE VIEW
• 뷰의 정의는 ( 가상 ) 테이블 이름
• 애트리뷰트 이름들의 목록
함수나 산술 연산들을 적용하거나 , 기본 릴레이션의 애트리뷰트 이름과 다른
이름을 사용하고자 할 때 이용
• 뷰의 내용을 나타내는 질의
사용 예제 : 다른 WORKS_ON 테이블의 명시CREATE VIEW WORKS_ON_NEW AS
SELECT FNAME, LNAME, PNAME, HOURS
FROM EMPLOYEE, PROJECT, WORKS_ON
WHERE SSN=ESSN AND PNO=PNUMBER
GROUP BY PNAME;
SQL 추가 기능
Database by Yang-Sae MoonPage 11
VIEW 의 이용 및 삭제
새롭게 생성된 가상 테이블 ( 뷰 ) 에 대해 SQL 질의를 사용할 수 있음SELECT FNAME, LNAME
FROM WORKS_ON_NEW
WHERE PNAME=‘Seena’;
• SELECT 의 경우 일반적인 테이블과 구분 없이 사용 가능
뷰의 삭제 : DROP 을 사용하여 더 이상 필요하지 않은 뷰를 제거함DROP WORKS_ON_NEW;
SQL 추가 기능
Database by Yang-Sae MoonPage 12
VIEW 의 구현
질의수정 (query modification) 방식• 뷰에 대한 질의를 기본 테이블들에 대한 질의로 변환하여 처리
• 단점 : 복잡한 질의로 정의된 뷰들은 비효율적
특히 짧은 시간 내에 뷰에 많을 질의가 적용될 때
뷰의 실체화 (view materialization)
• 임의의 뷰 테이블을 물리적으로 생성하고 유지하는 방식
• 가정 : 뷰에 다른 질의들이 사용됨
• 문제점 : 기본 테이블이 갱신되면 뷰 테이블도 변경해야 함
• 해결방법 : 오버헤드가 적은 점진적 갱신 (incremental update) 기법 필요
SQL 추가 기능
Database by Yang-Sae MoonPage 13
뷰의 갱신
집단함수를 사용하지 않은 단일 뷰의 갱신• 뷰의 갱신은 단일 기본 테이블에 대한 갱신으로 사상될 수 있음
조인을 포함하는 뷰의 갱신• 기본 릴레이션들에 대한 갱신 동작으로 사상될 수 있음 ( 항상 가능한 것은 아님 )
갱신할 수 없는 뷰• 그룹화와 집단함수를 사용하여 정의된 뷰는 갱신할 수 없음
• 일반적으로 다수의 테이블을 조인하여 정의한 뷰는 갱신할 수 없음
SQL 추가 기능
Database by Yang-Sae MoonPage 14
강의 내용
주장 (Assertions) 으로 일반적인 제약조건 명시
SQL 에서 뷰 ( 가상 테이블 )
데이터베이스 프로그래밍
내포된 SQL (Embedded SQL)
함수 호출 , SQL/CLI [ 생략 ]
저장 프로시저와 SQL/PSM [ 생략 ]
요약
SQL 추가 기능
Database by Yang-Sae MoonPage 15
데이터베이스 프로그래밍
목적• 응용 프로그램에서 데이터베이스 접근
• 대화식 인터페이스와 다름
필요성• 대화식 인터페이스는 충분하게 편리하지 않음
• 대부분 데이터베이스 연산은 응용 프로그램을 통해 통해 실행
• 오늘날 많은 응용에서 웹 인터페이스를 제공
SQL 추가 기능
Database by Yang-Sae MoonPage 16
데이터베이스 프로그래밍 접근
내포 ( 내장 ) 된 명령문• 데이터베이스 명령문은 호스트 프로그래밍 언어 내에 내포시키는 방법
데이터베이스 함수 라이브러리• 호스트 프로그램에서 데이터베이스 호출을 위해 사용하는 방법
• 응용 프로그래밍 인터페이스 (API: Application Programming Inteface)
새로운 언어의 개발• 데이터베이스 모델 및 질의어와 호환 가능하도록 개발
SQL 추가 기능
Database by Yang-Sae MoonPage 17
임피던스 불일치
데이터베이스 모델과 호스트 프로그래밍 언어 사이의 차이점 때문에
발생하는 문제를 언급할 때 사용하는 용어
데이터 타입의 호환성 문제 각 언어에 대한 바인딩하는 것이 필요
대표적 예 : set vs. record-at-a-time processing
• 개별 애트리뷰트 값들을 추출하기 위해 질의 결과 내에 있는 반복하는 루프 기능이 필요
SQL 추가 기능
Database by Yang-Sae MoonPage 18
데이터베이스 프로그래밍의 동작 순서
1. 클라이언트 프로그램은 데이터베이스 서버에 대한 연결을 설정
(connect) 하거나 개방 (open)
2. 클라이언트 프로그램은 데이터베이스에서 질의나 갱신을 사용함
3. 데이터베이스 접근이 더 이상 필요할 필요가 없을 때 , 클라이언트
프로그램은 연결 종료 (close, disconnect) 해야 함
SQL 추가 기능
Database by Yang-Sae MoonPage 19
강의 내용
주장 (Assertions) 으로 일반적인 제약조건 명시
SQL 에서 뷰 ( 가상 테이블 )
데이터베이스 프로그래밍
내포된 SQL (Embedded SQL)
함수 호출 , SQL/CLI [ 생략 ]
저장 프로시저와 SQL/PSM [ 생략 ]
요약
SQL 추가 기능
Database by Yang-Sae MoonPage 20
내포된 SQL ( 내장된 SQL)
대부분 SQL 문장들은 COBOL, C, Java 와 같은 범용 호스트
프로그래밍 언어에 내포될 수 있음
내포된 SQL 문장은 EXEC SQL 와 END-EXEC ( 또는 세미콜론 (;))
에 의해 호스트 프로그래밍 언어 문장으로 구분함
• 공유 변수들은 SQL 문장 내에서 사용될 때는 콜론 (:) 을 그 앞에 붙임
SQL 추가 기능
Database by Yang-Sae MoonPage 21
예제 : C 에서 변수 선언
DECLARE 내에 변수들은 SQL 구문에서 ( 콜론 (:) 을 붙여 사용 )
공유될 수 있거나 사용됨
SQLCODE 는 데이터베이스와 프로그램 사이에 오류와 예외 조건들을
전달하기 위해 사용
int loop;
EXEC SQL BEGIN DECLARE SECTION;
varchar dname[16], fname[16], …;
char ssn[10], bdate[11], …;
int dno, dnumber, SQLCODE, …;
EXEC SQL END DECLARE SECTION;
SQL 추가 기능
Database by Yang-Sae MoonPage 22
데이터베이스 연결을 위한 SQL 명령문
연결 (connection): 프로그램과 DBMS 서버를 연결하는 역할 수행
( 다중 연결은 불가능하며 한 개의 연결만 활성화 )
CONNECT TO server-name AS connection-name
AUTHORIZATION user-account-info;
현재 활성화된 연결을 다른 것으로 변경가능
SET CONNECTION connection-name;
해제 (Disconnection)
DISCONNECT connection-name;
SQL 추가 기능
Database by Yang-Sae MoonPage 23
내포된 SQL C 프로그래밍 예제
loop = 1;
while (loop) {
prompt (“Enter SSN: “, ssn);
EXEC SQL
select FNAME, LNAME, ADDRESS, SALARY
into :fname, :lname, :address, :salary
from EMPLOYEE where SSN == :ssn;
if (SQLCODE == 0) printf(fname, …);
else printf(“SSN does not exist: “, ssn);
prompt(“More SSN? (1=yes, 0=no): “, loop);
END-EXEC
}
SQL 추가 기능
Database by Yang-Sae MoonPage 24
커서 관리
커서 ( 반복자 ) 는 여러 튜플들을 처리하기 위해 필요
사용법 ( 간략한 버전이며 , 호스트 언어에 따라 달라질 수 있음 )
• OPEN CURSOR: 질의 결과의 첫 번째 투플에 커서 위치 시킴
• FETCH: 다음 튜플로 커서를 이동할 때 사용
• CLOSE CURSOR: 질의 결과에 대한 처리를 종료했음을 나타냄
SQL 추가 기능
Database by Yang-Sae MoonPage 25
동적 SQL
목적 : 실행 시 새로운 SQL 문장 수행• 프로그램은 실행 시에 키보드로부터 SQL 문장을 작성
• 마우스로 클릭한 연산에 대해 동적으로 SQL 질의를 생성
동적 수정문을 포함하는 것은 비교적 간단하지만 동적 질의는 훨씬
더 복잡함• 검색된 애트리뷰트의 타입과 개수를 프로그램의 컴파일 시간을 알 수 없음
SQL 추가 기능
Database by Yang-Sae MoonPage 26
동적 SQL 의 예
EXEC SQL BEGIN DECLARE SECTION;varchar sqlupdatestring[256];EXEC SQL END DECLARE SECTION;…prompt (“Enter update command:“, sqlupdatestring);EXEC SQL PREPARE sqlcommand FROM :sqlupdatestring;EXEC SQL EXECUTE sqlcommand;
SQL 추가 기능
Database by Yang-Sae MoonPage 27
강의 내용
주장 (Assertions) 으로 일반적인 제약조건 명시
SQL 에서 뷰 ( 가상 테이블 )
데이터베이스 프로그래밍
내포된 SQL (Embedded SQL)
함수 호출 , SQL/CLI [ 생략 ]
저장 프로시저와 SQL/PSM [ 생략 ]
요약
SQL 추가 기능
Database by Yang-Sae MoonPage 28
요약
주장 (assertion) 을 사용한 추가적인 제약조건 명시
SQL 트리거 : 주장의 특별한 종류• 적절한 조건이 발생할 때 행동의 유형을 정의
뷰는 임시적 ( 가상적 ) 테이블을 생성하는데 편리한 수단
데이터베이스 프로그래밍• 내포된 SQL (Embedded SQL)
• 동적 SQL (Dynamic SQL)
SQL 추가 기능