본문 바로가기

예제노트

2008년 4월 21일 월요일 문제 및 답안 ms-sql정리편

2008년 4월 21일 (종합 정리)

문제1)

Titles 테이블의 컬럼 리스트를 보고자 할 때 아래와 같이 두가지 경우로 작성할 수 있다. 빈칸을 채우십시오.

1) sp_columns titles
2) select * from (             ) where id = object_id('titles')

답) syscolumns

문제2)

어떤 “aaa” 라는 테이블에서 “price”라는 가격 필드가 있다. 가격이 4,000 이상 6,000 이하인 품목 “product” 필드에 대한 개수를 구하는 SQL문을 이용하여 작성하십시오.

select count(product) from aaa
where price >= 4000 and price <= 6000;

혹은

select count(product) from aaa
where between 4000 and 6000;


문제3)

아래와 같이 동일한 기능을 하는 SQL문을 합계 함수를 이용하여 작성하십시오.
단, price 필드에서는 NULL 값이 있는 필드가 한 개도 없습니다.

select avg(price) from abc;

답) select sum(price) / count(price) from abc;

 

문제4)

아래의 두 구문이 동일한 구문이 되기 위해서 (            ) 안에 삽입되어야 할 구문을 기입하십시오.

select count(title) from titles
where price is null;

(                        )

select count(title) from titles
where price = null;

답)

set ansi_nulls off;


문제5)

아래의 네가지 테이블은 동일한 결과를 수행합니다. 빈란을 채우십시오.

1) select price from pubs..titles;
2) select price from titles;
3) select price from (            );
4) select price from (                );

답)

3) select price from (  dbo.titles  );
4) select price from (  pubs.dbo.titles   );

 


문제6)

아래의 조건으로 된 테이블을 작성하십시오.

보기) 테이블 이름 : java_member_table

필드명 데이터 타입 기본값 설 명 제약조건
member_id 가변길이 10자리 not null 회원아이디 PK(기본키)
member_name 가변길이 20자리 not null 회원 이름
member_jumin 고정길이 13자리 not null 회원주민번호 PK(기본키)
member_level 정수형 1자리 9 회원 등급
member_intro 2000자를 허용하는 유니코드 가변문자열  회원 소개

답)

create table java_member_table (
member_id   varchar(10)  not null, 
member_name  varchar(20)  not null,
member_jumin  char(13)  not null,
member_level  int(1)  default  9,
member_intro  nvarchar(2000),
primary key ( member_id, member_jumin )
)

문제7)

titles 테이블에서 가격이 기재되어 있지 않은 항목을 ‘100’으로 채워서 price 컬럼 자리에 화면 출력하는 SQL문을 작성합니다.

답)
select price = isnull(price, 100) from titles;

문제8)

“문제6” 에서 데이터를 아래와 같이 삽입한다고 하였을 때 빈칸에 들어갈 구문을 적으십시오.

insert into java_member_table (                                    )
values ('deuiv', '이산', '정조의 식솔들은 이산가족입니다', '7010101111111');

답)
insert into java_member_table ( 'member_id', 'member_name', 'member_intro', 'member_jumin')
values ('deuiv', '이산', '정조의 식솔들은 이산가족입니다', '7010101111111');

문제9)

주어진 어떤 특정한 기간 동안 판매한 도서량의 평균을 구하고자 합니다. 아래와 같이 주어졌을 때 빈칸을 채우십시오. 단, 도서 판매량 필드는 “qty”라고 가정합니다.

select (              )  from sales
where order_date >= '2007/01/01' and order_date <='2007/12/30';


답)

select avg(qty) from sales
where order_date >= '2007/01/01' and order_date <='2007/12/30';
혹은
select sum(qty) / count(qty)  from sales
where order_date >= '2007/01/01' and order_date <='2007/12/30';


문제10)

데이터를 입력하다가 다음과 같이 에러 메시지가 출력되었다. 어떻게 조치해 주어야 에러를 해결할 수 있는지 방법을 기술하십시오. (SQL을 기입할 필요없이 방법만 간단히 기술합니다)

PRIMARY KEY 제약 조건 'PK__tmp_test__07F6335A'을(를) 위반했습니다. 'tmp_test' 개체에 중복 키를 삽입할 수 없습니다.

