반응형

※ DB는 UI상에서도 작성할 수 있지만 쿼리로도 작성할 수 있다.

데이터베이스 = 스키마, 테이블 = 객체

 

  • DB

 - CREATE DATABASE [DB 명]

 - DROP DATABASE [DB 명]

 

  • TABLE

 - CREATE TABLE [테이블 명] (열 명, 자료형, DEFAULT, [NULL | NOT NULL], ...)

 - DROP TABLE [테이블 명]

 - ALTER TABLE [테이블 명] ADD / DROP / ALTER CULUMN [열 명, 자료형, ...]

 

※ 테이블 DROP시, 게임처럼 삭제 확인창이 뜨지 않으니 주의할 것. (자주 사용하지 않음)

 

  • 제약

 - NULL, NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY가 있다.

 - CREATE TABLE로 테이블 작설할 때 제약을 같이 정의한다. ('()'의 내용)

 - ALTER TABLE로 제약을 지정하거나 변경 가능.

 - 위와 같은 열에 대해 정의하는 제약을 '열 제약'이라고 한다.

 - CONSTRAINT : 제약에 이름을 부여할 수 있다. (이름을 붙이면 관리가 용이하다.)

 - ex) ALTER TABLE [테이블 명] ADD CONSTRAINT [제약 명] PRIMARY KEY (열 명)

 


  • 정규화

 - DB의 테이블을 규정된 형태로 개선해나가는 것.

 - 정규화를 통해 DB가 효율적으로 동작하도록 만들 수 있다.

 

 - 정규화 예시 DB

id name class level inventory
1 a knight 3 itemA 1개, itemB 3개
2 b wizard 2 itemA 5개, itemB 2개

 

 1. 반복되는 데이터를 세로(행 방향)로 늘려준다.

id name class level item itemCode count
1 a knight 3 itemA 01 1
1 a knight 3 itemB 02 3
2 b wizard 2 itemA 01 5
2 b wizard 2 itemB 02 2

 

 

 2. 데이터 분할, 키 처리

 - name, class, level과 item을 다른 테이블로 옮긴다.

 

2-1) 플레이어 테이블

id name class level
1 a knight 3
2 b wizard 2

 

2-2) 아이템 테이블

itemCode item
01 itemA
02 itemB

 

2-3) 인벤토리 정보 테이블

id itemCode count
1 01 1
1 02 3
2 01 5
2 02 2

 

위와 같이 정규화가 가능하다.

반응형

'Develoment > DB' 카테고리의 다른 글

[Database] 문법 정리  (0) 2021.06.10
[Database] 프로그램  (0) 2021.06.09
반응형

※ 구분은 대소문자 상관없지만 가독성을 위해 대문자를 이용(변수는 대소문자 지켜야 함)

※ 구문 실행 순서에 따라 AS로 지정한 별칭이 적용되지 않는 구문이 있다.


  • 구문 순서

SELECT / FROM / WHERE / GROUP BY / HAVING / ORDER BY / OFFSET FETCH

 

  • 실행 순서

FROM / WHERE / GROUP BY / HAVING / SELECT / ORDER BY / etc..


  • SELECT FROM

1. SELECT

 - 질의라고 함.

 - 모든 열을 가지고 올때는 '*'를 사용한다.

 - 여러 열들을 가지고 올때는 ','로 구분한다.

 - 특정 열의 별칭을 달고 싶을때는 '열명 AS 별칭'을 사용한다.

 - 갯수 지정이 가능하다 (상위 10개 : TOP 10 *, 상위 10% : TOP 10 PERCENT *)

 

2. FROM

 - 테이블 명을 입력한다.

 

  • WHERE

 - 조건구문. 원하는 조건의 행을 가져온다.

 - 조건 연산자는 문자로 풀어서 사용한다.

!= NULL IS NOT NULL
== NULL IS NULL
&& AND
|| OR

 - LIKE : 문자 패턴 매칭

