프로그래밍 언어/SQL
[SQL] 데이터 타입 CHAR, VARCHAR
MySQL 4.1 이후 버전부터는 CHAR(n), VARCHAR(n)에서 n은 바이트가 아니라 글자 수를 의미한다 또한 4글자 이하의 VARCHAR는 CHAR로 자동으로 변환된다. CHAR는 길이가 고정된 문자열 타입이다. 최대 길이 255지정된 크기만큼 데이터가 들어오지 않는 경우 남은 공간을 공백(trailing space)으로 채워 넣는다.예를 들어서 CHAR(5)로 정의된 컬럼에 'ab'라는 2자리 문자열을 넣게 되면 남은 3자리는 'ab ' 다음과 같이 공백으로 채워진다, 결국 데이터의 크기는 항상 처음 선언된 5 바이트가 소요되고 데이터의 낭비가 발생한다. VARCHAR는 가변의 문자열 타입이다. 최대 길이 65,535Variable Character Field라는 이름의 의미처럼 가변의..
[SQL] 인덱스 힌트 / 옵티마이저 힌트 사용 방법 (주석, 튜닝)
기본적으로 쿼리를 실행하면 DBMS 내의 옵티마이저가 여러개의 실행 계획을 만들고 그 안에서 제일 비용이 적게 소요되는 실행계획을 선택하여 실행이 되지만 옵티마이저를 믿지 못하거나 특정 방법으로 실행 계획을 하고 싶을 시에는 옵티마이저 힌트를 사용하면 된다. 기본적으로 사용법은 아래와 같다. OPTIMIZER_MODE 지정가능 값/* + ALL_ROWS */목적 : Best Throughput용도 : 전체 RESOURCE 소비를 최소화 시키기 위한 힌트. Cost-based 접근 방식으로 ALL_ROWS는 Full Table Scan을 선호하며 CBO (Cost Based Optimization)는 default로 ALL_ROWS를 선택한다. /*+ FIRST_ROWS */목적: Best Response..
[SQL] 정규화(Normalization)와 반정규화(De-Normalization)
정규화란?정규화는 데이터의 일관성, 최소한의 데이터 중복, 최소한의 데이터 유연성을 위한 방법이며 데이터를 분해하는 과정이다.정규화된 모델은 테이블이 분해된다. 테이블이 분해되면 직원 테이블과 부서 테이블 간에 부서코드로 조인(join)을 수행하며 하나의 합집합으로 만들 수 있다.정규화를 하면 불필요한 데이터를 입력하지 않아도 되기 때문에 중복 데이터가 제거된다.절차문제점정규화는 데이터 조회(select) 시에 조인(join)을 유발하기 때문에 CPU와 메모리를 많이 사용한다.아래 코드를 프로그램화 한다면 중첩된 루프(Nested Loop)를 사용해야 한다.[ANSI JOIN}select 사원번호, 부서코드, 부서명, 이름, 전화번호, 주소from 직원, 부서where 직원.부서코드 = 부서.부서코드;s..
[SQL] GROUP BY 절 사용법 (그룹별 집계)
SQL Server에서 GROUP BY 절은 특정 칼럼을 기준으로 집계 함수를 사용하여 건수(COUNT), 합계(SUM), 평균(AVG) 등 집 계성 데이터를 추출할 때 사용한다. GROUP BY 절에서 기준 칼럼을 여러 개 지정할 수 있으며, HAVING 절을 함께 사용하면 집계 함수를 사용하여 WHERE 절의 조건절처럼 조건을 부여할 수 있다. GROUP BY 절은 중복제거를 할 때도 사용 가능하다. SQL Server에서는 GROUP BY 절을 사용할 경우 그룹 칼럼을 기준으로 자동으로 ORDER BY가 되지만 명시적으로 ORDER BY를 사용하여 쿼리문을 작성하는 것이 좋다.기본적인 GROUP BY 절 사용법직업(job) 별로 급여(sal) 총합계를 구하는 예제이다.GROUP BY 절의 칼럼은 S..
[SQL] INSERT 문 사용법 3가지 (데이터 입력)
SQL Server에서 데이터를 입력하기 위해서는 INSERT 문을 사용한다. SQL Server 2008부터 여러 행을 입력할 수 있는 기능이 추가되었으며, SELECT 해서 INSERT 하는 방법으로도 여러 건의 데이터를 입력할 수 있다. INSERT와 UPDATE를 동시에 수행하기 위해서는 MERGE 문을 사용하거나 프로시저를 생성하여 사용하면 된다.기본적인 INSERT 방법INSERT INTO [테이블명] ([칼럼1], [칼럼2], [칼럼3] ...) VALUES ([값1], [값2], [값3] ...)입력할 칼럼의 개수와 값을 개수를 동일하게 입력하면 된다. INSERT INTO dbo.dept(deptno, dname, loc)VALUES(50, 'IT TEAM', 'SEOUL'); 입력할 테..
[DB] 트랜잭션 (Transaction) 4가지 특성
트랜잭션 (Transcation)데이터베이스의 상태를 변환시키는 하나의 논리적 기능 (예: Update, Delete)을 수행하기 위한 작업의 단위 혹은 일련의 연산들을 말한다.특성1. 원자성(Atomicity)트랜잭션의 연산은 데이터베이스에 전부 반영이 되어야하거나 전부 반영이 되지 않아야한다.즉, 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다. 2. 일관성(Consistency)트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다.시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다. 3. 독립성(Isolation)하나의 트..
[데이터베이스] 스키마란? 개념 스키마, 내부 스키마, 외부 스키마
스키마란스키마란 데이터베이스의 구조와 제약조건에 관해 전반적인 명세를 기술한 것이다. 즉, 개체의 특성을 나타내는 속성 (Attribute)과 속성들의 집합으로 이루어진 개체 (Entity), 개체 사이에 존재하는 관계 (Relation)에 대한 정의와 이들이 유지해야 할 제약 조건들을 기술한 것이다.쉽게 정리하자면, DB 내에 어떤 구조로 데이터가 저장되는가를 나타내는 데이터베이스 구조이다.특징1) 스키마는 데이터 사전 (Data Dictionary)에 저장된다. 2) 현실 세계의 특정한 부분의 표현으로서 특정 데이터 모델을 이용해서 만들어지게 된다. 3) 시간에 따라 불변인 특성을 갖는다. (시불변성) 4) 데이터의 구조적 특성을 의미한다. 5) 인스턴스에 의해 규정된다.1) 개념 스키마 = 전체적인..
[데이터베이스] 용어 정리 - 릴레이션, 어트리뷰트, 튜플, 도메인, 차수, 카디널리티, 스키마
릴레이션관계형 데이터베이스에서 정보를 구분하여 저장하는 기본 단위이다. 결국, 릴레이션은 DB 테이블이다. 흔히 개발을 할 때 DB 설계를 하게 되는데 ERD (Entity Relationship Diagram) 아래와 같이 구성한다. 그래서 이 네모칸 하나하나가 결국 릴레이션이다.특징한 릴레이션에는 똑같은 튜플 (Tuple)이 포함될 수 없으므로 릴레이션에 포함된 튜플들은 모두 상이하다.한 릴레이션에 포함된 튜플 사이에는 순서가 없다.튜플들의 삽입, 삭제 등의 작업으로 인해 릴레이션은 시간에 따라 변한다.릴레이션 스키마를 구성하는 속성들 간의 순서는 중요하지 않다.속성의 유일한 식별을 위해 속성의 명칭은 유일해야 하지만, 속성을 구성하는 값은 동일한 값이 있을 수 있다.릴레이션을 구성하는 튜플을 유일하..
[SQL] 자료형
컬럼의 자료형1) 숫자형 TINYINT, INT, FLOAT2) 문자형 CHAR, VARCHAR, TEXT, ENUM3) 날짜형 DATE, DATETIME, TIMESTAMP 숫자형 자료형1) TINYINT- 가장 작은 숫자 자료형.- 부호가 있는 경우 -128 ~ 127. - 부호가 없는 경우 0 ~ 255. - 1byte 크기를 갖는다. 2) SMALLINT- 부호가 있는 경우 -32768 ~ 32767.- 부호가 없는 경우 0 ~ 65535.- 2bytes 크기를 갖는다.3) MEDIUMINT- 부호가 있는 경우 -8388608 ~ 8388607.- 부호가 없는 경우 0 ~ 16777215.- 3bytes 크기를 갖는다. 4) INT-..
[SQL] 데이터베이스 키(KEY) 종류
Key의 종류슈퍼 키(Super Key): 유일성을 만족하는 키. 예를 들면, {학번 + 이름}, {주민등록번호 + 학번}복합 키(Composite Key): 2개 이상의 속성(attribute)를 사용한 키.<p data-ke-size="si..