본문 바로가기

SQL Server

(82)
[SQL Server] 별칭(Alias)을 지정하는 여러가지 방법 별칭(Alias)은 조인을 할 때 복잡한 테이블명을 간략화 할 수 있고, Self 조인을 할 때 한 테이블에 각각의 별칭을 주어 두개의 테이블처럼 조인을 할 수 있다. SUM, AVG, MAX, MIN과 같은 집계함수를 사용하면 컬럼명이 (열 이름없음)으로 나오게 되는데 별칭을 사용해서 컬럼명을 명확히 할 수 있다. 이처럼 테이블명과 컬럼명에 별칭을 지정하여 사용할 수 있다. 컬럼명에 별칭을 지정하는 방법은 여러가지가 있고, 아래와 같다. SELECT 1 AS NUMBER , 1 "NUMBER" , 1 'NUMBER' , 1NUMBER , 1"NUMBER" , 1'NUMBER' , 1 AS "NUMBER" , 1 AS 'NUMBER' , 1.NUMBER , 1."NUMBER" , 1.'NUMBER' , ..
[SQL Server] SELECT INTO 구문 사용시 복사되지 않는 것 SELECT INTO 구문은 새 테이블을 만든 후 쿼리의 결과 행을 새로 만든 테이블에 삽입한다. 주로 테이블의 데이터를 수정, 삭제할 경우 백업의 용도로 사용한다. 테이블을 복사할 때 제약조건, NULL, IDENTITY 등도 같이 복사되는지 확인해보자. USE TEMPDB GO CREATE TABLE TEST_1 ( IDX INT IDENTITY , NAME CHAR(6) NOT NULL , AGE TINYINT NOT NULL , GENDER TINYINT DEFAULT 1 -- 1:남, 2:여 , CONSTRAINT PK_TEST PRIMARY KEY(IDX) ) GO INSERT INTO TEST_1 VALUES ('박보영', 15, 2) , ('유인나', 20, 2) , ('신보라', 25, ..
[SQL Server] 한 테이블에 생성할 수 있는 인덱스의 최대 개수 한 테이블에 Clustered Index는 한 개만 생성할 수 있다는 것을 잘 알고 있다. 그렇다면 Nonclustered Index는 한 테이블에 몇 개까지 생성할 수 있을까? SQL Server 2005 버전까지는 149개, SQL Server 2008 버전 이후로는 999개의 Nonclustered Index를 생성할 수 있다. 내가 관리하는 DB들은 한 테이블에 인덱스가 10개를 넘는적을 못봤는데 한 테이블에 249개의 Nonclustered Index를 사용하는 경우가 있을까? 버전이 올라가면서 999개를 생성할 수 있도록 하였는데 필요에 의해 증가된 것일까? 1 Clustered Index + 249 Nonclustered Index = 250 Inde..
[SQL Server] GO 명령의 깜찍한 기능 Transact-SQL 문의 스크립트를 작성할 때 GO를 사용하며 일괄 처리의 끝을 알린다. 이 기능 외에 GO 명령 옆에 숫자를 적으면 그 숫자 횟수만큼 실행된다. 구문 GO [count] 인수 count 양의 정수입니다. GO 앞의 일괄 처리가 지정된 횟수만큼 실행됩니다. CREATE TABLE DBO.TEST_TBL ( COL1 INT , COL2 INT ) GO -- 지정된 횟수인 10번 만큼 INSERT 문을 실행한다. INSERT INTO DBO.TEST_TBL VALUES (1,2) GO 10 -- INSERT 문이 10번 실행되었는지 확인 SELECT * FROM DBO.TEST_TBL -- 2번의 SELECT 문을 실행한다. SELECT * FROM DBO.TEST_TBL GO 2 깜찍한..
[SQL Server] DELETE, TRUNCATE의 IDENTITY 초기화 여부 테이블의 구조는 남기고 모든 데이터를 지워야 할 경우 DELETE와 TRUNCATE를 사용할 수 있다. 이 때 테이블에 IDENTITY 속성이 있고 데이터는 지우되 다시 데이터를 입력할 때 이전에 사용하던 IDENTITY 값을 이어서 사용하고 싶으면 어떤 것을 사용해야할까? CREATE TABLE TEST_1 ( NUM INT IDENTITY (1,1) , NAME CHAR(6) ) GO CREATE TABLE TEST_2 ( NUM INT IDENTITY (1,1) , NAME CHAR(6) ) GO INSERT INTO TEST_1 VALUES ('아이유'), ('배수지'), ('강민경') INSERT INTO TEST_2 VALUES ('아이유'), ('배수지'), ('강민경') GO -- IDEN..
[SQL Server] NULL의 크기 SQL Server에서 NULL의 크기는 가장 큰 값일까 가장 작은 값일까? 테이블에 NULL 값을 넣고 정렬을 통해 NULL의 크기를 알아보자. CREATE TABLE TEST_NULL ( TEST INT ) GO INSERT INTO TEST_NULL VALUES (1), (10), (15), (90), (100), (NULL), (150) GO -- TEST 컬럼 오름차순으로 정렬 SELECT * FROM TEST_NULL ORDER BY TEST ASC NULL 값이 저장된 컬럼을 오름차순으로 정렬해 보았다. 결과에서 보는바와 같이 SQL Server에서의 NULL 값은 가장 작은 값임을 확인할 수 있다. 반대로 오라클에서는 NULL이 가장 큰 값이다.
[SQL Server] 유일한 값을 찾는 다양한 방법 가끔 여러 개의 값들 중 중복된 값을 제외한 유일한 값을 찾아야 할 때가 있다. 이 경우 DISTINCT 키워드를 주로 사용한다. 그러나 유일한 값을 찾는 방법은 많다. -- 테스트를 위해 테이블 생성 CREATE TABLE #SALES_DETAILS ( SALES_ID INT IDENTITY(1,1) , ITEM_ID INT NOT NULL , QTY INT NOT NULL , UNIT_PRICE DECIMAL(12,2) NOT NULL , SALES_DATE DATETIME NOT NULL ) GO -- 데이터 삽입 INSERT INTO #SALES_DETAILS (ITEM_ID,QTY,UNIT_PRICE,SALES_DATE) SELECT 1001,5,200,'2012-09-03 11:16:28' U..
[SQL Server] 랜덤 출력 NEWID 함수 NEWID() : UNIQUEIDENTIFIER 형식의 고유 값을 만든다. SELECT NEWID() 를 실행시켜보면 73F48BE7-21F5-4B4C-9491-F348C26F9F85 이러한 값이 랜덤으로 나오는 것을 확인할 수 있다. 그리고 ORDER BY 절과 같이 사용하게 되면 순서를 랜덤으로 출력해준다. 예를들어 온라인으로 책을 파는 사이트가 있다. 10권의 추천도서가 있고 랜덤하게 3권씩 보여주고 싶을 때 NEWID 함수를 이용해보자. -- 테이블 생성 CREATE TABLE dbo.RECOMMEND_BOOKS ( NUM INT IDENTITY , BOOK_NAME VARCHAR(50) ) GO -- 10권의 추천도서 등록 INSERT INTO dbo.RECOMMEND_BOOKS VALUES (..