% : 임의의 문자열 ex) 'Hello%' : Hello가 들어간 모든 값을 얻을 수 있음
_ : 임의의 문자 ex) 'Hell_' : Hell과 나머지 문자 1개가 들어간 모든 값을 얻을 수 있음

 

  • GROUP BY

 - 그룹핑

 - 중복을 제거하는 DISTINCT와 다르게 집계의 인수로 값을 넘겨줄 수 있다.

 

  • HAVING

 - GROUP BY에 대한 추가 조건을 입력하는 구문

 

  • ORDER BY

 - 결과를 정렬한다.

 - 오름차순(ASC), 내림차순(DESC)가 있다. (기본값 : ASC)

 - 정렬은 테이블에 영향을 주지 않는다.

 - 여러 열들을 정렬할 때 ','로 구분한다.

 

  • OFFSET

 - 원하는 구간을 지정할 수 있다.

 - ex) 50위 부터 100위의 순위를 가지고 온다 : OFFSET 50 ROWS FETCH NEXT 50 ROWS ONLY

 - 사용빈도가 낮다. (알고만 있을것)

 


  • DATETIME

 - DATE : 연/월/일

 - TIME : 시/분/초

 - DATETIME : 연/월/일/시/분/초

 - 날짜는 문자열로 관리할 경우 정확한 날짜 비교가 쉽지 않다.

   (문자열은 비교 대상끼리 일치를 보는것이 아닌 사전 순서의 일치를 보는것)

 - 문자열로 입력시 DATETIME 형식 : YYYYMMDD / YYYYMMDD hh:mm:ss.nnn / YYYY-MM-DDThh:mm

 - 문자열로 시간 형식을 맞춰 입력하면 CAST 함수를 사용하지 않아도 자동으로 CAST가 된다.

 - GETDATE() : T-SQL 한정 현재 시간 가져오는 함수 (표준 : CURRENT_TIMESTAMP)

 - GETUTCDATE() : 그리니치 표준시(글로벌 서비스 시)

 - 기타 함수 : DATEADD(시간 더하기), DATEDIFF(시간 차), DATEPART(특정 시간 가져오기(연 or 월 or 일 등))

 - DATEPART(DAY, sometime) == DAY(somtime)

 


  • 연산

 - Null의 연산 결과는 Null이다.

 - 한글의 경우 문자열 앞에 N을 붙여 유니코드로 변경해준다. (기본 값으로는 ?로 표기가 됨)

 - 문자열 연산 : CONCAT(), SUBSTRING(), TRIM() 등이 있다.

 

  • CASE

 - CASE 열명 WHEN 조건 THEN 값 END

 - CASE WHEN 조건 THEN 값 END

 - default는 ELSE로 표기한다.

 - ELSE를 넣어주지 않았을때 ELSE에 해당되는 값이 들어가면 그 값은 Null이다.

 


  • 집계

 - COUNT(), SUM(), AVG(), MIN(), MAX()가 있다.

 - 집계 함수는 값이 Null인 경우는 무시하고 실행된다.

 - 인수에 '*'를 넣을 수 있는 함수는 COUNT()가 유일하다.

 - MIN(), MAX()는 문자열이나 날짜에도 사용이 가능하다.

 - WHERE 구에서는 사용이 불가능하다.

 

  • DISTINCT(중복 처리)

 - DISTINCT 뒤에 붙인 열명이 여러개인 경우, 붙인 열들의 값이 전부 일치해야 중복 처리가 된다.

 


  • INSERT

 - INSERT INTO [테이블 명] VALUES [열의 값, 열의 값, ....]

 - VALUES의 값이 모자라면 에러가 발생한다.

 

  • DELETE

 - DELETE FROM [테이블 명] WHERE [조건]

 

  • UPDATE

 - UPDATE [테이블 명] SET [열 = 값] WHERE [조건]

 

물리삭제(DELETE)와 논리삭제(UPDATE)

 - 논리삭제의 경우 Delete flag의 열을 둔 뒤, Delete flag 값의 변경으로 유저의 삭제 여부를 알수있음.

 - 논리삭제의 경우 물리적으로 삭제한것이 아니기 때문에 추후에 복구가 가능함.

 - 개인정보(SNS)등을 포함한 정보는 물리삭제를 한다.

 

INSERT SELECT

 - 테이블의 데이터를 다른 테이블에 복사할때 사용한다.

 - SubQuery와 유사하지만 기능의 차이가 있다.

 


  • SubQuery

 - SQL 명령문 안에 지정하는 하부 SELECT.

 - 서브쿼리의 결과가 다중행인 경우 IN을 사용한다.

 - 다른 구문에서도 사용 가능하지만 주로 WHERE 구문에서 사용된다.

 

