odyn의 개발소

[MSSQL] STUDY 2 본문

프로그래밍/MSSQL

[MSSQL] STUDY 2

odyn 2014. 6. 19. 11:48

1. T-SQL의 분류

- DML ( Data Manipulation Language : 데이터 조작 언어 )

  - 데이터를 조작(선택, 삽입, 수정, 삭제)하는 데 사용되는 구문

  -> SELECT, INSERT, UPDATE, DELETE

  -> Transaction : Yes

# Transaction 이란 ?

  - 테이블의 데이터를 변경(입력/수정/삭제)할 때 실제 테이블에 완전히 적용하지 않고, 임시로 적용시키는 것을 말함.


- DDL ( Data Definition Language : 데이터 정의 언어 ) 

  - 데이터베이스, 테이블, 뷰, 인덱스 등의 데이터베이스 개체를 생성/삭제/변경하는 역할을 함. 

  -> CREATE, DROP, ALTER

  -> Transaction : No    

      -> DDL문은 실행 즉시 SQL Server에 적용된다.


- DCL ( Data Control Language : 데이터 제어 언어 )

  - 사용자에게 어떤 권한을 부여하거나 빼앗을 때 주로 사용하는 구문 

  -> GRANT, REVOKE, DENY 등


2. INSERT

   - 구문 형식 : INSERT [INTO] <테이블> [ (열1, 열2, ...)] VALUES ( 값1, 값2 ... )

   - 테이블 속성이 IDENDTITY로 지정되어 있다면, INSERT에서는 해당 열이 없다고 생각하고 입력

 

   예 : 

   CREATE TABLE testTbl2 ( id int IDENTITY, userName nchar(3), age int, nation nchar(4) DEFAULT '대한민국' );

   GO

   INSERT INTO testTbl2 VALUES ( '구엘루', 30, DEFAULT ) 


   #IDENTITY_INSERT를 ON으로 변경한 테이블은 꼭 입력할 열을 명시적으로 지정해줘야함. 

     -> SET IDENTITY_INSERT testTbl2 on 


   

   # 열의 목록 및 기타 정보를 출력 

      -> EXEC sp_help testTbl2


   # 특정 테이블의 현재의 IDENTITY 값 확인

      -> SELECT IDENT_CURRENT('testTbl2')


   # 다른 테이블의 대량의 데이터를 입력 

      USE sqlDB

CREATE TABLE testTbl3 ( id nchar(8), Fname nvarchar(10), Fbirthyear int, Faddr nchar(4), Fmobile1 nchar(3), Fmobile2 nchar(8), Fheight smallint )

GO

INSERT INTO testTbl3

SELECT userID, name, birthYear, addr, mobile1, mobile2, height

FROM userTbl 



3. UPDATE 
    - 기존 데이터의 수정
    - [구문 형식] 
       UPDATE 테이블 이름 
           SET 열1=값1, 열2=값2 ...
           WHERE 조건
    - 예 : 
SELECT * FROM testTbl3
GO
UPDATE testTbl3
SET Fmobile1 = '111'
WHERE id = 'BAY'
GO
SELECT * FROM testTbl3
    # WHERE 빼먹다간 전체 데이터가 다 바뀔 수 있으니 주의


4. DELETE
   - 행 단위로 삭제 
   - [구문 형식]
      DELETE 테이블 이름 조건
   - 비슷한 걸로 DROP, Truncate가 있다. 
      차이 : 
            - DELETE : 트랜젝션 로그 기록 
      - DROP : 테이블 자체를 삭제 , 트랜젝션 X
      - TRUNCATE : DELETE와 동일하지만 트랜젝션 로그 기록 X ( 테이블의 구조를 남겨 놓고 싶을 때 사용 )


5. 변수의 사용
    - 변수의 선언 : DECLARE @변수이름 데이터형식
    - 변수에 값 대입 : SET @변수이름 = 변수의 값
    - 변수의 값 출력 : SELECT @변수이름

USE sqlDB

DECLARE @myVar1 INT
DECLARE @myVar2 SMALLINT, @myVar3 DECIMAL(5,2)
DECLARE @myVar4 NCHAR(20)

SET @myVar1 = 5
SET @myVar2 = 3
SET @myVar3 = 4.25
SET @myVar4 = '축구선수 이름==>'

