< SQLD 1차 Offline Study >


  • 일시 : 2011. 11. 06. (일) 늦은 4시
  • 장소 : 구로디지털단지 (구체적 위치는 11월 3일 스터디 시간에 안내)
  • 대상 : SQLD 스터디 멤버 + @ (참관 및 의견공유 환영!!)
  • 회비 : 1만원 (세미나실 이용 비용 발생 시 회비지원금 + @ 식비 포함)

                그래도 힘들게 모였으니 밥한끼는 같이 하는게 좋을 것 같습니다!! ^-^;;;

  • 준비사항 (SQLD 스터디원은 1~4번은 필수 사항입니다.)

1. 교재 복습

2. 연습문제 풀어보기

3. 복습 겸 아래의 문제 풀어보기

4. 기출문제 1인 3문 이상 준비 

5. Q & A


다음 중 아래 스키마를 보고 평점이 3.0 이상인 학생들의 이름을 보여주는 SQL을 표현한 것으로 가장 적절한 것은?

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

<스키마>

※ 밑줄친 속성은 기본키(Primary Key)이며 ENROLL의 학번은 STUDENT의 학번을 참조하는 외래키(Foreign Key)이고, ENROLL의 강좌번호는 CLASS의 강좌번호를 참조하는 외래키이다.


STUDENT(학번, 학과, 이름)

CLASS(강좌번호, 시간, 강좌이름)

ENROLL(학번, 강좌번호, 학점)

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

 ①

SELECT 학번, MIN(이름)

FROM STUDENT S, ENROLL E

GROUP BY E.학번

HAVING AVG(E.학점) >= 3.0

 

SELECT S.학번, MIN(이름)

FROM STUDENT S, ENROLL E

WHERE S.학번=E.학번