상관 관계 서브쿼리

 - EXISTS, NOT EXISTS가 있다.

 - IN과 유사하지만 확장성이 높다.

 


  • INDEX

 - CREATE INDEX [인덱스 명] ON [테이블 명(열 명)]

 - DROP INDEX [테이블 명.인덱스 명]

 

 1. PRIMARY KEY = 대부분 CLUSTERED INDEX

 - 테이블당 1개만 존재한다.

 - 제일 빠름.

 - 등록시 명시하지 않으면 기본적으로 CLUSTERED로 설정된다.

 - Dictionary의 KEY와 같음. (사전 순서)

 

 2. 나머지 = NON CLUSTERED INDEX

 - 갯수 제한이 없다.

 - 이진 탐색을 한다.

 - 따로 관리하는 일종의 LOOK UP 테이블

 - 색인과 같다.

 


  • UNION

 - 합집합

 - Query UNION Query

 

  • INTERSECT

 - 교집합

 - Query INTERSECT Query

 

  • EXCEPT

 - 차집합

 - Query EXCEPT Query

 


  • CROSS JOIN

 - 교차 결합

 - SELECT * FROM [테이블] CROSS JOIN [테이블]

 

  • INNER JOIN

 - 두 개의 테이블을 가로로 결합.

 - 결합 기준은 ON으로 설정한다.

 - 양쪽에 정보를 갖고있는 것만 JOIN이 된다.

 - SELECT * FROM [테이블] INNER JOIN [테이블] ON [조건]

 

  • LEFT / RIGHT JOIN

 - JOIN 방향의 정보는 무조건 표시, 반대 방향의 테이블의 정보가 JOIN 방향의 테이블에 없으면 NULL로 채움.

 - SELECT * FROM [테이블] LEFT / RIGHT JOIN [테이블] ON [조건]

 


  • TRANSACTION

 - BEGIN TRAN [명령] COMMIT or ROLLBACK

 - 명시하지 않으면 자동으로 COMMIT을 수행한다.

 - TRY CATCH로 응용이 가능함.

 

※ 주의점

 - TRAN이 오래걸리는 작업을 수행하게 되면 해당 작업이 끝날때 까지 다른 쿼리들이 대기하므로 주의.

 


  • 변수

 - DECLARE [변수 명] AS 자료형 (+ 초기화 가능)

 - SET [변수 명] = 으로 대입 가능

 - SELECT 구문에서 대입 가능 (SQL SERVER에서만 가능)

 - 테이블 변수도 만들 수 있다. (만들어진 테이블은 tempdb에 임시로 저장된다)

 

  • BATCH

 - GO

 - { } 블록과 같은 기능을 가진다.

 

  • 흐름 제어

 - BEGIN / END

 


 

 - SSMS 관련 함수 참고 : https://docs.microsoft.com/ko-kr/sql/t-sql/functions/functions?view=sql-server-ver15 

 

Microsoft SQL 데이터베이스 함수란? - SQL Server

Microsoft SQL 데이터베이스 함수란?

docs.microsoft.com

 

반응형

'Develoment > DB' 카테고리의 다른 글

[Database] 데이터베이스 작성  (0) 2021.06.14
[Database] 프로그램  (0) 2021.06.09
반응형

  • Programs

1. MS SQL Express : https://www.microsoft.com/ko-kr/sql-server/sql-server-downloads

 

SQL Server 다운로드 | Microsoft

지금 Microsoft SQL Server 다운로드를 시작하세요. 내 데이터와 워크로드에 가장 적합한 SQL Server 체험판 또는 버전, 에디션, 도구 또는 커넥터를 선택하세요.

www.microsoft.com

2. SSMS(SQL Server ManageMent Studio) : https://docs.microsoft.com/ko-kr/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver15 

 

SSMS(SQL Server Management Studio) 다운로드 - SQL Server Management Studio (SSMS)

최신 버전의 SSMS(SQL Server Management Studio)를 다운로드합니다.

docs.microsoft.com


 

반응형

'Develoment > DB' 카테고리의 다른 글

[Database] 데이터베이스 작성  (0) 2021.06.14
[Database] 문법 정리  (0) 2021.06.10

+ Recent posts