[MS-SQL]MS-SQL에서 go란?

|

GO는 SQL Server에 SQL문의 일괄 처리의 끝을 알려주는 기능을 합니다.

 

예)

 

DECLARE @A INT
SET @A =1
SELECT @A
GO -- 첫 번째 SQL문의 끝을 알림

 

SELECT @A  -- 오류납니다.
GO -- 두 번째 SQL문의 끝을 알림

 

위 문장은 GO명령을 기준으로 두 개의 SQL을 실행하게 됩니다.

각각의 SQL문은 서로 별개로 실행됩니다.(SQL문 두 개를 따로 날리는 것과 같습니다.)

두 문이 별개로 수행되기 때문에 두 번째 SQL문에서 @A를 select 할 때 오류가 발생하게 됩니다.

두 번째 SQL문은 @A가 선언되지(declare) 않았기 때문입니다.

 

출처 : http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=10205&docId=70168240&qb=bXMgc3FsIGdv&enc=utf8&section=kin&rank=1&search_sort=0&spq=0&pid=RCDaAU5Y7u8ssvFHZelssssssts-354090&sid=UklCFHJvLCIAABaoBX0

 

'DB > MS-SQL' 카테고리의 다른 글

[MS-SQL]MS-SQL에서 go란?  (0) 2013.09.30
[MS-SQL] SQL 실행 순서  (0) 2013.09.30
[MS-SQL] 쿼리문 작성 순서  (0) 2013.09.30
[MS-SQL] ms-sql 단축키  (0) 2011.12.01
[SQL]IDENT_CURRENT 와 SCOPE_IDEENTITY  (0) 2011.10.11
[T-SQL] while문 예  (0) 2011.09.29
트랙백0 And 댓글0

[MS-SQL] SQL 실행 순서

|

[SQL 실행 순서]

 


<SQL SELECT 구문 기본 문법>

 

SELECT      col1 [, col2] [, .....]
FROM        table
WHERE       조건
GROUP BY    그룹핑 컬럼
HAVING      그룹핑 조건
ORDER BY    정렬 순서

 

 

<SQL SELECT 구문 실행 순서>

 

FROM       -  1    특정 테이블로부터
WHERE      -  2    조건에 맞는 자료를 추출
GROUP BY   -  3    어떤 조건에 따라 자료를 그룹핑
HAVING     -  4    그룹핑된 자료 중에서 조건에 맞는 것을 추출

SELECT     -  5    추출된 자료 중에서 특정 컬럼 선택
ORDER BY   -  6    선택된 자료들을 어떤 기준에 따라 정렬

 

 

'DB > MS-SQL' 카테고리의 다른 글

[MS-SQL]MS-SQL에서 go란?  (0) 2013.09.30
[MS-SQL] SQL 실행 순서  (0) 2013.09.30
[MS-SQL] 쿼리문 작성 순서  (0) 2013.09.30
[MS-SQL] ms-sql 단축키  (0) 2011.12.01
[SQL]IDENT_CURRENT 와 SCOPE_IDEENTITY  (0) 2011.10.11
[T-SQL] while문 예  (0) 2011.09.29
트랙백0 And 댓글0

[MS-SQL] 쿼리문 작성 순서

|

어떤것을 쿼리문을 만들 때

 

1. 일단 문제를 보고나서 전체적인 뷰를 생각한다.

 

문제 : 2009년10월 부서별 직위별 인원수 및 급여를 나타내어라.

 

테이블 1
SELECT STAFF_NUM --사번 PK
,POST_CD --직위
,DEPT_CD --부서코드
,DEPT_NM --부서명
FROM HRM100MA
ORDER BY POST_CD

 

테이블 2

 

SELECT PAY_YYMM --급여월 PK
,PAY_TYPE --급상여구분 PK
,STAFF_NUM --사번 PK
,SUP_TOT_AMT --급여총액
FROM HRM410MA

 

부서명이 나오고 각 부서별 직위와 그 직위에 대한 인원 급여를 생각하며 어떤식으로 나와야 할지 생각해본다.

 

EX)

부서명 | 직위 | 급여 | 직위2 | 급여 | 직위3 | 급여 ... | 기타 | 기타급여 | 총 인원 | 총 급여

 
2. 나누어진 테이블을 join을 이용해서 연결해준다.

 

select *

from HRM100MA T1 INNER JOIN HRM410MA T2 ON T1.STAFF_NUM = T2.STAFF_NUM

3. 조건을 where에서 정하고

조건 : 2009년10월

 

select *

from HRM100MA T1 INNER JOIN HRM410MA T2 ON T1.STAFF_NUM = T2.STAFF_NUM

where T2.PAY_YYMM = '200910'


4. 그것에 어떤 별로 나눌 것인지 생각해서 group by를 한다.

 

~~별이 group by의 기준이 된다. 여기서는 부서별로 정리

 

select T1.DEPT_NM as '부서명'

from HRM100MA T1 INNER JOIN HRM410MA T2 ON T1.STAFF_NUM = T2.STAFF_NUM

where T2.PAY_YYMM = '200910'

group by T1.DEPT_NM

 

5.group by에서 조건이 있으면 having을 사용한다.

 

6. 보고 싶은 것을 select에서 설정한다.

 