SELECT @myVar1
SELECT @myVar2 + @myVar3

SELECT @myVar4, Name FROM userTbl WHERE height > 160


6. 데이터형 변환 함수 
   1) CAST
       - [구문 형식] CAST ( expression AS 데이터형식 [ (길이) ]
   2) CONVERT
       - [구문 형식] CONVERT ( 데이터형식 [ (길이) ] , expression [ , 스타일] )
USE sqlDB

SELECT * FROM buyTbl
GO
SELECT AVG( CAST( amount AS FLOAT ) ) AS [평균구매개수] FROM buyTbl
GO
SELECT AVG( CONVERT( FLOAT, amount ) ) AS [평균구매개수] FROM buyTbl

7. 스칼라 함수 
   예 : 
USE sqlDB
CREATE TABLE maxTbl
( col1 VARCHAR(MAX), col2 NVARCHAR(max) )
INSERT INTO maxTbl VALUES ( REPLICATE( 'A', 1000000 ), REPLICATE ('가', 1000000) )
SELECT LEN(col1) AS [ VARCHAR(MAX) ], LEN(col2) AS [NVARCHAR(MAX)] FROM maxTbl
DELETE FROM maxTbl
INSERT INTO maxTbl VALUES (
REPLICATE( CAST('A' AS VARCHAR(MAX) ), 1000000 ),
REPLICATE( CONVERT( VARCHAR(MAX), '가' ) , 1000000 ) ) 
SELECT LEN(col1) AS [ VARCHAR(MAX) ], LEN(col2) AS [NVARCHAR(MAX)] FROM maxTbl
UPDATE maxTbl SET col1 = REPLACE( ( SELECT col1 FROM maxTbl ), 'A', 'B' ), col2 = REPLACE( ( SELECT col2 FROM maxTbl ), '가', '나' )
SELECT REVERSE ( ( SELECT col1 FROM maxTbl ) )
SELECT SUBSTRING ( ( SELECT col2 FROM maxTbl ), 999991, 10 )
UPDATE maxTbl SET
col1 = STUFF ( ( SELECT col1 FROM maxTbl ), 999991, 10, REPLICATE ( 'C', 10 ) ), 
col2 = STUFF ( ( SELECT col2 FROM maxTbl ), 999991, 10, REPLICATE ( '다', 10 ) )
SELECT REVERSE( ( SELECT col1 FROM maxTbl ) )
SELECT REVERSE( ( SELECT col2 FROM maxTbl ) )


8. 순위 함수 
   - 결과에 순번 또는 순위(등수)를 매기는 역할을 하는 함수
   - RANK(), NTILE(), DENSE_RANK(), ROW_NUMBER()
   - [구문 형식]
      < 순위 함수 이름 > ()  OVER (
      [ PARTITION BY < partition_by_list > ]
      ORDER BY < order_by_list > 
USE sqlDB
-- 조건에 대한 순위 ROW_NUMBER
SELECT ROW_NUMBER() OVER ( ORDER BY height DESC, name ASC )[ 키큰 순위 ], name, addr, height
FROM userTbl
ORDER BY height DESC
GO
-- group 조건 PARTITION BY
SELECT addr, ROW_NUMBER() OVER ( PARTITION BY addr ORDER BY height DESC)[ 키큰 순위 ], name, height
FROM userTbl
ORDER BY height DESC
GO
-- 동일 조건 DENSE_RANK()
SELECT DENSE_RANK() OVER ( ORDER BY height DESC)[ 키큰 순위 ], name, addr, height
FROM userTbl
ORDER BY height DESC
GO
-- 중복 등수 뛰어넘기 RANK()
SELECT RANK() OVER ( ORDER BY height DESC)[ 키큰 순위 ], name, addr, height
FROM userTbl
ORDER BY height DESC
GO
-- 나열 후 쪼개기 NTILE(N)
SELECT NTILE(2) OVER ( ORDER BY height DESC )[ 반번호 ], name, addr, height
FROM userTbl
ORDER BY height DESC
GO

   














           

     

'프로그래밍 > MSSQL' 카테고리의 다른 글

[MSSQL] 저장 프로시저 관련  (0) 2014.10.23
[MSSQL] STUDY 3  (0) 2014.06.20