SQL Server에서 쿼리 문의 실행 계획을 보면 잘못된 인덱스를 타서 조회 속도가 느린 경우가 간혹 발생한다. 이럴 경우 인덱스 힌트를 강제로 부여하여 실행 계획을 바꾸면 조회 속도가 빨라지는 경우가 있다. 인덱스 힌트를 강제로 부여하는 방법은 권장하는 방법이 아니며 옵티마이저에 의한 최적의 실행 계획으로 쿼리문이 실행되도록 하는 것이 좋다. 목차 인덱스 힌트 사용법 쿼리문 실행 계획 보는 법 인덱스 힌트 사용법 SELECT * FROM emp WITH (INDEX(emp_idx01)) WHERE hiredate BETWEEN '1981-01-01' AND '1981-12-31' FROM [테이블명] WITH (INDEX([인덱스명])) 인덱스 힌트를 사용했을 경우와 사용하지 않았을 경우 쿼리문 실행..
SQL Server에서 인덱스를 생성하기 위해서는 CREATE INDEX 문을 사용한다. 인덱스를 생성한 후 변경하는 명령은 없으며 인덱스를 삭제 후 다시 생성하는 방법을 사용해야 한다. 인덱스는 클러스터형과 비클러스터형 인덱스가 있으며, 클러스터형 인덱스는 테이블에 하나만 생성이 가능하며, 비클러스터형 인덱스는 여러 개를 생성할 수 있다. 일반적인 인덱스 생성은 비클러스터형 인덱스를 생성한다고 생각하면 된다. 목차 인덱스 생성, 삭제 방법 인덱스 변경 방법 인덱스 조회 클러스터형, 비클러스터형 인덱스 인덱스 생성, 삭제 방법 인덱스 생성 CREATE INDEX emp_idx01 ON dbo.emp (hiredate) CREATE INDEX [인덱스명] ON [테이블명] ([칼럼1], [칼럼2], [칼럼..
SQL Server에서 기본 키(PRIMARY KEY)를 생성하거나 변경하기 위해서는 ALTER TABLE 문을 사용하여 제약조건을 생성하거나 삭제 후 재생성하면 된다. PK로 지정할 칼럼은 꼭 NOT NULL 속성을 가져야 하며, PK 칼럼을 변경해야 할 경우 속성 변경은 불가능하며 삭제 후 다시 생성해야 한다. 목차 PK 생성 방법 PK 변경 방법 (삭제 후 재생성) PK 삭제 방법 PK 조회 방법 PK 생성 방법 ALTER TABLE dbo.emp ADD CONSTRAINT emp_pk PRIMARY KEY (empno) ALTER TABLE [테이블명] ADD CONSTRAINT [PK제약조건명] PRIMARY KEY ([칼럼1], [칼럼2], [칼럼3] ...) PK로 지정할 칼럼은 속성이 NO..
SQL Server에서 테이블, 칼럼의 코멘트를 추가하거나 변경하기 위해서는 시스템 저장 프로시저를 사용하면 된다. 시스템 저장 프로시저는 SP_ADDEXTENDEDPROPERTY(추가), SP_UPDATEEXTENDEDPROPERTY(수정), SP_DROPEXTENDEDPROPERTY(삭제) 3개의 프로시저를 사용한다. 칼럼에 코멘트를 추가한 후에는 수정, 삭제 프로시저만 사용할 수 있다. 목차 칼럼 코멘트 추가, 수정, 삭제 칼럼 코멘트 일괄 추가 및 조회 테이블 코멘트 추가 및 조회 칼럼 코멘트 추가, 수정, 삭제 /* 컬럼 코멘트 추가 */ EXEC SP_ADDEXTENDEDPROPERTY 'MS_Description', '직원번호', 'USER', dbo, 'TABLE', emp, 'COLUMN..
SQL Server에서 칼럼의 기본 값(DEFAULT)을 설정하기 위해서는 DEFAULT 제약 조건을 생성하면 된다. 칼럼에 DEFAULT를 설정해 놓으면 데이터가 입력될 때 해당 칼럼에 값이 없을 경우 DEFAULT에 설정된 값이 자동으로 입력된다. DEFAULT를 추가하거나 변경(제거 후 다시 추가)하는 방법은 아래를 참고하면 된다. DEFAULT 추가 ALTER TABLE dbo.emp ADD CONSTRAINT df_emp_job DEFAULT 'NONE' FOR job ALTER TABLE [스키마.테이블명] ADD CONSTRAINT [제약조건명] DEFAULT [기본값] FOR [칼럼명] 제약 조건명은 임의로 정하여 입력하면 되고, 기본 값은 DEFAULT '기본값' 또는 DEFAULT('기..
SQL Server에서 테이블의 칼럼을 추가, 변경, 삭제를 하기 위해서는 ALTER TABLE 문을 사용하면 된다. ALTER COLUMN 을 사용하면 칼럼 사이즈, 데이터 타입을 변경할 수 있다. 신규 칼럼을 추가하면 테이블의 마지막 칼럼에 추가되는데, 특정 칼럼의 사이에 추가하고 싶으면 SSMS 관리 툴을 사용하여 칼럼을 추가하면 된다. 이미 추가된 칼럼도 SSMS 관리 툴을 사용하여 칼럼 순서를 변경할 수 있다. 칼럼 추가 ALTER TABLE dbo.emp ADD email VARCHAR(25) 칼럼 삭제 ALTER TABLE dbo.emp DROP COLUMN email 데이터 사이즈 변경 // VARCHAR(25) -> VARCHAR(100) ALTER TABLE dbo.emp ALTER C..
SQL Server에서 테이블을 생성할 때는 대부분 CREATE TABLE 문을 사용해서 테이블을 생성한다. 그러나 SQL 문이 익숙하지 않을 때는 SSMS 툴을 사용하면 조금 더 쉽게 테이블을 생성하거나 테이블 속성을 변경할 수 있다. 아래는 emp 테이블과 dept 테이블을 생성하는 예제이다. 목차 CREATE TABLE 문으로 테이블 생성 SSMS 툴을 사용하여 테이블 생성 CREATE TABLE 문으로 테이블 생성 CREATE TABLE emp ( empno INT NOT NULL PRIMARY KEY, ename VARCHAR(10), job VARCHAR(9), mgr INT, hiredate DATE, sal NUMERIC(7, 2), comm NUMERIC(7, 2), deptno INT ..
SQL Server에서 열(칼럼)을 행으로 바꾸기 위해서는 UNPIVOT을 사용하면 된다. 가로의 칼럼을 세로의 행으로 바꾼다고 생각하면 된다. 자주 사용하지는 않지만 개념을 이해하고 있으면 한 번쯤은 필요할 때가 있다. SELECT * FROM ( 대상테이블 or 서브쿼리 ) AS tab UNPIVOT ( 집계값칼럼명 FOR UNPIVOT대상칼럼명 IN ([UNPIVOT할칼럼명] ... ) AS unpvt UNPIVOT 사용법 WITH sal_stat(job, D_10, D_20, D_30) AS ( SELECT 'ANALYST', 0, 6000, 0 UNION ALL SELECT 'CLERK', 1300, 1900, 950 UNION ALL SELECT 'MANAGER', 2450, 2975, 285..
SQL Server에서 OR 연산자를 사용하여 여러 개의 값을 비교하는 작업을 IN 연산자를 사용하면 아주 간단하게 쿼리문을 작성할 수 있다. IN 연산자에 입력된 값 중에서 하나라도 일치하는 것이 있으면 리스트에 조회된다. IN 사용법 SELECT * FROM emp WHERE ename IN ('JONES', 'SCOTT', 'MILLER') 영문성명(ename)에 'JONES', 'SCOTT', 'MILLER'가 하나라도 일치하 값이 있으면 조회된다. IN을 사용하면 쿼리가 실행될 때 내부적으로 OR 연산자로 변경되어 실행되므로 아래와 동일한 결과가 조회된다. IN 연산자는 OR 연산자와 동일하게 실행 되므로 인덱스가 있는 칼럼에 사용할 경우 인덱스를 타지 못할 수 있으니 주의해서 사용해야 한다. ..
SQL Server에서 특정 문자열이 포함되었는지 검색을 할 때에는 LIKE 연산자를 사용하면 된다. SQL Server에서 LIKE 연산자는 타 데이터베이스와 조금 차이가 있는데 기본 옵션이 대소문자를 구분하지 않는다는 것이다. 그리고 정규식의 일부 기능인 문자 범위 패턴만 검색이 가능하다. REGEXP_LIKE와 같은 정규식 LIKE 함수는 없다. % : 0개 이상의 어떠한 문자열이 존재해도 상관없음 _ : 밑줄(_) 개수 만큰 문자가 존재해야 함 [] : 대괄호([]) 안의 지정된 문자 범위 또는 문자가 존재해야 함 [^] : 대괄호([]) 안의 지정된 문자 범위 또는 문자 외의 문자가 존재해야 함 기본 사용법 (LIKE, NOT LIKE, 대소문자 구분) SELECT * FROM Languages..