=========================================================================


select * from 고객

select * from 마일리지등급

select * from 부서

select * from 사원

select * from 제품

select * from 주문

select * from 주문세부


-- 1. 제품테이블에는 각 제품에 대하여 단가가 들어있습니다. 제품번호, 제품명, 현재단가, 10% 인상된 단가를 보이는 질의문을 작성하세요.


select 제품번호, 제품명, 단가, 단가*1.1 "10%인상된 단가"

from 제품


-- 2. 제품명별 주문수량합, 주문금액합, 재고를 보이세요. 단, 결과는 다음과 같은 형식으로 보입니다.

-- 예) 참치 샌드위치의 주문수량합계는 100 개 , 금액합계는 500000원이며, 재고는 30개 남아있습니다.


select 제품명+ '의 주문수량합계는 ' + ltrim(rtrim(str(SUM(주문수량)))) +'개, 금액합계는 '+ltrim(rtrim(str(SUM(제품.단가*주문수량))))+'원이며, 재고는 '+ltrim(rtrim(str(SUM(제품.재고))))+'개 남아있습니다.'

from 제품, 주문세부

where 제품.제품번호 = 주문세부.제품번호

group by 제품명


-- 3.고객번호중에서 ‘ar’이 들어가는 고객에 대해 ‘ar’의 시작 위치값을 볼 수 있도록 질의문을 작성하세요. 


select 고객번호, charindex('ar',고객번호) '위치'

from 고객

where 고객번호 like '%ar%'


-- 4. 제품명 중에서 ‘아’가 들어간 제품에 대해 아의 위치값을 볼 수 있도록 질의를 작성하세요.


select 제품명, charindex('아', 제품명) '위치'

from 제품

where 제품명 like '%아%'


-- 5. 김씨 성을 가진 사원에 대해 김을 kim으로 바꿔 보이세요.


select 이름, replace(이름,'김','kim') 

from 사원

where 이름 like '%김%'


-- 6.  사원테이블의 직위 중에 들어 있는 값 중 xxx 사원을 xxx staff로 바꾸어 보이세요.


select 이름, 직위, replace(직위, '사원', 'staff') 

from 사원


-- 7. 도착예정일보다  늦게 택배 발송이 이루어진 주문에 대해 주문 내역을 보이세요.


select * from 주문

where datediff(DAY,도착예정일,택배발송일) > 0


-- 8.  주문일과 도착예정일 사이가 30일 이상 차이가 나는 주문 내역을 보이세요.


select *, datediff(DAY, 주문일, 도착예정일) from 주문 

where datediff(DAY, 주문일, 도착예정일) > 30


-- 9.  3사분기에 주문된 제품들에 대하여 월별 , 제품명별 주문수량합을 보이세요.월별, 제품명별 소계도 보이고 전체 총계도 함께 보이세요.


select month(주문일) '월별', 제품명, sum(주문수량) '주문수량합'

from 주문, 주문세부, 제품

where datepart(QUARTER, 주문일) = 3

and (주문.주문번호 = 주문세부.주문번호)

and (제품.제품번호 = 주문세부.제품번호)

group by month(주문일), 제품명

with cube



-- 10. 몇 년도, 몇월 달에  주문수량합이 제일 많았나요?


select top 1 datepart(MONTH, 주문일) '월', datepart(YEAR,주문일) '년', sum(주문수량) '주문수량합'

from 주문, 주문세부

where 주문.주문번호 = 주문세부.주문번호

group by datepart(MONTH, 주문일) , datepart(YEAR, 주문일)

order by sum(주문수량) desc



-- 11.  입사월별 입사한 사원수를 보이세요. 전체 사원수도 함께 보이세요. 


select datepart(MONTH, 입사일) '입사월', count(*) '사원수'

from 사원

group by datepart(MONTH, 입사일)

with rollup


-- 12. 고객테이블의 집전화 컬럼에 대하여 ()대신 –로 지역번호를 구별할 수 있도록 적절한 함수를 사용하여 질의문을 만드세요.예)(02)824-0909   02-824-0909 