select  T1.DEPT_NM as '부서명',
  sum(case when T1.POST_CD = '01' then 1 else 0 end) as 'C01',
  floor(sum(case when T1.POST_CD = '01' then T2.SUP_TOT_AMT else 0 end)) as 'P01',
  sum(case when T1.POST_CD = '02' then 1 else 0 end) as 'C02',
  floor(sum(case when T1.POST_CD = '02' then T2.SUP_TOT_AMT else 0 end)) as 'P02',
  sum(case when T1.POST_CD = '03' then 1 else 0 end) as 'C03',
  floor(sum(case when T1.POST_CD = '03' then T2.SUP_TOT_AMT else 0 end)) as 'P03',
  sum(case when T1.POST_CD = '04' then 1 else 0 end) as 'C04',
  floor(sum(case when T1.POST_CD = '04' then T2.SUP_TOT_AMT else 0 end)) as 'P04',
  sum(case when T1.POST_CD = '05' then 1 else 0 end) as 'C05',
  floor(sum(case when T1.POST_CD = '05' then T2.SUP_TOT_AMT else 0 end)) as 'P05',
  sum(case when T1.POST_CD = '06' then 1 else 0 end) as 'C06',
  floor(sum(case when T1.POST_CD = '06' then T2.SUP_TOT_AMT else 0 end)) as 'P06',
  sum(case when T1.POST_CD = '07' then 1 else 0 end) as 'C07',
  floor(sum(case when T1.POST_CD = '07' then T2.SUP_TOT_AMT else 0 end)) as 'P07',
  sum(case when T1.POST_CD = '08' then 1 else 0 end) as 'C08',
  floor(sum(case when T1.POST_CD = '08' then T2.SUP_TOT_AMT else 0 end)) as 'P08',
  sum(case when T1.POST_CD = '09' then 1 else 0 end) as 'C09',
  floor(sum(case when T1.POST_CD = '09' then T2.SUP_TOT_AMT else 0 end)) as 'P09',
  sum(case when T1.POST_CD = '10' then 1 else 0 end) as 'C10',
  floor(sum(case when T1.POST_CD = '10' then T2.SUP_TOT_AMT else 0 end)) as 'P10',
  SUM(case when T1.POST_CD > '10' then 1 else 0 end) as CEX,
  floor(sum(case when T1.POST_CD > '10' then T2.SUP_TOT_AMT else 0 end)) as PEX,
  SUM(case when ((T1.POST_CD > '0')and(T1.POST_CD < '10')) then 1 else 0 end) as CTOT,
  floor(SUM(T2.SUP_TOT_AMT)) as PTOT
from HRM100MA T1 INNER JOIN HRM410MA T2 ON T1.STAFF_NUM = T2.STAFF_NUM

where T2.PAY_YYMM = '200910'

group by T1.DEPT_NM

'DB > MS-SQL' 카테고리의 다른 글

[MS-SQL]MS-SQL에서 go란?  (0) 2013.09.30
[MS-SQL] SQL 실행 순서  (0) 2013.09.30
[MS-SQL] 쿼리문 작성 순서  (0) 2013.09.30
[MS-SQL] ms-sql 단축키  (0) 2011.12.01
[SQL]IDENT_CURRENT 와 SCOPE_IDEENTITY  (0) 2011.10.11
[T-SQL] while문 예  (0) 2011.09.29
트랙백0 And 댓글0

[MS-SQL] ms-sql 단축키

|

F5 : 쿼리 실행
CTRL + F5 : 문법 검사
CTRL + SHIFT + DEL : 모두 지우기
CTRL + T : 실행결과 텍스트 형태로 보기
CTRL + D : 실행결과 표 형태로 보기
CTRL + R : 결과를 없애고 질의만 볼 수 있다.

'DB > MS-SQL' 카테고리의 다른 글

[MS-SQL] SQL 실행 순서  (0) 2013.09.30
[MS-SQL] 쿼리문 작성 순서  (0) 2013.09.30
[MS-SQL] ms-sql 단축키  (0) 2011.12.01
[SQL]IDENT_CURRENT 와 SCOPE_IDEENTITY  (0) 2011.10.11
[T-SQL] while문 예  (0) 2011.09.29
[MS-SQL] 문법  (0) 2011.09.28
트랙백0 And 댓글0

[SQL]IDENT_CURRENT 와 SCOPE_IDEENTITY

|

drop tabel t
create table t
(
id int identity(1, 1),
val char(1)
)


declare @i int
set @i = 1
while @i <= 3
begin
insert t
(val)
values
('a')
set @i = @i + 1
end

select * from t
select [scope_identity] = scope_identity()
select [ident_current] = ident_current('t')
select [max] = max(id) from t

결과

id             val
1               a
2               a
3               a
(3개 행 적용됨)

scope_identity
3

(1개 행 적용됨)

ident_current
3

(1개 행 적용됨)

max
3

(1개 행 적용됨)

새로운 윈도우(ctrl + n)를 3개 값 입력 실행

declare @i int
set @i = 1
while @i <= 3
begin
insert t
(val)
values
('a')
set @i = @i + 1
end

현재 윈도우로 돌아와서 아래를 실행

select * from t
select [scope_identity] = scope_identity()
select [ident_current] = ident_current('t')
select [max] = max(id) from t

결과

id              val
1                a
2                a
3                a
4                a
5                a
6                a

(6개 행 적용됨)

scope_identity
3

(1개 행 적용됨)

ident_current
6

(1개 행 적용됨)

max
6

(1개 행 적용됨)

출처 : http://blog.naver.com/ccw3435

'DB > MS-SQL' 카테고리의 다른 글

[MS-SQL] SQL 실행 순서  (0) 2013.09.30
[MS-SQL] 쿼리문 작성 순서  (0) 2013.09.30
[MS-SQL] ms-sql 단축키  (0) 2011.12.01
[SQL]IDENT_CURRENT 와 SCOPE_IDEENTITY  (0) 2011.10.11
[T-SQL] while문 예  (0) 2011.09.29
[MS-SQL] 문법  (0) 2011.09.28
트랙백0 And 댓글0
prev | 1 | 2 | next

티스토리 툴바