$bash

'0x0300 : Study/0x0305 : SQL'에 해당되는 글 3건

  1. SQL - 트랜잭션 작동 및 복구 (1)
  2. SQL - 기초
  3. SQL - SQL?

SQL - 트랜잭션 작동 및 복구

0x0300 : Study/0x0305 : SQL

트랜잭션 작동 및 복구


데이터 베이스의 기본 구조

데이터 베이스는 물리적으로 파일임


기본적으로 ' *.mdf '와 '*.ldf' 두 파일이 생김.

데이터 파일

// *.mdf 로 생성됨

// 이 파일에는 데이터베이스 개체(테이블, 인덱스 등)와 그 행 데이터가 저장됨

트랜잭션 로그파일

// *.ldf 로 생성됨.

// 데이터의 변경에 대한 내용을 기록해 두는 공간

// 정전 등의 응급한 상황에서 입력된 데이터가 완전하도록 함


데이터 베이스의 간단한 구조도


트랜잭션 개념 및 구문 형식

트랜잭션 개념

- 하나의 논리적 작업단위로 수행되는 일련의 작업


- SQL문 (SELECT/INSERT/UPDATE/DELETE)의 묶음


- 한 단위의 트랜잭션은 모두 처리되거나, 모두 처리 되지 않도록 DBMS가 관리해 준다.


구문 형식

// BEGIN TRANSACTION                         (또는 BEGIN TRAN)

//     SQL구문 ...


// COMMIT TRANSACTION                     (또는 COMMIT TRAN)


자동 커밋 트랜잭션 작동

일반적으로 사용하는 SQL문

// UPDATE userTbl SET addr = '서울'

// WHERE 아이디 = 'AJH'


자동커밋트랜잭션 방식에 의한 내부 작동

// BEGIN TRANSACTION                         (또는 BEFIN TRAN)

// UPDATE userTbl SET addr = '서울'

// WHERE userID = 'AJH'

// COMMIT TRANSACTION                     (또는 COMMIT TRAN)

'0x0300 : Study > 0x0305 : SQL' 카테고리의 다른 글

SQL - 트랜잭션 작동 및 복구  (1) 2016.06.15
SQL - 기초  (0) 2016.06.15
SQL - SQL?  (0) 2016.06.15

SQL - 기초

0x0300 : Study/0x0305 : SQL

SQL 기초

SELECT

관계 연산자의 사용
// SELECT 아이디, 이름 
// FROM userTbl 
// WHERE 생년 >= 1970 AND 신장 >= 182

BETWEEN... AND와 IN()
// SELECT 이름, 신장 
// FROM UserTbl 
// WHERE 신장 BETWEEN 180 AND 183

// SELECT 이름, 지역
// FROM UserTbl
// WHERE 지역 IN (N'서울', N'경기', N'강원'

ANY / ALL / SOME 그리고 하위쿼리(SubQuery)
// SELECT 이름, 신장
// FROM UserTbl
// WHERE 신장 >= ANY (SELECT 신장 FROM UserTb WHERE 지역 = N'서울')

// SELECT 이름, 신장
// FROM UserTbl
// WHERE 신장 = ANY (SELECT 신장 FROM UserTbl WHERE 지역 = N'서울')

ORDER BY (순서대로 정렬)
// SELECT 이름, 신장
// FROM userTbl
// ORDER BY 신장

DISTINCT (중복 제거)
// SELECT DISTINCT addr
// FROM userTbl

TOP(N) (상위 N개만 출력)
// SELECT TOP(10) 신장
// FROM UserTbl

// SELECT TOP(0.1) PERCENT 신장
// FROM UserTbl

GROUP BY (집계함수 활용)
// SELECT 아이디 AS [사용자 아이디], SUM(수량) AS [총 구매 개수]
// FROM buyTbl
// GROUP BY userid

// SELECT AVG(수량) AS [평균 구매 개수]
// FROM buyTbl

// SELECT 아이디, AVG(수량 * 1.0) AS [평균 구매 개수]
// FROM buyTbl
// GROUP BY 아이디


SQL Insert, Update, Delete

Insert 구문 형식
// INSERT INTO 테이블이름 (열이름1, 열이름2, .... )
// VALUES(값1, 값2, 값3, .... )

Update 구문형식
// UPDATE 테이블이름
// SET 열1=값1 , 열2=값2 ...
// WHERE 조건

Delete 구문형식
// DELETE 테이블이름
// WHERE 조건

SQL 고급

JOIN

구매 테이블 중에서 'LCS' 아이디를 가진 사람이 구매한 물건을 발송하기 위해서, 이름 / 주소 / 연락처 등을 조인
// SELECT *
// FROM buyTbl INNER JOIN UserTbl
//     ON buyTbl . 아이디 = UserTbl . 아이디
// WHERE buyTbl. 아이디 = 'LCS' ;

별칭의 사용.
테이블의 별칭을 사용함으로써 코드를 간결화 할 수 있다.
// SELECT *
// FROM BuyTbl B INNER JOIN userTbl  U
//     ON B . 아이디 = U . 아이디
// WHERE B . 아이디 = 'LCS' ;