HAVING AVG(E.학??글>

 

SELECT S.학번, MIN(이름)

FROM STUDENT S, ENROLL E

WHERE S.학번=E.학번

GROUP BY S.학번

HAVING AVG(E.학점) >= 3.0

 

SELECT 학번, MIN(이름)

FROM STUDENT S, ENROLL E

WHERE S.학번=E.학번

GROUP BY S.학번

HAVING AVG(E.학점) > 3.0



다음 중 아래와 같은 테이블에서 Full Outer Join의 결과로 가장 적절한 것은?


[DEPT]

DEPTNO

DNAME

10

RESEARCH

30

SALES

[EMP]

DEPTNO

ENAME

30

KING

40

WARD

SELECT D.DEPTNO, E.DEPTNO
FROM DEPT D FULL OUTER JOIN EMP E
ON (D.DEPTNO = E.DEPTNO)

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

DEPTNO

DEPTNO

30

30

 

DEPTNO

DEPTNO

10

30

30

 

DEPTNO

DEPTNO

30

30

40

 

DEPTNO

DEPTNO

10

30

30

40



아래 테이블은 어느 회사의 사원들과 이들이 부양하는 가족에 대한 것으로 밑줄 친 칼럼은 기본키(Primary Key)를 표시한 것이다. 다음 중 ‘현재 부양하는 가족들이 없는 사원들의 이름을 구하라’는 질의에 대해 아래 SQL 문장의 ㉠, ㉡ 에 들어 갈 내용으로 가장 적절한 것은?


[테이블]

사원 (사번, 이름, 나이)

가족 (이름, 나이, 부양사번)

※ 가족 테이블의 부양사번은 사원 테이블의 사번을 참조하는 외래키(Foreign Key)이다.


[SQL 문장]

SELECT 이름

FROM 사원

WHERE ㉠ (SELECT * FROM 가족 WHERE ㉡ )

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

 

① ㉠ : EXISTS        ㉡ : 사번 = 부양사번

② ㉠ : EXISTS        ㉡ : 사번 <> 부양사번

③ ㉠ : NOT EXISTS ㉡ : 사번 = 부양사번

④ ㉠ : NOT EXISTS ㉡ : 사번 <> 부양사번



다음 중 아래 테이블 정의와 인덱스 현황을 참고하여, 인덱스를 효율적(또는 정상적)으로 액세스할 수 없는 검색조건을 2개 고르시오. (단, Oracle의 Index Unique Scan, Index Range Scan 또는 SQL Server의 Index Seek 이외의 액세스 방식은 모두 비효율적이라고 가정한다.)


create table 주문 (
    주문번호    int            not null
  , 주문자명    varchar(20)     null
  , 주문금액    money         null
  , 주문일자    varchar(8)      null
)
 
create unique index 주문_pk on 주문 (주문번호)
create index 주문_x01 on 주문 (주문자명)
create index 주문_x02 on 주문 (주문일자 , 주문금액)

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

 

① where 주문번호 between 1 and 10  
② where 주문자명 like '%홍길동%'
③ where 주문일자 >= '20100901'
④ where 주문일자 = 20100901



총 건수가 1,000만 건인 연도별지역별상품매출 테이블에 [출시연도 + 크기],  [색상  + 출시연도] 순으로 구성된 두 개의 B*Tree인덱스가 있었다. 다음 중 이 두 인덱스를 제거하고 아래와 같이 세 개의 비트맵(Bitmap) 인덱스를 생성했을 때, 개별 쿼리의 블록 I/O 측면에서 개선 효과가 가장 미미한 것은? 

 

create bitmap index 연도별지역별상품매출_bx1 on 연도별지역별상품매출(크기);
create bitmap index 연도별지역별상품매출_bx2 on 연도별지역별상품매출(색상);
create bitmap index 연도별지역별상품매출_bx3 on 연도별지역별상품매출(출시연도);
 
■ Distinct Value
   크기 = { NULL, SMALL, MEDIUM, BIG }
   색상 = { NULL, RED, GREEN, BLUE, BLACK, WHITE }
   출시연도 = { NULL, 2001, 2002, 2003, 2004, 2005 2006, 2007, 2008, 2009, 2010 }
 
■ 데이터 분포는 모두 균일

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

 

① select count(*) from 연도별지역별상품매출 where 색상 is null;


② select count(*) from 연도별지역별상품매출

      where (크기 = ‘SMALL’ or 크기 is null)

      and   색상 = ‘GREEN’

      and    출시연도 = ‘2010’;


③ select 색상, count(*) from 연도별지역별상품매출 group by 색상;


④ select sum(판매량), sum(판매금액)

      from 연도별지역별상품매출

      where  색상 = ‘BLUE’;



다음 중 Syntax 오류가 있는 SQL문 2개를 고르시오.

 

① SELECT 부서번호
   FROM 직원HAVING COUNT(*) > 3;


② SELECT 직원이름
   FROM 직원 JOIN 부서
   ON (직원.부서번호 = 부서.부서번호)
   WHERE 부서명 = ‘인사과’


③ SELECT 전화번호
   FROM 직원
   WHERE 전화번호 = ‘777’
   GROUP BY 전화번호


④ SELECT 직원이름
   FROM 직원 JOIN 부서
   USING (부서.부서번호)
   WHERE 부서명 = ‘인사과’



다음 중각 SQL 실행 결과를 가장 올바르게 설명한 것을 2개 고르시오.


① SELECT COL1, COL2 FROM TAB1 WHERE 1 = 2 ;

    → 실행 시 에러가 발생한다.

② SELECT NVL(COL1,'X') FROM TAB1 WHERE 1 = 2 ;

    → 실행 결과로 'X'를 반환한다.

③ SELECT NVL(MIN(COL1), 'X') FROM TAB1 WHERE 1 = 2;

    → 실행 결과로 'X'를 반환한다.

④ SELECT COL1, COL2 FROM TAB1 WHERE 1 = 2 ;

    → 실행 결과가 없다.(공집합)




문제출처 :  DB Guide.net

http://www.dbguide.net/da.db?cmd=snb13_view&boardGroupUid=6&boardConfigUid=81&boardUid=151491