select 담당자명, 전화번호, replace(replace(전화번호, ')', '-'),'(', '')

from 고객


/*

*보너스 문제 


** 사원이름, 생일, 만나이, 연령대를 보이는 질의문을 만드세요.(예) 23세 이하이면 20대 초반  27세 이하면 20대 중반, 29세 이하면 20대 후반)


Hint) 나머지를 구하는 함수는 별도로 없다.

35이면 30대 :  버림함수(나이/10) * 10

35세이면 중반 : 

(나이 - 버림함수(나이/10) * 10) 이 3이하면 초반

(나이 - 버림함수(나이/10) * 10) 이 7이하면 중반

      그 나머지이면 후반 이라고 보이면 됨.

*/


select 이름, 나이, str(나이/10*10) + '대 ' + case when right(str(나이),1) <=3 then '초반' when right(str(나이),1) <=6 then '중반'

else '후반' end

from (select 이름, datediff(YEAR, 생일, getdate() ) 나이 from 사원) 결과

'컴퓨터 > DB' 카테고리의 다른 글

MS SQL 문제 feat.재탕삼탕  (0) 2017.04.22
ms-SQL 열 두 번째 수업  (0) 2014.06.09
ms-SQL 열 한 번째 수업  (0) 2014.06.02
ms-SQL 열 번째 수업  (0) 2014.05.26
ms-SQL 아홉 번째 수업  (0) 2014.05.19
ms-SQL 여덟 번째 수업 - Stored Procedure 시작  (0) 2014.05.12

프로시저

select * from 주문
select * from 주문세부

1. 주문번호, 고객번호, 사원번호, 주문일을 매개변수로 받아서
주문테이블에 삽입이 되는 프로시저를 작성

select * from 주문세부

alter proc ldh_proc
 @주문번호 as char(5),
 @고객번호 as char(5),
 @사원번호 as int,
 @주문일 as datetime
as begin
 declare @결과 int
 
 select @결과=count(*) from 주문 where 주문번호=@주문번호
 
 if @결과 = 0
  insert into 주문(주문번호, 고객번호, 사원번호, 주문일) values(@주문번호, @고객번호, @사원번호, @주문일)
  
  select * from 주문 where 주문번호=@주문번호
 else
  print str(@주문번호) + '가 이미 존재합니다'
end

drop proc ldh_proc

 

2. 주문테이블에 주문이 될 때마다 고객의 마일리지를 10점씩 누적시키는 트리거를 작성

create trigger 마일리지누적_ldh
 on 주문
 for insert
as begin
 declare @고객번호 varchar(5)
 
 select @고객번호=고객번호 from inserted
 update 고객 set 마일리지 = 마일리지+10
  where 고객번호=@고객번호
end

ldh_proc 84294, 'ALFKI', 1, '2014-06-09'


----------------------------------------------------------------------------

프로시저 : do actions
함수 : do actions and return a value

 함수
  built-in 함수
   - 문자열, 숫자형, 날짜형, 시스템
   
  user-defined 함수
  
함수 만드는 문법
 create function 함수명(@매개변수...)
  returns 반환타입
  as
  begin
   .....
   return 반환값
  end
  
나이를 계산해주는 함수
 나이ldh
 
create function 나이ldh(@생일 datetime)
 returns int
as
begin
 return datediff(yy, @생일, getdate())
end
 
 
select year(getdate())
select 이름, 생일, dbo.나이ldh(생일), year(생일) from 사원

select * from 사원

1. 생일을 입력하면 나이대를 구분해주는 함수를 작성하세요
 (23) 20대 초반


alter function 나이ldh(@생일 datetime)
 returns varchar(200)
as
begin
    declare @결과 varchar(200)
    
    if((datediff(yy, @생일, getdate()) % 10) between 0 and 2)
        set @결과 = str(datediff(yy, @생일, getdate())/10*10)+'대 초반'
    else if((datediff(yy, @생일, getdate()) % 10) between 3 and 7)
        set @결과 = str(datediff(yy, @생일, getdate())/10*10)+'대 중반'
    else if((datediff(yy, @생일, getdate()) % 10) between 8 and 9)
        set @결과 = str(datediff(yy, @생일, getdate())/10*10)+'대 후반'
    else
        set @결과 = ''
 
 return @결과
