590 likes | 769 Views
MS-SQL7.0 Implementation 강의 노트. Written by 남현주. 1 일 history, 설치, R-DBMS Chapter 1. SQL Server 개요 Chapter 2. Transact- SQL 개요 Chapter 3. 데이터베이스 생성하기 (간략히). History (SQL Server 의 역사 ). 1970 년 IBM : 데이터베이스 질의를 위한 언어 만듬 – SEQUEL ( 구조적 질의 언어 : Structured English Query Language )
E N D
MS-SQL7.0 Implementation강의 노트 Written by 남현주
1 일 • history, 설치, R-DBMS • Chapter 1. SQL Server개요 • Chapter 2. Transact- SQL 개요 • Chapter 3. 데이터베이스 생성하기 (간략히)
History (SQL Server의역사) 1970년IBM : 데이터베이스질의를위한언어만듬–SEQUEL (구조적질의언어 : Structured English Query Language) Sybase 와Microsoft 가협력 v1.0을OS/2용으로 , v4.2 부터NT 서버로이식 V6.0 부터는Microsoft 독자적으로개발 6.5, 7.0으로진보된기능들을선보임 (위저드제공, UniCode지원)
제1장 SQL Server 개요 • SQL Server란 클라이언트/서버형의 관계형 데이타베이스 관리 시스템(RDBMS)이다. • 클라이언트/서버(Client/Server Architecture) 클라이언트 : 다른 시스템 구성요소 들에게 서비스나 자원을 요청하는 시스템 구성요소 서 버 : 서비스나 자원을 다른 시스템 구성 요소 들에 제공하는 시스템 구성요소
클라이언트/서버환경 클라이언트는서버에게자신이원하는바를요청(Request)한다. 그러면서버는그에대해처리하고클라이언트에게응답(Response)한다
데이터베이스의필요배경 SAM(Sequential Access Method) I-SAM(Indexed SAM) 파일 출현 PC :dBase, 호스트:네트워크 DB, 계층적DB등장 DBMS(DataBase Management System) 등장 SQL Server는 관계형데이터베이스 관리 시스템 (RDBMS:Relational Database Management System)
- 데이터에 기반한 시스템의 3가지 범주 . 파일 기반 시스템(File-based systems) . 호스트 기반 시스템(Host_based systems) . 클라이언트/서버 시스템(C/S systems) • 관계형 데이터베이스 관리 시스템(RDBMS) 구조 : 2차원 테이블
Transact_SQL SQL Server는 구조화된 쿼리 언어의 한 버전인 Transact-SQL을 데이터베이스 쿼리 및 프로그래 밍언어로 이용한다. Transact-SQL로는 데이터를 액세스하고 관리할 수 있다. 조 작 : DB에 저장된 데이터의 입력, 수정, 삭제, 조 회 등의 작업을 SQL에 의해서 최종사용자에 게 보여지게 함 무결성 : 데이터의 일관성, 믿을 만한 데이터로 만듬
NT 서버와의관계 SQL Server는NT Server가주된플랫폼. NT의기능들중에서SQL Server가그대로사용하는것 은다음과같다. • 보안체계 • 멀트프로세서의지원 • NT 이벤트지원 • 서비스로서의동작 • 성능모니터 • Index서버 • 백오피스와관련성
SQL Server 구성요소 - SQL Server 서비스 . MSSQLServer 서비스 . SQL Server Agent 서비스 . MS DTC (Microsoft Distributed Transaction Coordinator) . MS Search 서비스
- SQL Server 클라이언트 소프트웨어 . SQLServer Enterprise Manager . SQL Server Query Analyzer . SQL Server 관리도구와 마법사 . SQL Server 명령 프롬프트 관리 도구들
SQL Server 구조개요 - 통신 구조 . 어플리케이션 . 데이터베이스 인터페이스 . 네트워크 라이브러리 . 개방형 데이터 서비스
- 데이터 액세스 구조 . 응용 프로그램 프로그래밍 인터페이스 OLE DB ODBC . 데이터 객체 인터페이스 ADO RDO
제2장 Transact-SQL 개요 • SQL Server 프로그래밍 도구 SQL Server Enterprise Management 사용방법과 SQL Server Query Analyzer 사용방법
- 세션 - 쿼리저장 - GO 배치분리자 - 판독의용이를위한여러라인코딩 - 실행(전체, 일부분) - Parse : 분석은하지만실행하지는않음 - 단축키 - osql 유틸리티 : 명령 프롬프트에서쿼리나 스크립트 실행
Transact-SQL 구성요소 • 데이터제어언어(Data Control Language, DCL) • 데이터정의언어(Data Definition Language, DDL) • 데이터조작언어(Data Manipulation Language, DML) • 변수, 연산자, 함수, 처리제어언어, 주석
문(Statement) 설명 GRANT 보안이요구되는시스템에서데이터를조작하고T-SQL 문을실행하는사용자를허가하는엔트리를생성한다. DENY 보안이요구되는시스템에서계정의권한을거부하고사용자, 그룹, 역할로부터그들의그룹과역할멤버쉽을통해권한을상속받는것을막는다. REVOKE 이전에허가또는거부되었던권한을제거한다. (데이터제어언어(Data Control Language, DCL)) DCL문은데이터베이스사용자혹은역할과관련된권한을변경할때사용.
(데이터정의언어(Data Definition Language, DDL)) DDL문은데이터베이스와테이블및저장프로시저같은 데이터베이스객체의생성을통해데이터베이스구조를 정의. CREATE , ALTER, DROP 문 * 참고 : 객체의이름 Fully Qualified Names : 서버이름, 데이터베이스이 름, 소유자이름, 객체이름 대부분의객체참조는로컬서버를디폴트로하고세부분의이름을사용한다
(데이터조작언어(Data Manipulation Language, DML)) DML문은데이터베이스에서데이터를조작. 이문을 이용하여데이터변경또는정보를추출할수있음. SELECT, INSERT, UPDATE, DELETE * 기본적인SELECT 문 SELECT 이후에는가져올컬럼이나표현식을나열하면 된다. 모든컬럼지정시 * FROM 이후에는어떤테이블 로부터데이터를가져오는지지시한다. 여러테이블이 올수도있고, 뷰가올수도있다.WHERE 절이후에는 어떤행을가져올것인지를지시한다. 생략하면전체행을 가져온다.
예) SELECT * FROM titles – titles테이블의전체자료가져오기 SELECT title_id, pub_id, price, title FROM titles –원하는컬럼순으로가져오기 SELECT ‘책번호:’, title_id, pub_id, price, title FROM titles –임의의컬럼만들기
SELECT Title_no = title_id, ‘출판사번호’ = pub_id, price, title FROM titles –컬럼의제목바꾸기(1) SELECT title_id as Title_no , pub_id as [출판사번호], price, title FROM titles –컬럼의제목바꾸기(2) SELECT title_id Title_no , pub_id [출판사번호], price, title FROM titles –컬럼의제목바꾸기(3)
SELECT title_id as Title_no, pubid as ‘출판사번호’, price, Convert(char(30), title) as ‘줄인제목’ FROM titles –자료를변형시킴(1) SELECT title_id as Title_no, pubid as ‘출판사번호’, price * 1.1 as ‘가격(부가세포함)’ FROM titles –자료를변형시킴(2) * 주의 : SELECT 10/3 은?
(로컬변수) 변수는할당된값을갖는언어구성요소이다. 사용자정의로컬변수는 @로시작한다. 예) DECALRE @lvname char(20) SET @ lvname = ‘Dodsworth’ SELECT * FROM employees WHERE lastname = @lvname (연산자) 치환연산자(=), 산술연산자, 단항연산자, 비교연산자, 문자열연결연산자(+), 논리연산자
(함 수) . Rowset함수 : T-SQL 문테이블에서사용될수있는객체를반환한다. . 집계(Aggregate)함수 : 일련의값으로부터하나의요약된값을반환한다. . 스칼라(Scalar)함수 : 하나의값을반환한다. (p96 ~102) 형변환함수 ) CONVERT()
연산함수) ABS() –절대값 CEILING() –소수점이하버림 SELECT CEILING(29.9) FLOOR() –소수점이상절상 SELECT FLOOR(29.9) ROUND() –반올림 SELECT ROUND(29.1, 0), ROUND(29.953, 1)
문자열함수) LTRIM() : 앞쪽의빈칸을모두삭제한다. RTRIM() : 뒤에오는빈칸을삭제한다. SUBSTRING() : 문자나이진문자열의일부분을돌려준 다. (한글도한글자가한문자로인식) SELECT SUBSTRING(‘아버지나는누구예요?’, 3,6) SELECT SUBSTRING(‘ABFZ!!!’, 1,3) REVERSE() –문자표현식을거꾸로돌려준다.
datepart 약어 범위 year Yy 1753-9999 quarter Qq 1-4 month Mm 1-12 Day of year Dy 1-366 Day Dd 1-31 Week Wk 0-51 Weekday Dw 1-7(1이일요일) Hour Hh 0-23 Minute Mi 0-59 Second Ss 0-59 millisencond Ms 0-999 날짜함수) GETDATE() –현재의날짜와시간 SELECT CONVERT(varchar(30), GETDATE(), 102) DATEADD() – datepart부분에지정한숫자값을더한다. SELECT DATEADD(DD, 100, GETDATE()) –오늘로부터 100일후는?
시스템함수) OBJECT_ID() : 데이터베이스의오브젝트아이디번호. OBJECT_NAME() : 데이터베이스오브젝트명 보안함수) SUSER_NAME() : 시스템유저명을돌려준다.
* 조건에맞는행가져오기 SELECT title_id, qty FROM sales WHERE title_id = ‘BU1032’ * 비 교 = > < >= <= <> != !> !<
* NULL SELECT title_id, price FROM titles WHERE price IS NULL 주의)SELECT title_id, price FROM titles WHERE price = NULL
* 정 렬 SELECT title_id, qty FROM sales ORDER BY title_id, qty 주의)SELECT title_id, qty FROM sales ORDER BY title_id, qty DESC
* 범 위 SELECT title_id, qty FROM sales WHERE qty BETWEEN 10 AND 20 (WHERE qty >= 10 AND qty <= 20) * 목 록 SELECT title_id, qty FROM sales WHERE title_id IN (‘BU1032’,’BU1111’,’MC3021’) (WHERE title_id =‘BU1032’ OR title_id =’BU1111’ OR title_id =’MC3021’)
패턴 설명 _ 정확히한문자가와야한다. % 아무것도없는경우를포함하여어떤것이라도상관없다. [ ] [ ]안에있는글자들 [ ^ ] ^ 다음에이는글자는제외한나머지 문자열에서LIKE와패턴매칭
표현식 해당되는것 해당되지않는것 book_ books, booka, booky book, booked book% book, books, booked abook, atbooks, adbooked %book% abook, abooks, book brook, brooks [st]ing sing, ting ving, king, k, v, vin [b-f]ing bing, cing, ding, eing ,fing aing, b, f, ging M[^c]% Mike, Many, Mickey McDonald, McAthur, M, Mc * 중복된행제거–DISTINCT SELECT DISTINCT title_id FROM sales ( ! DISTINCT가사용되면자동으로정렬해줌 )
/* 튜닝을위한제안 */ . NOT 연산자를사용하지말것 : 색인의도움을받을수없다. . 연산자앞에는컬럼만오게할것 . 적절한 ( )와띄어쓰기 :가독성을좋게한다.
(흐름제어언어구성요소) BEGIN… END 블록 IF… ELSE 블록 WHILE 구조 : 지정된조건이참인동안블록을반복 적으로수행 RETURN : 쿼리혹은프로시저로부터무조건빠져나 옴. RETURN 뒤의문은실행되지않는다. 0 값이정상, 0이 아닌값이에러지시를위해사용된다. 인라인주석( -- ) : 주석문자의오른쪽텍스트는무 시된다. 블록주석(/* */)
(배치이용하기) 여러개의SQL문을모아놓고GO라는키워드로구분한 것을배치라고한다. 배치구분자GO를이용하여배치정의하기 • 사용자정의된변수범위는배치에서제한되므로배치구분자GO 뒤에서는참조할수없다. SQL Server는GO가나타날때까지문법검사와실행을 하지않음. 규칙 : CREATE DEFAULT, CREATE TRIGGER, CREATE PROC(EDURE), CREATE RULE, CREATE VIEW는배치의처음에나타나야한다.
(스크립트사용하기) 파일로저장되는하나이상의T-SQL문이다. 즉, 배치를 여러개모은것을스크립트라고한다. 일반적으로파일로 저장해두고반복적인작업을할때사용한다. 표준확장자는 .SQL 이다.
(쿼리가처리되는과정P112~) (캐시쿼리) (다이나믹하게문구성하기) (트랜잭션사용하기)
제3장 데이터베이스 생성하기 • R-DBMS(관계형데이터베이스) 설계소개 데이터베이스란 어느 한 조직의 다수 응용 시스템들이 사용하기 위해 통합, 저장되어진 서로 관련된 데이터의 집합 “서로 관련된 데이터의 집합” 행(Row),열(Column)로 이루어진 2차원 테이블 구조
데이터베이스 데이터 모델링 어플리케이션 테이블(table) 실체(entity) 레코드셋(record set) 열(column) 속성(attribute) 필드(field) 행(row) 인스턴스(instance) 레코드(record) 용어정리> 관계형 데이터베이스는 설계시에 꼭 중요한 모델링이라는 작업이 들어간다. 설계에 들어가는 시간이 개발에 들어가는 시간보다 월등히 많이 필요하다.(70~80%) 모델링을 하는 가장 큰 이유는 데이터의 중복성을 제거하는 것이다.
* 모델링의 3단계 : 실체, 관계, 속성 실체(entity) : 하나로 묶을 수 있는 것의 실질적인 집합 예) 사원 테이블, 고객 테이블 등… 관계(Relationship) : 실체에 대한 설명이나 추가적 인 구분자. 기본키와 참조키로 정의 예) 사원과 부서의 관계, 고객과 주문의 관계 등… 속성(Attribute) : 실체나 관계에 대한 서술적 속성. 컬럼 예) 사원명, 사원번호, 주소, 전화번호 등…
* 논리적인 데이터베이스 설계 .테이블 및 해당 이름 .각 테이블의 컬럼명 .유일 값 요구, 널 허용, 컬럼에 저장될 자료형 같 은 컬럼의 특성 .각 테이블의 기본키 : 테이블의 컬럼을 유일하게 식별할 수 있는 값들을 저장하는 컬럼이다. .테이블간의 관계 : 어떤 테이블의 행들은 다른 테이블의 하나 이상의 행에 종속적이다.이러한 테이블 사이의 종족성을 관계라 한다. 관계를 정의하기 위해서 다른 테이블의 기본 키를 참조하는 이러한 컬럼을 참조 키라 한다.
.관계에는 일대일, 일대다, 다대일, 다대다와 같은 경우가 발생할 수 있다. 참고로 다대다는 R-DB에서는 인정되지 않는 관계로 정규화를 거쳐야 한다. (정 규 화) 1.제 1정규화(1NF) 규칙 : 여러 값을 가진 컬럼이 존재할 수 없다. 반 복되는 그룹이 존재해서는 안된다. 각 행 과 열에는 오직 한 값만이 존재해야 한다.
사번 사번 사번 취미 사원명 사원명 취미 1 1 1 여행 홍길동 홍길동 여행 골프 1 2 사미자 골프 2 사미자 등산 2 등산 1번 사원은 두 가지 취미를 갖고 있다. 이 그룹은 제1 정규화의 대상이 된다. 다음과 같이 정규화 한다.
사번 프로젝트번호 부서 프로젝트 역할 고과율 1 A 전산 팀장 A 1 B 전산 조원 C 1 C 전산 부팀장 B 2 C 경리 팀장 A 3 C 기획 팀장 A 2.제 2정규화(2NF) 규칙 : 모든 키가 아닌 컬럼은 기본 키 전체에 의존 적이어야 한다. 기본키의 일부분에 의존적 이어서는 안된다.
사번 사번 프로젝트 번호 부서 프로젝트 역할 고과율 1 전산 1 A 팀장 A 2 경리 1 B 조원 C 3 기획 1 C 부팀장 B 2 C 팀장 A 3 C 팀장 A 위의 테이블에서 기본키는 (사번+프로젝트 번호)이다. 그런데 부서 컬럼은 사번에 의존적이다. 즉, 부서컬럼은 (사번+프로젝트 번호)에 의존적이지 않고 사번에 의존적이므로 아래와 같이 제 2정규화를 거쳐야 한다.
사번 프로젝트번호 프로젝트 역할 고과율 1 A 팀장 A 1 B 조원 C 1 C 부팀장 B 2 C 팀장 A 3 C 팀장 A 3.제 3정규화(3NF) 규칙: 키가 아닌 컬럼은, 다른 키가 아닌 컬럼에 의 존적이어서는 안된다.
프로젝트 역할 사번 프로젝트번호 고과율 프로젝트 역할 1 팀장 A A 팀장 1 조원 B C 조원 1 부팀장 C B 부팀장 2 C 팀장 3 C 팀장 고과율 컬럼은 프로젝트 역할에 따라 변하고 있음을 볼 수 있다. 즉, 고과율은 키가 아닌, 프로젝트 역할 컬럼에 의존적이다. 아래와 같이 정규화한다.
학번 이름 과목번호 과목명 1 최철호 K 국어 2 이상진 K 국어 3 김철민 K 국어 3 김철민 M 수학 3 김철민 E 영어 2 이상진 H 역사 2 이상진 P 정치 1 최철호 P 정치 4.제 4정규화(4NF) 규칙 : 3NF 테이블은 의존적인 다대다 관계를 가질 수 없다.