CASE

구매한 액수에 따라서 최우수고객 / 우수고객 / 일반 고객 등으로 분류하기 위해서는 CASE구문을 활용한다.

// SELECT U.아이디, U.이름, SUM(단가 * 수량) AS [총구매액]


// CASE

//     when (sum(단가*수량) >= 1500) then N'최우수고객'

// when (sum(단가*수량) >= 1000) then N'우수고객'

// when (sum(단가*수량) >= 1) then N'일반고객'

// else N'유령고객'

// end as [고객등급]


// from buyTbl B right join userTbl U

// on B.아이디 = U.이름


// group by U.아이디, U.이름

// order by sum(단가*수량) desc


TRY ... CATCH

오류를 처리하는 데 편리함.

// use db2016a11

// begin try

//  insert into usertbl_ÃÖ°­Çö values('LSG', N'이상구', 1988, N'서울', '999', '9999', 170)

//  print N'정상적으로 입력이 됬습니다.'

// end try


// begin catch

//  print N'응 안되 돌아가 ^ㅡ^'

// end catch



'0x0300 : Study > 0x0305 : SQL' 카테고리의 다른 글

SQL - 트랜잭션 작동 및 복구  (1) 2016.06.15
SQL - 기초  (0) 2016.06.15
SQL - SQL?  (0) 2016.06.15

SQL - SQL?

0x0300 : Study/0x0305 : SQL

데이터 형식

문자데이터

// char, nchar, varchar, nvarchar [n 은 유니코드허용. var는 주소같은 값?..]


숫자 데이터

// int(정수) , real(실수) , bit (0 또는 1)


날짜/시각 데이터

// datetime 밀리초까지 나타낸다.

// smalldatetime 분 까지 나타낸다.


기본키

데이터의 무결성을 지키기 위한 제한된 조건

// 특정 데이터를 입력할 때 무조건 입력되는 것이 아니라, 어떠한 조건을 만족했을 때에만 입력되도록 제한하는 것


테이블의 각 행들은 구분할 수 있는 식별자


중복될 수 없고, NULL값이 입력될 수 없음


기본 키로 설정하면 자동으로 클러스터형 인덱스가 생성됨.


// CREATE TABLE userTbl

// ( userID nchar(8) NOT NULL PRIMARY KEY, name nvarchar(10) NOT NULL)


// CREATE TABLE userTbl

// ( userID nchar(8) NOT NULL CONSTRAINT PK_userID PRIMARY KEY, name nvarchar(10) NOT NULL)


Unique

중복되지 않는 유일한 값을 입력해야 함.


primary key 제약조건과 거의 비슷하며 차이점은 Null값을 허용한는 것(대개 후보키에 설정)


// CREATE TABLE userTbl

// ( userID nchar(8) NOT NULL PRIMARY KEY ... email nchar(30) NULL UNIQUE )


외래 키 (foreign key)

두 테이블 간의 관계를 선언함으로써 데이터의 무결성을 보장해 줌


외래키 관계를 설정하게 되면 하나의 테이블이 다른 테이블에 의존하게 됨


'외래키 테이블'에 데이터를 입력할 때는 꼭 '기준 테이블'을 참조해서 입력하므로, '기준 테이블'에 이미 데이터가 존재해야만 함.


// CREATE TABLE userTbl

// ( userID nchar(8) NOT NULL PRIMMARY KEY, ..... ) GO

// CREATE TABLE buyTbl

// ( num int NOT NULL PRIMARY KEY, userid nchar(8) NOT NULL FOREIGN KEY REFERENCES userTbl(userID) )


데이터 무결성 (Integrity)

개체 무결성

// 기본키가 Null 값을 가질 수 없음

// 이렇게 되면 모든 필드는 키필드에 종속 됨


도메인 무결성

// 필드의 유효한 값만을 허용

// 데이터 타입, Null 허용여부 등이 도메인 무결성을 지켜 줌


참조 무결성

// 외래키가 참조하는 기본키는 반드시 존재해야 함

// 외래키가 참조하고 있는 기본키는 임의로 삭제 불가


Check

입력되는 데이터를 점검하는 기능


Check 제약조건이 설정되면 제약조건에 위배되는  데이터는 입력 안됨


// 출생년도가 1900년 이후이고 현재 시간 이전이어야 하는 조건을 지정


// ALTER TABLE userTbl

// ADD CONSTRAINT CK_birthYear

// CHECK

// (birthYear >= 1900 AND birthYear <= YEAR(GETDATE()))


Default

데이터를 입력하지 않았을 때 자동으로 입력되는 값을 정의하는 방법

//단, 값이 직접 명기되면 DEFAULT로 설정된 값은 무시


// CREATE TABLE userTbl

// userID nchar(8) NOT NULL PRIMARY KEY, name nvarchar(10) NOT NULL, brith Year int NOT NULL DEFAULT YEAR (GETDATE())....



'0x0300 : Study > 0x0305 : SQL' 카테고리의 다른 글

SQL - 트랜잭션 작동 및 복구  (1) 2016.06.15
SQL - 기초  (0) 2016.06.15
SQL - SQL?  (0) 2016.06.15