5장 sql 언어 part iii - uosstatlearn.uos.ac.kr/2013/grad_advprog_spring/chapter5-3.pdf ·...
TRANSCRIPT
5장 SQL 언어 Part III
박창이
서울시립대학교 통계학과
박창이 (서울시립대학교 통계학과) 5장 SQL 언어 Part III 1 / 13
SQL 함수
스칼라 함수
수학 함수
문자열 함수
날짜 함수
통계 관련 집계 함수
교재 표 참조
박창이 (서울시립대학교 통계학과) 5장 SQL 언어 Part III 2 / 13
SQL 함수: 수학 함수
(예제 1) 0과 1사이의 난수 하나 생성
SELECT RAND() as RN
(예제 2) 테이블 Score 필드 값의 제곱근
SELECT ID, SQRT(Score) as SQRTScore
FROM Score
박창이 (서울시립대학교 통계학과) 5장 SQL 언어 Part III 3 / 13
SQL 함수: 문자열 함수
(예제 1) Customer Info 테이블의 주민등록번호에서 왼쪽 두 자리
값을 검색
SELECT CID, LEFT(SID,2) as BirthYear
FROM Customer Info
(예제 2) Customer OnlineInfo 테이블에서 password 의 길이 검색
SELECT CID, LEN(LPW) as LengthofPassword
FROM Customer OnlineInfo
박창이 (서울시립대학교 통계학과) 5장 SQL 언어 Part III 4 / 13
SQL 함수: 날짜 함수
(예제 1) Customer OnlineInfo 테이블에 CID=‘999999’,
LID=‘id=99’, LPW=‘pw=999’, Email=null, Jday=현재날짜 인
레코드 삽입
INSERT INTO Customer OnlineInfo
VALUES (‘999999’, ‘id=99’, ‘pw=999’, null, GETDATE() )
(예제 2) Customer Info 테이블에서 고객들의 나이를 내림차순으로
검색
SELECT CID, Name, year(GETDATE())-year(Bday) as Age
FROM Customer Info
ORDER BY Age DESC
박창이 (서울시립대학교 통계학과) 5장 SQL 언어 Part III 5 / 13
SQL 함수: 통계 관련 집계 함수
(예제 1) Customer Info 테이블의 전체 레코드 수, 고객 나이의
평균과 합 검색
SELECT COUNT(*) as countAll, AVG(
year(GETDATE())-year(Bday) ) as averAge, SUM(
year(GETDATE())-year(Bday) ) as sumAge
FROM Customer Info
(예제 2) Customer Info 테이블의 전체 레코드 수, 고객 나이의
표준편차를 계산 SELECT COUNT(*) as countAll, STDEV(
year(GETDATE())-year(Bday)) as sampleSTDEV, STDEVP(
year(GETDATE())-year(Bday)) as popSTDEV
FROM Customer Info
박창이 (서울시립대학교 통계학과) 5장 SQL 언어 Part III 6 / 13
다차원분석: ROLLUP, CUBE, COMPUTE
집계 기능을 가진 연산자로 GROUP BY 와 함께 데이터에 대한 2
차적 요약
(예제 1) 교과목 테이블과 성적 테이블을 조인하여 과목별 평균
성적 계산
SELECT SubjectName, AVG(Score) as averScore
FROM Score as S INNER JOIN Curriculum as C
ON S.SubjectID=C.SubjectID
GROUP BY SubjectName
박창이 (서울시립대학교 통계학과) 5장 SQL 언어 Part III 7 / 13
(예제 2) 교과목 테이블과 성적 테이블을 조인하여 전체 평균,
학번별 평균 성적 계산(Group By, Rollup 사용)
SELECT ID, SubjectName, AVG(Score) as averScore
FROM Score as S INNER JOIN Curriculum as C
ON S.SubjectID=C.SubjectID
GROUP BY ID, SubjectName WITH ROLLUP
ORDER BY ID
(예제 3) 교과목 테이블과 성적 테이블을 조인하여 전체 평균,
학번별, 과목별 평균 성적 계산 (Group By, Cube 사용)
SELECT ID, SubjectName, AVG(Score) as averScore
FROM Score as S INNER JOIN Curriculum as C
ON S.SubjectID=C.SubjectID
GROUP BY ID, SubjectName WITH CUBE
ORDER BY ID
박창이 (서울시립대학교 통계학과) 5장 SQL 언어 Part III 8 / 13
(예제 4) 교과목 테이블과 성적 테이블을 조인하여 전체 평균,
학번별 평균 성적 계산(Compute 사용)
SELECT ID, SubjectName, Score
FROM Score as S INNER JOIN Curriculum as C
ON S.SubjectID=C.SubjectID
ORDER BY ID, SubjectName
COMPUTE AVG(Score) BY ID
COMPUTE AVG(Score)
박창이 (서울시립대학교 통계학과) 5장 SQL 언어 Part III 9 / 13
데이터베이스 객체 정의
뷰(View): 하나 이상의 테이블로부터 유도되어 만들어진 가상
테이블
실제 데이터가 저장되지 않음
테이블처럼 데이터 삽입, 갱신이 가능하지만 때론 제약이 따름
ALTER 문은 사용할 수 없음
저장 프로시저(stored procedure): 데이터베이스에 미리 컴파일
되어 저장해 놓은 SQL 문장
질의 처리 속도 향상
업무처리 루틴 공유
네트워크 트래픽 감소
트리거(trigger): 테이블에 삽입, 갱신, 삭제 등의 사건이 일어날 때
자동적으로 수행되는 저장 프로시저
박창이 (서울시립대학교 통계학과) 5장 SQL 언어 Part III 10 / 13
데이터베이스 객체 정의: 뷰
(예제)
CREATE VIEW Student Customer (CID, Name, Job, Sex)
as SELECT CID, Name, Job, Sex
FROM Customer Info
WHERE Job=‘학생’
WITH CHECK OPTION
뷰 제거
DROP VIEW Student Customer
박창이 (서울시립대학교 통계학과) 5장 SQL 언어 Part III 11 / 13
데이터베이스 객체 정의: 저장 프로시저
생성
CREATE PROCEDURE sp CustomerInfo
AS
SELECT COUNT(*) as CountAll, AVG(
year(getdate())-year(Bday) ) as averAge, SUM(
year(getdate())-year(Bday) ) as sumAge
FROM Customer Info
실행
EXECUTE sp CustomerInfo
제거
DROP PROCEDURE sp CustomerInfo
박창이 (서울시립대학교 통계학과) 5장 SQL 언어 Part III 12 / 13
데이터베이스 객체 정의: 저장 프로시저
생성
CREATE TRIGGER cust delTrigger
ON Customer Info
FOR DELETE
AS
DELETE Customer OnlineInfo
WHERE CID IN ( SELECT CID
FROM Customer Info )
제거
DROP TRIGGER cust delTrigger
박창이 (서울시립대학교 통계학과) 5장 SQL 언어 Part III 13 / 13