답)

primary key(기본키)가 중복되기 때문에 데이터 입력시 해당 필드에 중복되지 않는 다른 값을 입력하면 해결할 수 있습니다.


문제11)  (기출)

Sales 테이블에서 가게 ID, 판매량, 평균을 보고자 합니다. 이것을 가게 ID 각각 결과를 내림차순으로 볼 수 있도록 조치합니다. 단, 평균에 대해서는 compute를 사용합니다.

답)

select stor_id, qty
from sales
order by stor_id desc
compute avg(qty) by stor_id;


문제12)

아래의 조건에 따른 빈칸을 채우십시오.

2007년 1년간의 도서판매량이 1000권 초과인 것을 각 ID 별로 조회하고자 합니다. 화면에는 “title_id”, “2007년 판매량”이라는 두가지의 필드로 출력될 수 있도록 조치합니다. 단 판매량 필드는 qty입니다.

select title_id, (            ) as '2007년 판매량'
from sales
where ord_date  (            )  '2007/01/01'  and  '2007/12/31'
(               ) title_id                
having (           ) > 1000;


답)

select title_id, sum(qty) as '2007년 판매량'
from sales
where ord_date  between '2007/01/01'  and  '2007/12/31'
group by title_id                 -- group by all title_id
having sum(qty) > 1000;

문제13)

4월중 블로그 테스트는 4월 29일에 수행합니다. 현재부터 그날까지 며칠이 남았는지를 구하는 SQL문을 작성하십시오.

답)

Select datediff(dd, getdate(), ‘2008.4.29’);

문제14)

날짜 형식을 일/월/년 순으로 바꾸는 명령을 적으십시오.

답)
set dateformat dmy;

문제15)

다음 기입된 SQL문에서 빈란(세곳)을 채우십시오.

select '오늘은 '+ convert(varchar,       )
+ '월'
+ convert(varchar,          )
+ '일'
+ ' '
+ (                          )
+ '입니다. '
as '오늘의 날짜';


답)
select '오늘은 '+ convert(varchar, month(getdate()))
+ '월'
+ convert(varchar, day(getdate()))
+ '일'
+ ' '
+ datename(dw, getdate())
+ '입니다. '
as '오늘의 날짜';


## 문제16-20)

“문제6”의 테이블에서 다음과 같이 데이터가 입력되어 있다고 가정하였을 때, 아래와 같이 조치하십시오.

java_member_table (table name)
member_id member_name member_jumin member_level member_intro
jsp1234 홍길동 6010101111111 2 웹프로그래머
ejb5678 오달자 7002202222222 3 시스템프로그래머
uml91011 장길산 8008101111111 4 웹기획자

문제16)

위의 회원 데이터들을 레벨 내림차순으로 정렬하여 화면에 모든 필드를 출력하는 SQL문을 작성하십시오.

답)

select * from java_memebr_table
order by member_level desc;

문17)

위의 테이블에서 이름에 “길”자가 포함된 인원들을 찾아서 ID를 내림차순으로 조회하여 ID와 이름을 동시에 출력하는 쿼리문을 작성하십시오.

답)
select member_id, member_name from java_memebr_table
where member_name like '%길%'
order by member_id desc

문18)

위의 테이블에서 “오달자”씨가 직업을 “프로젝트매니저(1등급)”로 바꾸었을 때 데이터를 변경하고자 한다. 해당되는 SQL문을 작성하십시오.

답)

update java_member_table
set member_intro = '프로젝트매니저', member_level = 1
where member_name = '오달자'; 
-- 여기서 오달자 대신에 아이디나 주민번호등으로 검색해도 무방하다.

문19)

회원중에서 프로그래머에 해당하는 인원들을 찾아서 개발자로 변경하는 쿼리문을 작성하십시오.

답)

update java_member_table
set member_intro = replace(member_intro, '프로그래머','개발자’ )
from java_member_table
where member_intro like '%프로그래머';

문20)

위의 테이블에서 회원 이름 필드 자료형을 nvarchar(20)으로 변경하는
SQL문을 작성하십시오.

답)
alter table java_member_table
ALTER COLUMN member_name nvarchar(20) not null;