end

select dbo.나이ldh(생일) from 사원
 
2. 이름과 직업을 입력받으면 xx의 직업 xx입니다 라는 결과로
 보이는 함수를 작성

create function 설명ldh(@값1 varchar(100), @값2 varchar(100))
 returns varchar(200)
as
begin
 return @값1 + '의 직업은 ' + @값2+'입니다'
end
 
3. 숫자를 입력하면 원둘레를 구하는 함수를 작성하세요

create function 원둘레ldh(@원둘레 float)
 returns float
as
begin
 return 2*PI()*@원둘레
end


select * from 주문세부
두 수의 곱이라는 함수
재고 * 단가 = 재고금액
주문수량 * 단가 = 주문금액
가로 * 세로 => 사각형 넓이

create function 곱ldh(@값1 float, @값2 float)
 returns float
as
begin
 return @값1 * @값2
end

select *, dbo.곱ldh(단가, 재고수량) 주문금액 from 주문세부
select *, dbo.곱ldh(재고, 단가) 재고금액 from 제품

소스 확인:
sp_helptext 곱ldh

sp_helptext sp_help

-----------------------------------------------------------------------------------

조인 - 4가지
 이퀴조인, 비이퀴조인, 셀프조인, 외부조인
 
뷰, 이너뷰(from (select....)
프로시저, 함수, 트리거 작성
함수 사용
인덱스

-----------------------------------------------------------------------------------

인덱스 : 검색성능을 높이기 위해서 만듦

도서, 대여, 회원

create index 인덱스명 on 테이블명(필드명)

'컴퓨터 > DB' 카테고리의 다른 글

MS SQL 문제 feat.재탕삼탕  (0) 2017.04.22
ms-SQL 열 두 번째 수업  (0) 2014.06.09
ms-SQL 열 한 번째 수업  (0) 2014.06.02
ms-SQL 열 번째 수업  (0) 2014.05.26
ms-SQL 아홉 번째 수업  (0) 2014.05.19
ms-SQL 여덟 번째 수업 - Stored Procedure 시작  (0) 2014.05.12


사원의 이름을 매개변수로 입력하면
해당사원에 대해
 - 이름, 생일, 나이, 입사일, 입사한 일 수, 입사한 지 10000일 째 되는 날
  을 보임
 - 이 사원이 주문받은 주문 횟수
 
alter proc proc_ldh
 @이름 varchar (50) -- 매개변수
 as
begin
 select 이름, 생일, datediff(yy, 생일, getdate()) 나이,
 입사일, datediff(dd, 입사일, getdate()) 입사일수,
 dateadd(dd, 10000, 입사일) '10000일째 되는 날'
 from 사원
 where 이름 = @이름
 
 select datename(qq, 주문일), count(*)
 from 사원, 주문
 where
 사원.사원번호 = 주문.사원번호 and
 이름 = @이름
 group by datename(qq, 주문일)
 order by 1 asc
end

proc_ldh 박에녹

제품명의 일부를 입력하면
 - 제품명, 단가, 재고, 재고금액
 - 검색한 결과로 나오는 레코드가 5건 이상이면
  5건 이상 검색이 되었습니다.
  
alter proc proc_ldh
 @제품명 as varchar(100)
 as
begin
 declare @제품수 int
 declare @정확한이름 varchar(100)
 
 select @정확한이름 = 제품명
 from 제품
 where 제품명 like '%'+@제품명+'%'
 
 select 제품명, 단가, 재고, sum(단가*재고) 재고금액
 from 제품
 where 제품명 like '%'+@제품명+'%'
 group by 제품명, 단가, 재고
 
 set @제품수 = @@rowcount
 if @제품수 >=2
  print  @제품명 + ' 키워드를 가진 제품, ' + ltrim(str(@제품수))+ '건 이상이 검색 되었습니다.'
 else if @제품수 =1
  print @정확한이름 + '제품이 정확히 입력되었습니다.'
 else
  print '결과가 없습니다.'
 
end

proc_ldh '유미'

4가지 조인

 


 


트리거 : 자동 실행 프로그램
 a테이블에 이벤트 insert, update, delete 가 발생하면
 b테이블에 자동으로 행위가 유발

create trigger 트리거이름
 on user 가 사용하는 테이블 명
 for insert_update_delete
as
 begin
 
 end
 

회원 테이블 생성
 -회원 레코드를 삽입할 때 마다 삽입한 레코드를 백업이라는
  테이블에 자동으로 삽입
  

 create table 회원(
  아이디 char(5) primary key,
  이름 varchar(10),
  마일리지 int default 1000,
  등록일 datetime default getdate())
  
 create table 백업(
  아이디 char(5),
  이름 varchar(10),
  --마일리지 int,
  등록일 datetime)
  
회원 레코드를 삽입할 때 마다 삽입한 레코드를 백업이라는 테이블에 자동으로 삽입

create trigger 트리거_백업
 on 회원
 for insert
 as begin
  declare @아이디 varchar(5)
  declare @이름 varchar(10)
  declare @등록일 datetime
  
  select @아이디=아이디, @이름=이름, @등록일=등록일
   from inserted
  
  insert into 백업(아이디, 이름, 등록일)
   values (@아이디, @이름, @등록일)
 end
 
drop trigger 트리거_백업
  
확인 : 회원테이블에 insert해봄
insert into 회원(아이디, 이름) values('apple', '김사과')
insert into 회원(아이디, 이름) values('banan', '김바나나')

drop table 회원
drop table 백업

select * from 회원
select * from 백업

- 게시판에 글을 쓸 때 마다 회원의 마일리지에 100점 씩 자동으로 누적
 이 되는 트리거를 작성
 
create table 게시판(
 번호 int identity,
 제목 varchar(20),
 내용 varchar(50),
 작성일 datetime default getdate(),
 아이디 varchar(5))
 
create trigger 트리거_마일리지_누적
 on 게시판
 for insert
 as begin
  declare @아이디 varchar(5)
  select @아이디 = 아이디 from inserted
  
  update 회원 set 마일리지=마일리지+100 where 아이디=@아이디
end
 
실행여부? 게시판에 글을 써서 확인

insert into 게시판(제목, 내용, 아이디)
values('sql', 'sql트리거 연습', 'apple')

확인 :
select * from 회원

select * from 게시판

게시판에 글을 삭제하면 삭제 날짜와 번호, 작성자를 로그테이블에
자동저장하는 트리거를 작성

create table 로그(
 번호 int identity,
 삭제일 datetime default getdate(),
 아이디 varchar(5),
 제목 varchar(20))
 
create trigger 트리거_삭제_기록
 on 게시판
 for delete
 as begin
  declare @아이디 varchar(5)
  declare @제목 varchar(20)
  
  select @아이디 = 아이디, @제목 = 제목 from deleted
  
  insert into 로그(아이디, 제목)
  values(@아이디, @제목)
end

select * from 게시판
select * from 로그

delete from 게시판 where 아이디 = 'apple'
delete from 로그 where 번호 = 2

 

 



회원테이블에서 이름을 변경할 때 마다 변경전 이름과 변경 후 이름을
저장하는 트리거를 생성하세요

create table 변경내역(
 번호 int identity,
 변경일 datetime default getdate(),
 변경전 varchar(10),
 변경후 varchar(10),
 아이디 varchar(5))

alter trigger 트리거_변경_기록
 on 회원
 for update
 as begin
  declare @아이디 varchar(5)
  declare @변경전 varchar(10)
  declare @변경후 varchar(10)
  
  select @변경전 = 이름
  from deleted
  
  select @아이디 = 아이디, @변경후 = 이름
  from inserted
  
  insert into 변경내역(변경전, 변경후, 아이디)
  values(@변경전, @변경후, @아이디)
end

select * from 회원

select * from 변경내역

update 회원 set 이름='김**'
where 아이디='apple'

 

 

이퀴 비이퀴조인 셀프조인 외부조인

뷰 함수 프로시저 트리거

'컴퓨터 > DB' 카테고리의 다른 글

MS SQL 문제 feat.재탕삼탕  (0) 2017.04.22
ms-SQL 열 두 번째 수업  (0) 2014.06.09
ms-SQL 열 한 번째 수업  (0) 2014.06.02
ms-SQL 열 번째 수업  (0) 2014.05.26
ms-SQL 아홉 번째 수업  (0) 2014.05.19
ms-SQL 여덟 번째 수업 - Stored Procedure 시작  (0) 2014.05.12

select replace('hello', 'el', 'xxxxxxx'),
 stuff('hello', 2, 3, 'qqqqqqqq'),
 str(2000) +'원',
 len('hello'),
 charindex('z', 'abczxc'),
 replicate('#', 5)
 
select datename(wk, getdate())
select dateadd(dd, 100, getdate())
select datediff(dy, '1991-12-30', getdate())

이너뷰(inner view) from 절에 쓰인 select문

select * from (select 고객번호, 마일리지,
 case when 마일리지 >= 10000 then '우수고객'
   else '일반고객' end 고객구분
from 고객) 고객 마일리지
where 고객구분 = '우수고객'


------------------------------------------------

1.

select 제품번호, 제품명, 단가, 단가*1.1 인상단가
from 제품

2.

select 제품명, sum(주문수량) 주문수량합, sum(주문세부.단가*주문수량) 주문금액합, sum(재고) 재고
from 제품, 주문세부
where 제품.제품번호 = 주문세부.제품번호
group by 제품명

3.

select 고객번호, charindex('ar', 고객번호)
from 고객

4.

select 제품명, charindex('아', 제품명)
from 제품

5.

select month(주문일) 월, 제품명, sum(주문수량)
from 주문, 주문세부, 제품
where
주문.주문번호 = 주문세부.주문번호 and
주문세부.제품번호 = 제품.제품번호 and
datename(qq, 주문일) = 3
group by month(주문일), 제품명

6. [주문]요청일보다 발송이 늦게 된 주문에 대한 정보를 보여라
select * from 주문
where 발송일 > 요청일

7. 주문일과 발송일 사이가 30일 이상이 주문내역을 보이세요.
select *, datediff(dd, 발송일, 요청일) 늦어진일수
from 주문
where datediff(dd, 발송일, 요청일) < 0

8. 주문한지 일주일 이내에 발송이 이루어진 주문내역을 보이세요.
select * from 주문
where datediff(dd, 주문일, 발송일) > 30

10.
select top 1 year(주문일) 년도, month(주문일) 월, sum(주문수량)
from 주문, 주문세부
where
주문.주문번호 = 주문세부.주문번호
group by year(주문일), month(주문일)
order by 3 desc

11.

select str(month(입사일))+'월', count(*)
from 사원
group by month(입사일)
with rollup

12

select replace(right(전화번호, len(전화번호)-1), ')', '-') from 고객


보너스 1

사원이름, 생일, 만나이, 연령대를 보이는 질의문을 만드세요

select 이름, 생일, datediff(yy, 생일, getdate()) 나이,

case when datediff(yy, 생일, getdate()) % 10 between 0 and 3
then  str(datediff(yy, 생일, getdate())/10*10)+'대 초반'

when datediff(yy, 생일, getdate()) % 10 between 3 and 7
then str(datediff(yy, 생일, getdate())/10*10)+'대 중반'

when datediff(yy, 생일, getdate()) % 10 between 7 and 9
then str(datediff(yy, 생일, getdate())/10*10)+'대 후반'
else '' end 연령대

from 사원

보너스 2

select '(' + stuff('02-145-2324', charindex('-', '02-145-2324'), 1, ')')

sp_helptext sp_help


alter proc proc_ldh
 @고객번호 varchar(10) -- 매개변수
 as
begin
 declare @회사명 varchar(100) -- 변수선언
 declare @마일리지 int
 
 select @회사명= 고객회사명, @마일리지 = 마일리지
  from 고객
 where 고객번호 =@고객번호
 
 if @회사명 is not null 
  print @고객번호 + '님의 회사는 ' + @회사명 + '입니다. 보유 마일리지는 ' + str(@마일리지) + '입니다.'
 else
  print '입력한 고객번호가 틀렸습니다.'
end
 
proc_ldh 'ALFKI'
proc_ldh 'AAAAA'

생산지를 입력받으면
  생산지별로 재고, 단가를 보이세요
 
  제품들에 대해서 재고가 5개 이하 남은 수량을 보이세요
 
  '재고가 부족한 제품은 현재 x개 입니다' 라고 출력하는 프로시저 작성
 
  재고가 5개 이하인 제품이 없을 경우에는
 '재고가 부족한 제품은 현재는 없습니다'
 
alter proc proc_ldh
 @생산지 varchar(10) -- 매개변수
 as
begin
 declare @제품명 varchar(100) -- 변수선언
 declare @개수 int
 
 select @개수=count(*)
 from 제품
 where 생산지 = @생산지
 
 select 제품명, 제품.재고, 제품.단가
 from 제품
 where 생산지 = @생산지 and 재고<=5
 
 if @개수 is not null 
  print  '재고가 부족한 제품은 현재' + str(@개수) + '입니다.'
 else
  print '재고가 부족한 제품은 현재 없습니다.'
end

select * from 제품
proc_ldh '한국'

2. 생일달을 매개변수로 입력받으면
해당월에 생일을 맞은 사원의 명단을 보여주고
x월에 생일을 맞은 사원은 x명 입니다. 라고 출력하는 프로시저 작성

alter proc proc_ldh
 @생일달 int
 as
begin
 declare @생일자수 int
 
 select 사원번호, 이름, 생일
 from 사원
 where month(생일) = @생일달
 
 select @생일자수=count(*)
 from 사원
 where month(생일)=@생일달
 
 if @생일자수 = 0
  print  '해당월에는 생일자가 없습니다.'
 else
  print @생일달 + '월에 생일자는 ' + str(@생일자수) +'입니다.'
end

'컴퓨터 > DB' 카테고리의 다른 글

ms-SQL 열 두 번째 수업  (0) 2014.06.09
ms-SQL 열 한 번째 수업  (0) 2014.06.02
ms-SQL 열 번째 수업  (0) 2014.05.26
ms-SQL 아홉 번째 수업  (0) 2014.05.19
ms-SQL 여덟 번째 수업 - Stored Procedure 시작  (0) 2014.05.12
ms-SQL 일곱 번째 수업  (0) 2014.04.28

주문 시작일과 주문 끝일을 매개변수로 입력받아서
 - 총 주문횟수
 - 월별 주문횟수
 - 제품명별로 주문수량합과 주문금액합을
  주문금액이 많은 것 부터 상위 10개
 -고객정보(담당자명, 고객회사명, 전화번호)
 

alter proc proc_ldh
@from datetime, @to datetime
 as
begin
 select count(*) 주문횟수 from 주문
 where 주문일 between @from and @to

 select month(주문일) 월, count(*) 주문횟수
 from 고객, 주문
 where 주문일 between @from and @to
 group by month(주문일)
 order by 1 asc

 select top 10 제품명, sum(주문수량) 수량합, sum(주문세부.단가*주문수량) 금액합
 from 고객, 주문, 주문세부, 제품
 where 고객.고객번호=주문.고객번호
 and 주문.주문번호=주문세부.주문번호
 and 제품.제품번호=주문세부.제품번호
 and 주문.주문일 between @from and @to
 group by 제품명
 order by 3 desc
 
 select distinct 고객.담당자명, 고객.고객회사명, 고객.전화번호
 from 고객, 주문
 where 고객.고객번호=주문.고객번호
 and 주문.주문일 between @from and @to
end

proc_ldh '2007-01-01' ,'2007-02-28'

-----------------------------------------------------------------------

sp_helptext proc_ldh
sp_helptext sp_helptext

프로시저 : do actions
함수 : do actions and return a value

문자열함수
숫자형함수
날짜형함수
시스템함수

select left('안녕하세요', 2), right('안녕하세요', 3),
  substring('안녕 하세요', 3, 1), reverse('hello'),
  replace('안녕하세요', '안녕', '안뇽'),
  stuff('안녕하세요', 2, 1,'호호호'),
  len(ltrim('   aaaa    ')),
  len(rtrim('   aaaa    ')),
  replicate('*', 5)
  


select * from 고객

1. 백화점 고객들에 대해 고객번호 5번째자를 모두 Z로 바꿔보이세요
select replace(고객번호, substring(고객번호, 5, 1), 'Z') from 고객
select 고객번호 , stuff(고객번호, 5, 1, 'Z') from 고객

2. 주소중 구를 gu로 동을 dong으로 바꿔보이세요
select 주소, replace(replace(주소, '구', 'GU'), '동', 'DONG')  from 고객

3. 담당자명 중 한 자만 보이고 나머지 글자 대신에 *로 보여주세요
select 담당자명,
 stuff(담당자명, 2, len(담당자명)-1,
   replicate('*', len(담당자명)-1))+'님'
from 고객

where len(담당자명) in (2,4)

4. (xxx)xxx-xxxx -> xxx-xxx-xxxx
select replace(right(전화번호, len(전화번호)-1), ')', '-') from 고객

숫자형함수 연습
select floor(35.789), ceiling(35.189),
round(245.1234, 0), round(245.1234, 2),
round(245.1234, 1)

select 주문번호, 제품번호, 단가, 주문수량,
str(할인율*100) + '%' 할인율,
주문수량*단가 주문금액,
주문수량*단가*할인율 할인금액, 주문수량*단가*(1-할인율) 실주문금액
from 주문세부

1. 제품번호별로 주문금액합을 보이세요.
 (10000원단위까지 유효 숫자로 표현)
 
select 제품번호, round(sum(주문수량*단가), -4) from 주문세부
group by 제품번호

1.1 100000원 단위까지 보이되 그 이하 금액을 버리기 처리

2. 주문번호별로 주문금액합, 할인액합, 실주문금액합
 (100원 단위까지 유효 숫자)
 
 select 주문번호, sum(주문수량*단가) 주문금액합,
 sum(주문수량*단가*할인) 할인액합,
 round(sum(주문수량*단가*(1-할인율)), -2) 실주문금액합
 from 주문세부
 group by 주문번호
 
 
-----------------------------------------------------------------------

*날짜형 함수 연습

select getdate(), year(getdate()), month(getdate()), day(getdate()),
datename(qq, getdate()),
dateadd(ss, 100000, getdate()),
dateadd(hh, -100, getdate()),
datediff(dd, '1900-01-01', getdate())

분기별로 주문횟수를 보이세요

select datename(qq, 주문일) 분기, count(*) 주문횟수
from 주문
group by datename(qq, 주문일)
order by 1 asc

분기별로 주문금액합을 보이세요.

select datename(qq, 주문일) 분기, sum(주문수량*단가) 주문금액합
from 주문, 주문세부
where 주문.주문번호 = 주문세부.주문번호
group by datename(qq, 주문일)
order by 1 asc


select datediff(dd, '1991-11-25', getdate()) '몇일살았을까',
datediff(hh, '1991-11-25', getdate()) '몇시간살았을까',
str(datediff(dd, getdate(), dateadd(yy, 100, '1991-11-25')))+'일' 남은날짜


이름, 입사일, 입사일수, 입사한지 1000일째 되는 날을 보여주세요

select 이름, 입사일, datediff(dd, 입사일, getdate()) '입사일 수',
dateadd(dd, 1000, 입사일) '1000일 후'
from 사원

 

'컴퓨터 > DB' 카테고리의 다른 글

ms-SQL 열 한 번째 수업  (0) 2014.06.02
ms-SQL 열 번째 수업  (0) 2014.05.26
ms-SQL 아홉 번째 수업  (0) 2014.05.19
ms-SQL 여덟 번째 수업 - Stored Procedure 시작  (0) 2014.05.12
ms-SQL 일곱 번째 수업  (0) 2014.04.28
ms-SQL 여섯 번째 수업  (0) 2014.04.14