본문 바로가기

컴퓨터/데이터베이스

2008년 8월 28일

*변수 범위
-사용자변수:@변수명 으로 표기, 일괄쿼리에서만 scope인 local변수
-시스템변수:@@변수명 으로 표기, session이 바뀌면 값의
    영향력이 없는

p231
// 하나의 자료형에 두 변수 선언 불가?
declare @myvar1 int, @myvar2 smallint, @myvar3 decimal(5,2)
declare @myvar4 nchar(10), @myvar5 char(10)
set @myvar1=5
set @myvar2=3
set @myvar3=4.25
set @myvar4='축구선수이름======>'
set @myvar5='축구선수이름======>'
set @myvar1=5
select @myvar4, @myvar5

use sqldb2b
select @myvar4, name from usertbl where height > 182


위의 출력 결과로 알 수 있는 것 nchar는 유효자리수, char 바이트 단위
한글을 한 글자에 2바이트라서 char 로는 한 글자에 2씩 먹는다

같은 세션이라도 변수 선언과 변수 초기화가 동시에 (일괄쿼리) 실행되어야함

use pubs
select * from sales


//금방 실행한 것의 행의 수
select @@rowcount

select @@version


*명시적 형변환
set dateformat 'ymd'

SET DATEFORMAT  datetime 또는 smalldatetime 데이터 입력에 대한 날짜 부분의
    순서(월/일/년도)를 설정합



select convert(char(20), getdate(),107)+'aaa'

p233
use sqldb2b
select avg(amount) as 평균매개수 from buytbl
실제로 평균은 2.x 인데 2로 나오는 것은 암시적 형변환? 정수끼리라서

*정확한 평균구매개수를 계산하라
select avg(cast(amount as float)) from buytbl ---o
select cast(avg(amount) as float) from buytbl ---x
select avg(convert(float, amount)) from buytbl ---o

select price, amount, cast(cast(price as float)/amount as decimal(10,2)) as 단가 from buytbl
*소수셋째자리에서 반올림하여 소수둘째자리까지 나타내게 하라
select price, amount, round(cast(price as float)/amount, 2) as 단가 from buytbl
select price, amount, cast(cast(price as float)/amount as decimal(10,2)) as 단가 from buytbl





* 1부터 10까지 자연수를 더하여 합계를 출력하시오

declare @i tinyint, @sum smallint
set @i = 1
set @sum=0
while (@i < 11)
 begin
  set @sum = @sum + @i
  set @i = @i + 1
 end

select @sum


* 1부터 10까지 자연수를 더하여 합계를 출력하시오(3의 배우빼고)
declare @i tinyint, @sum smallint
set @i = 1
set @sum=0
while (@i < 11)
 begin
 if ( @i % 3 != 0)
 begin
  set @sum = @sum + @i
 end
 set @i = @i + 1
 end

select @sum

!= 와 <> 는 같다


* 1부터 10까지 자연수를 더하여 합계를 출력하시오
declare @i tinyint, @sum smallint
set @i = 1
set @sum=0
while @i < 11
 begin
 if  @i % 3 <> 0
 begin
  set @sum = @sum + @i
 end
 set @i = @i + 1
 end

select @sum



* 1부터 10까지 자연수를 더하여 합계를 출력하시오
declare @i tinyint
declare @sum int

set @i = 1
set @sum=0
while @i < 11
 begin
 if  @i % 3 <> 0
 begin
  set @sum = @sum + @i
 end
 if @i % 2 = 0
 begin
  print '2의 배수 : '+cast(@i as char(10))
 end
 set @i = @i + 1
 end

select @sum