1. ROLLUP 이나 GROUPING SETS 하라는 문장


SELECT COL1, COL2, SUM(COL3)

FROM SQLD_33_01

GROUP BY ( COL1, ROLLUP(COL2) ) 또는 ( GROUPING SETS(COL1,(COL1,COL2))



COL1으로만 하나 묶으면 ROLLUP 써야함 GROUP BY 집계함수 (COL1, ROLLUP(COL2))]


COL1,COL2 두개로 묶으면 CUBE COL1하나 묶은거 보이고 아래에 COL2 묶은거 보일 경우



2. 조회문 결과찾기


3,2


SELECT SUM ( CASE WHEN COL1 <='A' THEN 1 END ) AS SUM1,

SUM ( CASE WHEN COL2 < 200 THEN 1 END ) AS SUM2

FROM SQLD_33_07;



3. 조인 기법은

Nested Loop Join

1) 먼저 선행테이블의 조건을 만족하는 행을 추출하여 후행 테이블을 읽으면서 조인을 수행한다.

2) 랜덤 방식으로 액세스 한다.

3) 결과를 가능한 빨리 화면에 보여줘야하는 온라인 프로그램에 적당하다.

'SQLD자격증 대비 > SQLD 기출문제 정리' 카테고리의 다른 글

SQLD 블로그 질문 내용들  (0) 2019.08.16
SQLD 21회 기출문제  (0) 2019.03.12
SQLD 30회차 기출 문제  (0) 2019.03.10

1. order by 숫자 무슨 의미인가요?

order by 1;


-> 1번 colum asc 


order by 2;

-> 2번 컬럼 ASC(오름차순)



2. 테이블 이름 수정 쿼리


RENAME tb_1 TO tb_2; (sql server)


ALTER TABLE tb_1 RENAME TO tb_2; (oracle server)


3. 테이블 컬럼 이름 수정 쿼리


(sql server)

ALTER TABLE 기관분류 ALTER COLUMN 분류명 VARCHAR(30) NOT NULL;

ALTER TABLE 기관분류 ALTER COLUMN 등록일자 DATE NOT NULL;


(oracle)

ALTER TABLE 기관분류 MODIFY COLUMN 분류명 VARCHAR(30) NOT NULL;

ALTER TABLE 기관분류 MODIFY COLUMN 분류명 VARCHAR(30) NOT NULL:


4. 문제집 98번 서브쿼리내용

 EXISTS도 나옴


 서브쿼리에 대한 설명 : 


다중 행 서브쿼리 비교 연산자는 단일 행 서브쿼리의 비교 연산자로도 사용할 수 있다.

단일 행 서브쿼리 비교연산자는 다중 행 서브쿼리의 비교연산자로 사용할 수 없다.


단일 행 서브쿼리의 비교연산자 : = , < , <= , >, >=, <>가 되어야 한다.

다중 행 서브 쿼리의 비교연산자 : IN,ALL


비 연관 서브쿼리가 주로 메인쿼리에 값을 제공하기 위한 목적으로 사용된다.


메인 쿼리의 결과가 서브쿼리로 제공될 수도 있고, 서브쿼리의결과가 메인쿼리로 제공될 수도 있으므로 실행 순서는 상황에 따라 달라진다.


5. 31회 13번



c3->c2->c1 순으로 정렬이 되어야 하는 문제. (가나다순으로 책정리 한다 생각하시면됩니다.)
문자열 비교는 첫자리부터 비교 대상이 되니..

c3 : 1->2->null, 110->1100 순으로 정렬됨.
2 110 110
3 150 110
4 null 110
1 100 1100
5 null 200 v
6 200 200 v

c2 : 정렬된 c3의 구간내에서 
c3의 200 구간의 c2 정렬만 적용됨 200 -> null, 나머지는 순차적임
2 110 110
3 150 110
4 null 110
1 100 1100
6 200 200 v
5 null 200 v

c1 : 정렬된 c3,c2의 중복 구간이 없으므로 정렬 적용될게 없음




6. 문제집 45번


2번은 isnull() 이 col2가 null이면 X로 바꾸는? 건데 where절에 col1이 a인 조건이 나와서 a 행의 col2는 null이라서 X로 실행결과가 나오는거 같아요
4번은 결론적으로 실행결과가 2가 나와야 해요! in(b,c)는 b 또는 c가 들어있는 행을 count 한 것을 찾는 거라서 2입니다. ''는 null이 아니므로 숫자로 카운트 됩니다!

둘다 공백은 count 에 들어가는겅로 알고 있어요! 
null 이 아닌건 전부 count 되는거 같아요


'SQLD자격증 대비 > SQLD 기출문제 정리' 카테고리의 다른 글

33회 기출문제  (0) 2019.08.16
SQLD 21회 기출문제  (0) 2019.03.12
SQLD 30회차 기출 문제  (0) 2019.03.10

1. 아래의 쿼리를 만족하는 결과를 가장 잘 설명한 것은?


SELECT A.*

FROM HR.EMPLOYEES A, -- EMPLOYEE SALARY

   HR.EMPLOYEES B -- MANAGER SALARY

WHERE 1=1

AND A.MANAGER_ID = B.EMPLOYEE_ID

AND A.SALARY >= ANY B.SALARY;


1) 어떤 상사보다도 월급이 많은 직원 (*)

2) 어떤 부하직원보다 월급이 많은 직원

3) 모든 상사보다도 월급이 많은 직원

4) 모든 부하직원보다 월급이 많은 직원


사전 지식

* 비교연산자 ALL (서브쿼리)

: 서브쿼리의 결과에 존재하는 모든값을 만족하는 조건을 의미.

비교연산자로 " > " 를 사용했다면 메인쿼리는 서브쿼리의 모든 값을 만족해야 하므로 

서브쿼리의 결과의 최댓값보다 큰 모든 건이 조건을 만족


2. 아래의 쿼리의 결과를 만족하는 결과로 가장 알맞은 것은?


DEPARTMENT_ID : NULL, 10 ~110


SELECT DISTINCT DEPARTMENT_ID

FROM HR.EMPLOYEES A

WHERE A.DEPARTMENT_ID <= ALL(30,50);

1) 10,20

2) 10,20,30 (*)

3) 10,20,30,40

4) 10,20,30,40,50


3. 아래와 같은 테이블에 데이터가 있다. 각 SQL에 대한 결과값이 잘못된 것은? 2번 아무것도 출력 안되는게 정상


TABLE SQLD_21_01
N1        V1         
--------- ---------- 
        1 A         
        2           
        3 B         
        4 C       

TABLE SQLD_21_02
N1        V1         
--------- ---------- 
        1 A         
        2           
        3 B      



1) SELECT * FROM SQLD_21_01
   WHERE V1 IN (SELECT V1 FROM SQLD_21_02);

   N1        V1         
--------- ---------- 
        1 A         
        3 B         
   
2) SELECT * FROM SQLD_21_01
   WHERE V1 NOT IN (SELECT V1 FROM SQLD_21_02);

N1        V1         
--------- ---------- 
        4 C

3) SELECT * FROM SQLD_21_01 A
   WHERE EXISTS (SELECT 'X' FROM SQLD_21_02 B
                 WHERE A.V1 = B.V1);

N1        V1         
--------- ---------- 
        1 A         
        3 B         



4) SELECT * FROM SQLD_21_01 A
   WHERE NOT EXISTS (SELECT 'X' FROM SQLD_21_02 B
                     WHERE A.V1 = B.V1);

N1        V1         
--------- ---------- 
        2           
        4 C         

4번. 데이터 모델링에 대한 아래 보기 설명 중 알맞은 것은?
1) 논리 모델링의 외래키는 물리 모델에서 반드시 구현되지 않는다(*)
2) ...

5번. 데이터 모델링에 대한 단계 중 아래에서 설명하는 단계는 어떤 단계의 모델링 인가?
추상화 수준이 높고 업무 중심적이고 포괄적인 수준의 모델링 진행, 전사적 데이터 모델링, EA수립 시 많이 이용됨.

1) 개념적 데이터 모델링 (*)
2) 논리적 데이터 모델링 
3) 물리적 데이터 모델링
4) 추상적 데이터 모델링

6번. 엔터티 - 인스턴스 - 속성 - 속성값에 대한 관계 설명중 틀린 것은 고르시오.
1) 하나의 속성은 하나 이상의 속성 값을 가진다 (*)


7번. 학생 관련 정보를 조회하는 SQL을 작성하려고 한다. 조회하는 사람은 주로 학생 본인이 학번으로 조회를 주로 한다. 
이런 SQL일때  성능을 개선하는 방법으로 가장 알맞은 것은?

1) 학교명을 선두컬럼으로 하는 INDEX를 생성한다.
2) 학번을 선두 컬럼으로 하는 INDEX를 생성한다. (*)
3) 학교명 + 학번 순으로 구성된 INDEX를 생성한다.
4) 학교명 + 이름 + 학번으로 구성된 INDEX를 생성한다.


사전지식 


* FLOOR ; 숫자보다 작거나 같은 최대 정수를 리턴

* CEIL/CEILING : 숫자보다 크거나 같은 최소 정수를 리턴

* TRUNC : 숫자를 소수 m 자리에서 잘라서 리턴(m default : 0)

* ROUND : 숫자를 소수 m 자리에서 반올림하여 리턴 (m default :0)



8번. 아래의 SQL에서 FUNCTION 자리에 쓰인 함수에 의한 결과 값이 다른 하나는?

SELECT function(3.46) FROM DUAL;


1) TRUNC -> 3

2) CEIL (*) -> 4

3) FLOOR -> 3

4) ROUND ->3



사전지식


* 1차 정규형

- 모든 속성은 반드시 하나의 값을 가져야 한다. 즉, 반복 형태가 있어서는 안된다.

- 각 속성의 모든 값은 동일한 형식이어야 한다.

- 각 속성들은 유일한 이름을 가져야 한다.

- 레코드들은 서로 간에 식별 가능해야 한다.


* 2차 정규형

- 식별자가 아닌 모든 속성들은 식별자 전체 속성에 완전 종속되어야 한다.

- 이것을 물리 데이터 모델의 테이블로 말하면 기본키가 아닌 모든 칼럼들이 기본키에 종속적이어야 2차 정규형을 만족할 수 있다는 것이다.


*3차 정규형

- 2차 정규형을 만족하고 식별자를 제외한 나머지 속성들 간의 종속이 존재하면 안된다. 이것이 3차 정규형을 만족하는 것이다.


9번. 아래의 ERD 에서 3차 정규형을 만족하게 할 때 엔터티의 개수는 몇개가 되는가?


   교수  -<- 학생 -<- 개설과목 (보기 재현 필요)
   
   -> 1차 정규형 : 모든 속성은 반드시 하나의 값. 속성값의 중복 제거
   -> 2차 정규형 : 식별자에 종속되지 않는 속성의 중복 제거 
   -> 3차 정규형 : 2차 정규형 만족 + 식별자 외 일반 컬럼간의 종속 존재 제거

1)3개 2)4개 3)5개 4)6개



사전지식 


GROUP BY ROLLUP(DNAME, JOB)

= GROUP BY DNAME,JOB

UNION ALL

   GROUP BY DNAME

UNION ALL

모든 집합


GROUP BY GROUPING SET(DNAME, JOB)

= GROUP BY DNAME

UNION ALL

GROUP BY JOB


GROUP BY CUBE(DNAME,JOB)

= GROUP BY DNAME, JOB

UNION ALL

GROUP BY DNAME

UNION ALL

GROUP BY JOB

UNION ALL

모든 집합



10번. 아래 쿼리 중 결과값이 다른 하나는?



1) 
SELECT DNAME,JOB,
       COUNT(*) "Total Empl",
       SUM(SAL) "Total Sal"
FROM SCOTT.EMP  A,
     SCOTT.DEPT B
WHERE A.DEPTNO = B.DEPTNO
GROUP BY ROLLUP(DNAME,JOB)
ORDER BY DNAME,JOB;

2) 
SELECT DNAME,JOB,
       COUNT(*) "Total Empl",
       SUM(SAL) "Total Sal"
FROM SCOTT.EMP  A,
     SCOTT.DEPT B
WHERE A.DEPTNO = B.DEPTNO
GROUP BY DNAME,JOB
UNION ALL
SELECT DNAME,'' AS JOB,
       COUNT(*) "Total Empl",
       SUM(SAL) "Total Sal"
FROM SCOTT.EMP  A,
     SCOTT.DEPT B
WHERE A.DEPTNO = B.DEPTNO
GROUP BY DNAME
UNION ALL
SELECT '' AS DNAME,'' AS JOB,
       COUNT(*) "Total Empl",
       SUM(SAL) "Total Sal"
FROM SCOTT.EMP  A,
     SCOTT.DEPT B
WHERE A.DEPTNO = B.DEPTNO
ORDER BY 1,2;


3)
SELECT DNAME,JOB,
       COUNT(*) "Total Empl",
       SUM(SAL) "Total Sal"
FROM SCOTT.EMP  A,
     SCOTT.DEPT B
WHERE A.DEPTNO = B.DEPTNO
GROUP BY GROUPING SETS( (DNAME,JOB),DNAME,NULL)
ORDER BY DNAME,JOB;

4) (*)
SELECT DNAME,JOB,
       COUNT(*) "Total Empl",
       SUM(SAL) "Total Sal"
FROM SCOTT.EMP  A,
     SCOTT.DEPT B
WHERE A.DEPTNO = B.DEPTNO
GROUP BY CUBE(DNAME,JOB)
ORDER BY DNAME,JOB;


11번. 다음의 SQL을 표준 ANSI SQL로 알맞게 바꾼것은?

단, 조인 조건과 조회 조건은 분리한다.


SELECT *
FROM SCOTT.EMP A,
     SCOTT.DEPT B
WHERE A.DEPTNO = B.DEPTNO
AND B.DNAME = 'SALES'

1) 
SELECT * 
FROM SCOTT.EMP A LEFT OUTER JOIN SCOTT.DEPT B
     ON ( A.DEPTNO = B.DEPTNO
         AND B.DNAME ='SALES')
WHERE 1=1;
        
2) 
SELECT * 
FROM SCOTT.EMP A RIGHT OUTER JOIN SCOTT.DEPT B
     ON ( A.DEPTNO = B.DEPTNO
         AND B.DNAME ='SALES')
WHERE 1=1;

3) 
SELECT * 
FROM SCOTT.EMP A INNER JOIN SCOTT.DEPT B
     ON ( A.DEPTNO = B.DEPTNO
         AND B.DNAME ='SALES')
WHERE 1=1;

4) 
SELECT * 
FROM SCOTT.EMP A INNER JOIN SCOTT.DEPT B
     ON A.DEPTNO = B.DEPTNO
WHERE 1=1
AND B.DNAME ='SALES';



12번. 아래 VIEW에 대한 설명 중 가장 올바르지 않은 것은?

1) 독립성 : 테이블 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 된다.

2) 편리성 : 복잡한 질의를 뷰로 생성함으로써 관련 질의를 단순하게 작성할 수 있다. 또한, 해당 형태의 SQL문을 자주 사용할 때 뷰를 이용하면 편리하게 사용할 수 있다.

3) 물리성 : 실제 데이터를 가지고 있어서 무리적인 관리가 가능하다( *)

4) 보안성 : 직원의 급여정보와 같이 숨기고 싶은 정보가 존재한다면, 뷰를 생성할 때 해당 칼럼을 빼고 생성함으로써 사용자에게 정보를 감출 수 있다.


*INSERT 구문은 IDENTITY 문제 또는 CHECK문제가 주로 나옴


사전지식

* SQL SERVER : IDENTITY [ ( seed, increment) ]

- SEED : 첫번째 행이 입력될 때의 시작 값

- 증가되는 값


13. 보기의 테이블 TAB_A, TAB_B에 INSERT를 한 결과로 알맞은 것은?


TABLE TAB_A
A IDENTITY (1,1)

TABLE TAB_B
A CHECK (A < 5)

INSERT INTO TAB_A VALUE (....)
INSERT INTO TAB_A VALUE (....)

INSERT INTO TAB_B VALUE (....)
INSERT INTO TAB_B VALUE (....)

1) 
1 1 
2 2

2) 
1 1
2 2

...


14. 조인에 대한 설명 중 Hash Join에 대한 특성으로 부적절한 것 2개를 고르시오.


1) 각 테이블에 INDEX가 반드시 필요한 것은 아니다.

2) 일반적으로 작은 테이블을 MEMORY에 올리는 선행 테이블로 사용한다.

3) Non Equal Join이 가능하다 (비동등) (*)

4) 조인을 위해 사전 소트 작업이 필요하다. (*)


15. 아래의 실행 계획을 올바르게 설명한 것은?


-----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=ALL_ROWS (Cost=7 Card=9 Bytes=1K)
   1    0   HASH JOIN (Cost=7 Card=9 Bytes=1K)
   2    1     TABLE ACCESS (FULL) OF 'SCOTT.DEPT' (TABLE) (Cost=3 Card=1 Bytes=30)
   3    1     VIEW (Cost=3 Card=9 Bytes=783)
   4    3       COUNT (STOPKEY)
   5    4         TABLE ACCESS (FULL) OF 'SCOTT.EMP' (TABLE) (Cost=3 Card=14 Bytes=1K)
-----------------------------------------------------------

Predicate information (identified by operation id):
-----------------------------------------------------------
   1 - access("A"."DEPTNO"="B"."DEPTNO")
   2 - filter("B"."DNAME"='SALES')
   4 - filter(ROWNUM<10)
-----------------------------------------------------------

1) EMP TABLE 에 대한 행제한 구문이 있다 (*)
2) EMP TABLE 과 DEPT TABLE 은 OUTER JOIN 으로 수행되고 있다
3) EMP TABLE 과 DEPT TABLE 에서 선행 테이블은 EMP TABLE 이다
4) DEPT TABLE 은 별도의 조건이 없어 FULL SCAN 을 하고 있다




16번. 아래의 SQL에 대해서 실행 순서를 올바르게 나열한 것은?


SELECT DEPTNO, COUNT(EMPO)

FROM SCOTT,EMP

WHERE SAL >=500

GROUP BY DEPTNO

HAVING COUNT(EMPNO) >2

ORDER BY DEPTNO;


1) FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY (*)
2) FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY -> SELECT
3) FROM -> WHERE -> HAVING -> GROUP BY -> SELECT -> ORDER BY
4) FROM -> WHERE -> GROUP BY -> SELECT -> HAVING -> ORDER BY


사전 지식
* 문자를 숫자형으로 형 변환
* 예외적으로 LIKE의 경우 COL을 무조건 형변환함. 숫자를 문자로 변환함

17번. 아래와 같이 구성된 컬럼이 있을 때 인덱스를 사용할 수 있는 조건은?

TABLE TAB_A
COL1 NUMBER

1) WHERE COL1 LIKE '2%'
2) WHERE COL1 = 10 (*)
3) WHERE COL1 IS NOT NULL
4) WHERE COL1 <>10


18번. PASS


19번. 비교연산자의 어느 한쪽이 VARCHAR 유형 타입인 경우 문자 우형 비교에 대한 설명 중 가장 알맞지 않은 것은?

1) 서로 다른 문자가 나올 때 까지 비교한다.

2) 길이가 다르다면 짧은 것이 끝날 때 까지만 비교한 후에 길이가 긴것이 크다고 판단한다.

3) 길이가 같고 다른 것이 없다면 같다고 판단한다.

4) 길이가 다르다면 작은 쪽에 SPACE를 추가하여 길이를 같게 한 후 비교한다(*)


20번. 아래의 SQL에 대해서 결과 값이 다른 것은?



1) SELECT CONCAT ( 'RDBMS', 'SQL') FROM DUAL;

2) SELECT 'RDBMS' || 'SQL' FROM DAUL;

3) SELECT 'RDBMS' + 'SQL' FROM DAUL;

4) SELECT 'RDBMS' & 'SQL' FROM DAUL; (*)


사전지식

* TOP (Expression) [PERCENT] [WITH TIES]

- WITH TIES : ORDER BY 조건 기준으로 TOP N의 마지막 행으로 표시되는 추가 행의 데이터가 같을 경우 N+

동일 정렬 순서 데이터를 추가 반환하도록 지정하는 옵션(마지막 기준 공통일 경우 모두 출력)



21번. 아래의 ORACLE SQL을 SQL SERVER SQL로 전환한 것 중 가장 알맞은것은?


SELECT ENAME, SAL
FROM (SELECT ENAME, SAL
      FROM SCOTT.EMP
      ORDER BY SAL DESC)
WHERE ROWNUM < 4 ;


1) 
SELECT TOP(4) ENAME,SAL
FROM SCOTT.EMP
ORDER BY SAL DESC


2) (*)
SELECT TOP(3) ENAME,SAL
FROM SCOTT.EMP
ORDER BY SAL DESC

3)
SELECT TOP(4) WITH TIES  ENAME,SAL
FROM SCOTT.EMP
ORDER BY SAL DESC

4)
SELECT TOP(3) WITH TIES  ENAME,SAL
FROM SCOTT.EMP
ORDER BY SAL DESC




22번. 아래의 ANSI JOIN SQL에서 가장 올바르지 않은 것은?


1) 

SELECT EMP.DEPTNO, EMPNO, ENAME, DNAME

FROM EMP INNER JOIN DEPT

ON EMP.DEPTNO = DEPT.DEPTNO;


2) (*)

 SELECT EMP.DEPTNO, EMPNO, ENAME, DNAME

FROM EMP NATURAL JOIN DEPT;


* ERROR : NATURAL JOIN 에서 사용된 열은 식별자를 가질 수 없음


3)

SELECT *

FROM DEPT JOIN DEPT_TEMP

USING (DEPTNO);


4)

SELECT E.EMPNO, E.ENAME, E.DEPTNO, D.DNAME

FROM EMP E INNER JOIN DEPT D
ON (E.DPETNO = D.DEPTNO);



23번. 다음 중 엔터티의 종류가 아닌것은?

1)교수

2)학생

3)청약자 (*) ---> 청약자 선택하신 분이 1과목 만점 나옴

4)수강 --->대다수 수강이라고 선택했으나 위의 청약자가 답인것으로 확인됨.



24번. 아래의 계층형 SQL에서 리프 데이터면 1, 그렇지 않으면 0을 출력하고 싶을 때 사용하는 키워드로 알맞은 것은?


SELECT LEVEL, LPAD(' ',4 * (LEVEL-1) ) || EMPNO,

MGR, (    ) AS ISLEAF

FROM SCOTT.EMP

START WITH MGR IS NULL

CONNECT BY PRIOR EMPNO = MGR;


1) CONNECT_BY_ISLEAF

2) CONNECT BY_ISCYCLE

3) SYS_CONNECT_BY_PATH

4) CONNECT_BY_ROOT


25번. 아래와 같은 테이블 TAB1, TAB2 가 있을 때 각각의 건수를 알맞게 나열한 것은?


TAB1 
COL1 COL2 KEY1
---------------
BBB  123  B
DDD  222  C
EEE  233  D
FFF  143  E

TAB2
KEY2 COL1 COL2
---------------
A    10   BC
B    10   CD
C    10   DE

TAB1.KEY1 JOIN TAB2.KEY2 에 대한 조인 후 결과 건수


INNER JOIN, TAB1 LEFT OUTER JOIN, TAB1 RIGHT OUTER JOIN, FULL OUTER JOIN, CROSS JOIN


1) 2, 4, 3, 5, 12 (*)
2) 2, 4, 5, 3, 12
3) 2, 3, 4, 5, 12
4) 2, 4, 3, 7, 12     
     

CREATE TABLE TAB1(
    COL1 varchar2(10),
    COL2 varchar2(10),
    KEY1 varchar(1)
    );
    
CREATE TABLE TAB2(
    KEY2 varchar(1),
    COL1 number(10),
    COL2 VARCHAR2(10)
    );
    
INSERT INTO TAB1 VALUES('bbb','123','B');
INSERT INTO TAB1 VALUES('ddd','222','C');
INSERT INTO TAB1 VALUES('eee','233','D');
INSERT INTO TAB1 VALUES('fff','143','E');
DROP TABLE TAB1;

SELECT * FROM TAB1;

INSERT INTO TAB2 VALUES('A','10','BC');
INSERT INTO TAB2 VALUES('B','10','CD');
INSERT INTO TAB2 VALUES('C','10','DE');


SELECT X.KEY1, Y.KEY2
    FROM TAB1 X LEFT OUTER JOIN TAB2 Y
        ON (X.KEY1 = Y.KEY2);
        
SELECT X.KEY1, Y.KEY2
    FROM TAB1 X INNER JOIN TAB2 Y
        ON(X.KEY1 = Y.KEY2);
        
SELECT X.KEY1, Y.KEY2
    FROM TAB1 X RIGHT OUTER JOIN TAB2 Y
        ON(X.KEY1 = Y.KEY2);

SELECT X.KEY1, Y.KEY2
    FROM TAB1 X CROSS JOIN TAB2 Y;
    
SELECT X.KEY1, Y.KEY2
    FROM TAB1 X FULL OUTER JOIN TAB2 Y
        ON(X.KEY1 = Y.KEY2);


26번. 아래의 WINDOW FUNCTION을 사용한 SQL 중 가장 올바르지 않은 것은?


1) SUM(SAL) OVER()
2) SUM(SAL) OVER(PARTITION BY JOB ORDER BY EMPNO ROWS BETWEEN UNBOUNDED PRECEDING  AND UNBOUNDED FOLLOWING) SAL1
3) SUM(SAL) OVER(PARTITION BY JOB ORDER BY JOB RANGE BETWEEN UNBOUNDED PRECEDING  AND CURRENT ROW) SAL2
4) SUM(SAL) OVER(PARTITION BY JOB ORDER BY EMPNO ROWS BETWEEN UNBOUNDED PRECEDING  AND UNBOUNDED PRECEDING) SAL3 (*)

27번. SQL 구문에서 FROM 절에 대한 설명 중 가장 올바르지 않은것은?


1) FROM 절에 ALIAS 를 쓰기 위해서 AS 키워드 사용이 가능함 (*)
2) FROM 은 가장 먼저 수행됨
3) ....


28번. 아래의 SQL의 결과로 알맞은 것은?


TABLE SQLD_21_01
N1        V1         
--------- ---------- 
        1 A         
        2           
        3 B         
        4 C       

TABLE SQLD_21_02
N1        V1         
--------- ---------- 
        1 A         
        2           
        3 B         


SELECT SUM(A.N1) 
FROM SQLD_21_01 A,
     SQLD_21_02 B
WHERE A.V1 <> B.V1;


SELECT * 
FROM SQLD_21_01 A,
     SQLD_21_02 B

1) 12 (*)
2) 30
3) 10
4)  8


29번. 서브쿼리에 대한 설명 중 가장 올바르지 않은 것은?


1) 서브 쿼리는 괄호로 감싸서 사용한다.

2) 서브쿼리는 비교 연산자와 함께 사용 가능하다.

3) 메인 쿼리는 서브쿼리의 컬럼을 쓸 수 있다. (*) (X) 없다.

4) 서브 쿼리는 SELECT 절, FROM 절, WHERE절 등에서 사용 가능하다. 



30번. 유저와 권한 중 권한에 대한 설명 중 가장 올바르지 않은 것은?


1) 사용자가 실행하는 모든 DDL 문장은 그에 해당하는 적절한 권한이 있어야만 문장을 실행 할 수 있다.

2) DBA 권한을 가진 유저만이 권한을 부여할 수 있다.(*)

3) 테이블의 소유자는 해당 테이블의 DML 권한을 다른 유저에게 부여 할 수 있다.

4) 권한 부여를 편리하게 관리하기 위해 만들어진 권한의 집합인 ROLE이 있다.


단답형


1. 아래와 같은 테이블이 있을때 주어진 조인 SQL구문을 완성하시오.


TABLE SQLD_21_01
N1        V1         
--------- ---------- 
        1 a         
        2           
        3 b         
        4 c       

TABLE SQLD_21_02
N1        V1         
--------- ---------- 
        1 A         
        2           
        3 B         

SELECT A.*
FROM SQLD_21_01 A,
     SQLD_21_02 B
WHERE (      )(A.V1) LIKE B.V1

-> UPPER


만약 주어진 테이블의 데이터가 아래와 같을 경우는 빈칸 제거가 답임

TABLE SQLD_21_01
N1        V1         
--------- ---------- 
        1 A (스페이스 뒤에 있음)         
        2           
        3 B (스페이스 뒤에 있음)        
        4 C (스페이스 뒤에 있음)      

TABLE SQLD_21_02
N1        V1         
--------- ---------- 
        1 A         
        2           
        3 B         

SELECT A.*
FROM SQLD_21_01 A,
     SQLD_21_02 B
WHERE (      )(A.V1) LIKE B.V1

-> TRIM


2. EMP테이블은 사원과 매니저의 정보를 담은 계층형 데이터를 포함한 테이블이다.

매너지부터 사원까지 결제 단계가 가장 많은 레벨을 구할려고 할 때 빈칸을 완성하시오.



SELECT (        ) 
FROM SCOTT.EMP
START WITH MGR IS NULL
CONNECT BY PRIOR EMPNO = MGR;

-> MAX(LEVEL)


3. 아래의 NOT EXISTS 구문을 동일한 결과를 출력하는 SQL로 변경할 때 빈칸을 완성하시오.


SELECT ...
FROM 급여이력 S
WHERE NOT EXISTS (SELECT 'X'
                  FROM 사원 P
                  WHERE P.사원번호 = S.사원번호)
                  
SELECT ....
FROM 급여이력 S LEFT OUTER JOIN 사원 P
     ON (S.사원번호 = P.사원번호)
WHERE ( )


-> P.사원번호 IS NULL
*** SQLP 에서는 LEFT OUTER JOIN 부분이 빈칸으로 나온 것으로 보임

4. 아래 SQL의 출력되는 ROWS의 갯수를 구하시오.


** DNAME 의 그룹은 3, JOB 의 그룹은 5, DNAME,JOB 의 그룹은 9개가 형성됨
** GROUP BY CUBE(DNAME,JOB)
 = GROUP BY DNAME,JOB 
   UNION ALL 
   GROUP BY DNAME 
   UNION ALL 
   GROUP BY JOB
   UNION ALL
   모든 집합


SELECT DNAME,JOB,
       COUNT(*) "Total Empl",
       SUM(SAL) "Total Sal"
FROM SCOTT.EMP  A,
     SCOTT.DEPT B
WHERE A.DEPTNO = B.DEPTNO
GROUP BY CUBE(DNAME,JOB)

-> 18개


5번. 아래와 같은 SQL이 있을 때 조건절을 넣기 위한 키워드는 무엇인지 작성하시오.


SELECT *

FROM EMP
(   ) EMPID = 10;
-> WHERE



6번. 아래의 SQL의 결과로 나오는 ROWS의 수는?


TAB1 
COL1 : 1,2,3

TAB2
COL1 : 1,2,4

SELECT *
FROM TAB1 A, TAB2 B
WHERE A.COL1 <> B.COL1;

-> 7개

7번. 아래의 SQL의 출력 결과를 작성하시오.

TAB2
COL1 : 모두 Y

SELECT COUNT(*)
FROM TAB1
WHERE EXISTS (SELECT 1 FROM TAB2 WHERE TAB2.COL1 = 'X');

-> 0




'SQLD자격증 대비 > SQLD 기출문제 정리' 카테고리의 다른 글

33회 기출문제  (0) 2019.08.16
SQLD 블로그 질문 내용들  (0) 2019.08.16
SQLD 30회차 기출 문제  (0) 2019.03.10

단답형


1번.  SELECT ABS(-3.8), FLOOR(3.8), TRUNC(3.8) ROUND(3.8) FROM DUAL; 에 대한 값을 구하시오.


답 : 3.8, 3, 3, 4 



2번. 아래에서 설명하는 것은 무엇인가?


[설명]

+ 복잡한 질의를 단순하게 작성할 수 있다. 또한 해당 형태의 SQL문을 자주 사용할 때 이용하면 편리하게 사용할 수 있다.

+ 사용자에게 정보를 감출 수 있다.

+ 실제 데이터를 가지고 있지 않다.


답 : VIEW



3. 아래와 같은 데이터가 들어있는 테이블에서 아래 SQL이 수행되었을 때의 결과 건수는?

[데이터]

계층번호     상위계층번호

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

1                null

2                null

4                1

5                1

6                2

7                2

8                4

9                5

10               6

11               7


[SQL]

(SQL은 조건절 외에는 가상으로.,..)

SELECT LEVEL,

LPAD('** ', (LEVEL-1)*2,' ') || 계층번호 AS 계층트리,

계층번호,

상위계층번호

FROM SQLD_D3

START WITH 상위계층번호 IS NULL

CONNECT BY 계층 번호 = PRIOR 상위계층번호;


- 답 : 2


4번. 아래의 SQL 구문을 완성하시오.(SQL SEVER)

[SQL] (    ) DEPT (    ) VARCHAR(30) NOT NULL;


- 답 : ALTER TABLE, ALTER COLUMN

*SQL SERVER에서는 ALTER COLUMN, ORACLE에서는 MODIFY임



5번. 아래와 같은 테이블이 있을 때 모든 SQL이 수행된 이후의 결과는?

[테이블]

TABLE : SQLD_D5

COL1 VARCHAR2(30)

COL2 NUMBER


[SQL]

INSERT INTO SQLD_D5(COL1, COL2) VALUES('ABCD', NULL);

INSERT INTO SLQLD_D5(COL2,COL2) VALUES('BC',NULL);

ALTER TABLE SQLD_D5 MODIFY COL2 DEFAULT 10;

INSERT INTO SQLD_D5(COL1,COL2) VALUES('XY',NULL);

INSERT INTO SQLD_D5(COL1) VALUES('EXD');

SELECT SUM(COL2) FROM SQLD_D5;


-답 : 10

풀이) DEFAULT라는 건 값이 들어오지 않을때 그 값을 DEFAULT값으로 표시하는 것을 의미합니다.

null은 값이 없는게 아니라 정의되지 않은 값을 의미합니다. 즉, 값이 있다는 이야기이니

default 값이 들어가 이유가 없는거죠.

직접 null을 넣어준다는건 정의되지 않은 값을 넣어준다는 뜻입니다.


null로 명시를 해주면 insert해서 null로 들어갑니다. -> null로 명시하면 default값이 적용 되지 않고 null이 들어감


아무것도 쓰지 않으면(값이 들어오지 않으면) null값이 들어가는게 아니라 default가 null이라서 null이 들어간다고 보면 됩니다. 실제로 default값을 끌때 default null이라고도 하거든요

insert .. values(null)------------------>명시적인 null입력이므로 default작동 안함(값이 있으므로)

insert into tab(a) values (1) ------------------------> b컬럼에 대한 명시가 없으므로 b 컬럼에 기본 세팅인 null default가 들어감

default를 해제할 때 명령어가 default null 변경이라는 걸 생각하면 이해가 쉬울듯하네요.


6번. 테이블 생성을 위한 권한을 주기 위해 아래의 SQL을 완성하시오.

[SQL] (    ) CREATE TABLE TO USER01;

- 답 : GRANT


7번. 아래와 같은 결과가 나오도록 SQL을 작성하시오.

[결과]

회원ID    RANK        주문금액

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

B           1               450

G           2               255

F            2               255

H           3               100


[SQL]

SELECT 회원ID,

DENSE_RANK() OVER(ORDER BY(    ) ),

주문금액

FROM SQLD_D7;


-답 : 주문금액 DESC

* 주문금액으로 ORDER BY 시 동일 주문금액에 대해서 동일 등수가 매겨질 수 있음


8번. 아래의 SQL 결과를 작성하시오.

[SQL] SELECT Upper(Sqldeveloper) FROM DUAL;

-답 ㅣ SQLDEVELOPER



2과목 : SQL 기본 및 활용


1. ERD를 참고하여 아래의 SQL 중 오류가 날 수 있는 SQL을 고르시오.

[ERD]

TABLE A -------<- TABLE B / 컬럼 정보 및 데이터

-답 : ...... WHERE 문자열 컬럼 > 0

*TABLE B 의 컬럼 중 문자열 컬럼에 대해서 숫자 비교를 하는 SQL이 답임

*문자와 숫자가 만나면 문자가 숫자로 묵시적 형변환이 일어남. 해당 문자열에는 숫자 뿐만 아니라 문자가 존재함



2. ERD를 참고하여 아래의 SQL 중 오류가 날 수 있는 SQL을 고르시오.

[ERD]

TABLE A -------<-TABLE B -<-------------TABLE C

PK        A                   A,B                        C

- 답 : 서브쿼리에서 B 테이블의 A컬럼만 조인조건으로 나오는 SQL이 답임

* 단일 행을 요구하는 SQL에서 서브쿼리의 결과가 PK 중 일부 컬럼만 들어와서 다중행이 나오는 서브쿼리는 오류가 남.


3번. 아래의 결과를 보고 빈칸에 들어가는 GROUP BY 뒤의 내용을 고르시오.

[결과]

COL1        COL2            집계결과


-답 : ROLLUP(COL1,COL2)

*COL1과 COL2가 모두 NULL인 전체 집계와 COL1의 소계만 존재하므로 ROLLUP임


4번. 데이터가 주어지고 WHERE절에서 WHERE(COL1,COL2) in ((1000,'ABC'))결과로 알맞은 것은?

- 답 : 위의 조건은 COL1,COL2가 동시에 1000, 'ABC'인 것을 찾는 것으로 데이터 상 한건이 도출됨.


5번. 데이터가 주어지고 WHERE 절에서 WHERE COL1 in (1,2,NULL) 결과로 알맞은 것은?

- 답 : IN (.....) 의 NULL이 있을 경우는 COL1 IN(1,2)와 동일한 결과임

* NULL 은 비교에서 애초에 제외되며 IN(...)안에 NULL이  있어도 NULL비교는 되지 않음

 

6번. 아래의 실행계획의 순서를 바로 적은 것은?

[보기]

0-SELECT ..

1-NESTED LOOP JOIN

2-NESTED LOOP JOIN

3-TABLE ACCESS(FULL)

4-TABLE ACCESS(BY INDEX ROWID)

5-INDEX(RANGE SCAN)

6-TABLE ACCESS(BY INDEX ROWID)

7-INDEX(RANGE SCAN)


답 : 3-5-4-2-7-6-1-0


7번. SELECT nvl(count(*), 9999) from table where 1=2 의 결과 값은?

- 답 : 0

* COUNT(*) 인 경우 공집합일때 0을 반환하고 다른 집계함수의 경우는 NULL을 반환함


8번. 아래의 데이터가 있을 때 아래의 SQL에 대한 결과값은?

[데이터]

col1    col2

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

1        100

1        null

2        100

2        200

[SQL]

SELECT A,SUM(X) FROM TAB GROUP BY A;


- 답 : 1 100 / 2 300


9번. 아래와 같은 SQL이 순서대로 수행되고 난 후 결과 값으로 알맞은 것은?

[SQL]

(1) INSERT INTO TAB1 VALUES (1);

(2) INSERT INTO TAB1 VALUES (2);

(3) SAVEPOINT SV1;

(4) UPDATE TAB1 SET COL1=4 WHERE COL1=2;

(5) SAVEPOINT SV1;

(6) DELETE TAB1 WHERE COL1 >=2;

(7) ROLLBACK TO SV1;

(8) INSERT INTO TAB1 VALUES(3);

(9) SELECT MAX(COL1) FROM TAB1;

- 답 : 4

*SV1이 같을 경우 가장 아래에 있는 쪽으로 ROLLBACK됨.


10번. TRIGGER에 대한 설명중 부적절한 것은? (******)

- 답 : DELETE ON TRIGGER 의 경우 

      : OLD는 삭제 전 데이터를, 

: NEW는 삭제 후 데이터를 나타낸다. + NULL을 가지므로 해당 보기가 답이 아닐 수 있음


11번. SELECT 결과가 NULL이 아닌 경우는?

[보기]

+ COALESCE('AB','BC','CD')

+ CASE WHEN 'AB' THEN 'BC' ELSE 'CD' END...

+ DECODE('AB','CD','DE')

+ NULLIF('AB','CD')

-답 : COALESCE('AB','BC','CD')


"COALESCE 함수는 인수의 숫자가 한정되어 있지 않으며, 임의의 개수 EXPR에서 NULL이 아닌 최초의 EXPR을 나타낸다.

만일 모든 EXPR이 NULL이라면 NULL를 리턴한다."

"NVL/ISNULL"

"NULLIF함수는 EXPR1이 EXPR2와 같으면 NULL을, 같지 않으면 EXPR1을 리턴한다. 특정 값을 NULL로 대체 하는 경우에 유용하게 사용할 수 있다. NULLIF(EXPR1,EXPR2)"


12번. 아래의 데이터가 있을 떄 SQL이 수행된 결과로 옳은 것은?

[데이터]

COL1         COL2

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

100            100

NULL           60

NULL           NULL


[SQL]

SELECT COALESCE(COL1, COL2*50, 50) FROM TAB1;


-답 : 100    / 3000    / 50



13번. DML,DCL,DDL이 잘못 짝지워진 것은?

-답 : DCL : SELECT

* SELECT 는 DML임


14번. SQL명령어중 DCL인 것은?

[보기]

+ UPDATE, GRANT, SELECT, COMMIT

-답 : GRANT


15번. 문자열이 들어갈때 빈 공간을 채우는 형태의 데이터 타입은?

[보기]

+VARCHAR2, CHAR, DATE, NUMBER

-답 : CHAR


16.번 아래의 SQL과 같은 SQL은? (TOP() 과 ORACLE의 ROWNUM, ORDER BY SQL에 관련된 문제)

[SQL]

SELECT TOP(10) ENAME,SAL

FROM EMP

ORDER BY SAL;

- 답 : 보기에서 ORDER BY 구문과 ROWNUM이 같은 레벨에 없는 SQL

* SELECT .. FROM (SELECT ...)

-> 같은 SELECT 내에 있는 것을 같은 레벨이라 함


*답 예시

SELECT ...

FROM (SELECT ... FROM ... ORDER BY)
WHERE ROWNUM <=10


17번. 아래의 계층형 SQL 수행했을 때 아래와 같은 결과가 나올때 (    )을 채우시오.

[SQL]

SELECT LEVEL,

LPAD('** ',(LEVEL-1)*2,' ') || 사원 AS 사원트리,

관리자,

사원

FROM SQLD_17

START WITH (    )

CONNECT BY PRIOR(    )


-답 : 관리자 IS NULL, 사원 = 관리자


18번. SQL SET OPERATOR에서 중복 제거를 위해 정렬 작업을 하지 않는 집합연산자는?

답 : UNION ALL


19번. SQL 조인 방식 아래의 설명을 만족하는 조인은?

[설명]

+ 대용량 데이터를 정렬하여 조인한다.

+ 동등조인, 비동등 조인에서 다 사용 가능하다

+ 기타 등등

- 답 : Sort Merge JOIN


20번. 아래 ERD를 참고하여 모든 회원의 일자별 총 주문금액을 구하는 SQL문 중 잘못된 SQL은?

[ERD]

테이블A --------o <- 테이블 B -> o -------테이블 C

*optional관계로 연결되어 있음

[보기]

+스칼라 서브쿼리로 합 구하는 SQL

+ OUTER JOIN으로 합 구하는 SQL

+ INNER JOIN으로 합 구하는 SQL

+ UNION ALL로 위는 EXIST, 아래는 JOIN형태


-답 : INNER JOIN 형태 SQL

* 모든 회원을 구하라고 했으나 일부 INNER JOIN인 경우 일부 회원이 누락됨.


21번. 아래의 SQL 의 로우의 건수로 올바른 것은?

[데이터]

TABLE A

COL1 COL2

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

1        2

1        2

1        3


TABLE B

COL1 COL2

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

1        2

1        4

1        5


[SQL]

SELECT DISTINCT COL1, COL2 FROM TAB_A         --> 질문 DISTINCT 할때 하나로 만드나 1    2 이부분 정답

UNION ALL

SELECT COL1, COL2 FROM TAB_B;


-답 : 5건 (실제 문제에선 9건일듯)


22번. 아래의 데이터가 있을 때 다음 SQL의 로우의 건수로 맞는 것은?

[데이터]

...

[SQL]

SELECT COUNT(*)

FROM TAB_A, TAB_B

WHERE TAB_A.COL1 = TAB_B.COL1

AND NVL(A, COL2, -1) = NVL(B.COL2, -1)

AND NVL(A, COL3, -1) = NVL(B.COL3, -1)


-답 : NVL(A,B) A가 NULL인 경우 B, NULL이 아닌 경우 A인 데이터를 구하면 됨.

* INNER JOIN 이므로 JOIN 조건을 만족하는 로우만 가져와서 조건을 수행해야 함


23번. 아래와 같은 테이블 구조를 가졌을 때 UNIQUE INDEX SCAN을 할 수 없는 것은?

[구조]

+ PK : KEY1, KEY2


[보기] SELECT ..

+ 모두 사용할 수 없다.

+ WHERE KEY1 =1 AND KEY2 = 2

+ WHERE (KEY1,KEY2) IN( (1,2) )

+ WHERE KEY1 = 1

- 답 : WHERE KEY1= 1만 있는 것


-->  2,3번은 unique index scan을 할 수 있으니까 1번이 안되고

4번은 PK의 구성칼럼중 일부만이 들어올 경우는 unique index scan이 아닌 range scan이 됩니다.

이거 프라이머리키 KEY1 만해서 Unique Index Scan 인건가요????

PK가 두개 있는데 하나만 where써서 그렇습니다. PK가 여러개면 전부해야지 unique index scan 사용가능합니다.


24번. 아래의 ERD가 있을때, 아래 SQL 대로 수행될 경우 오류가 발생하는 구간은?

[ERD]

TABLE 고객 ------------o <- TABLE 주문

고객ID                                주문ID

고객명                                고객ID

상품

+ PRIMARY KEY : 고객(고객ID)

+ 주문(고객ID) REFERENCES 고객(고객ID)

[보기]

+ INSERT INTO 고객 VALUES ('C001', 'AAA');

+ INSERT INTO 주문 VALUES ('O001', 'C001', 'XXX');

+ UPDATE 주문 SET 고객ID = NULL WHERE 주문ID = 'O001';

+ INSERT INTO 주문 VALUES ('O002','C002','YYY');


-답 : 4번째 ('C002' 고객ID가 주문에만 있을 수 없음)


25번. CROSS JOIN과 NATURAL JOIN에 대한 차이점에 대해서 잘 못 설명한 것은?

- 답 : CROSS JOIN과 NATURAL JOIN은 WHERE절에서 조건을 걸수 없다는 내용


"NATURE JOIN의 경우 WHERE절에서 JOIN조건을 추가할 수 없지만, CROSS JOIN의 경우 WHERE절에 JOIN조건을 추가할 수 있다.

그러나, 이 경우는 CROSS JOIN이 아니라 INNER JOIN과 같은 결과를 얻기 때문에 CROSS JOIN을 사용하는 의미가 없어지므로, 권고하지 않는다."


26번. 아래와 같이 PK 컬럼이 되어 있을 때 가장 적합한 파티셔닝 방법은 무엇인가? -->이거 안배웠던 내용

[테이블]

+ PK : 지점,코드 ... 등등

+ 데이터는 대용량임

[보기]

+ RANGE, LIST, HASH, INTERVAL

-답 : LIST(PK컬럼의 형태가 지점,코드 등이므로)


27번. 아래 2개 테이블을 특정 JOIN후 나타난 결과이다. 어떤 조인인지 고르시오.

[데이터]

TABLE A

COL1    COL2

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

1            2

2            2

3            3


TABLE B

COL1     COL2

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

1            2

2            4

4            5


[SQL 결과]

SELECT *

FROM TAB_A(    ) TAB_B


A.COL1, A.COL2, B.COL1, B.COL2

1            2        1            2

2            2        2            4

NULL     NULL    4            5


-답 : RIGHT OUTER JOIN


28번. 함수를 이용해 파티션별 윈도우에서 가장 먼저 나온 값을 구하는 WINDOW FUNCTION을 고르시오.

- 답 : FIRST_VALUE


29번. 아래의 SQL이 순차적으로 수행된 후의 결과로 올바른것은?

[SQL]

CREATE TABLE SQLD_29 (N1 NUMBER);

INSERT INTO SQLD_29 VALUES(1);

INSERT INTO SQLD_29 VALUES(2);

CREATE TABLE TMP_SQLD_29 (N1 NUMBER);

INSERT INTO TMP_SQLD_29 VALUES(1);

TRUNCATE TABLE TMP_SQLD_29;

ROLLBACK;

COMMIT;

SELECT SUM(N1) FROM SQLD_29;


-답 : 3 (CREATE, TRUNCATE 같은 DDL은 묵시적 COMMIT을 수행함)


30번. 아래와 같은 데이터가 있을 때 SQL의 실행 결과로 올바른 것은?

[데이터] TABLE_A

COL1    COL2

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

1        10

2        20

3        NULL


[SQL]

SELECT AVG(NVL(COL2,0)) AS AVG_COL FROM TABLE_A;


-답 : 10 (NULL이 0으로 바뀌면서 모수가 3이 됨)


31번. 아래의 SQL에서 ORDERBY로 사용할 수 없는 것은?

[SQL]

SELECT JOB, COUNT(*) AS CNT

FROM TABLE_A

GROUP BY JOB;

[보기]

+ ORDER BY JOB
+ ORDER BY CNT DESC

+ ORDER BY COUNT(*)

+ ORDER BY 3


- 답 : 4번째 (ORDER BY 3), 컬럼이 2개 임


32번. 아래의 SQL이 수행된 후 T1의 건수는?

[데이터]

TABLE : T1

COL1    COL2    COL3

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

A        X            1

B        Y            2

C        Z            3


TABLE : T2

COL1    COL2    COL3

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

A           X            1

B           Y            2

C            Z            3

D            가           4

E              나          5


[SQL]

MERGE INTO T1

USING T2

ON(T1.COL1 = T2.COL1)

WHEN MATCHED THEN

UPDATE SET T1.COL3 = 4

WHERE T1.COL3 = 2

DELETE WHERE T1.COL3 <=2

WHEN NOT MATCHED THEN

INSERT INTO(T1.COL1, T1.COL2, T1.COL3) VALUES(T2.COL1,T2.COL2,T3.COL3);


-답 : 5건




1과목



1번. 도메인의 특징에 대해서 설명한 후 보기에서 고르는 문제

- 답 : 도메인


2번. 반정규화에 대한 설명 중 부적절한 것은?

- 답 : 반정규화 전에 테이블 추가(통계 테이블 추가, 중복 테이블 추가, 이력 테이블 추가, 부분 테이블 추가)를 통해 반정규화를 하지 않음. (X)

* 해당 내용은 반정규화기법임.


3번. 반정규화 대상이 아닌것은?

- 답 : Sorting, Order by 하는 프로세스


- 자주 사용되는 테이블에 접근(Access)하는 프로세스의 수가 많고 항상 일정한 범위만을 조회하는 경우에 반정규화를 검토한다.

- 테이블에 대량의 데이터가 있고 대량의 데이터 범위를 자주 처리하는 경우에 처리범위를 일정하게 줄이지 않으면 성능을 보장할 수 없을 경우에 반정규화를 검토한다.

- 통계성 프로세스에 의해 통계 정보를 필요로 할 때 별도의 통계테이블(반정규화 테이블)을 생성한다.

- 테이블에 지나치게 많은 조인(JOIN)이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 반정규화를 검토한다.


4번. 발생시점에 따른 엔터티 분류에 의한 중심 엔터티가 아닌 것은?

[보기]

+ 매출, 계약, 사원, 주문

- 답 : 사원(기본 엔터티임)


5번. 발생시점에 따른 엔터티 분류에 대해서 아래의 내용중 잘못 짝지워진것은?

[보기]

+ 기본/키 엔터티 : 조직 사원

+ 기본/키 엔터티 : ???

+ 중심 엔터티 : 상품, 주문상품

+ ...

- 답 : 중심엔터티 : 상품, 주문상품 -> 상품은 기본 엔터티임


7번. 테이블 3개(옵션널 관계) 식별자 관계 3개 테이블에 대한 설명 중 부적절한 것은? (** 답이 두개로 보임)

테이블A -------------o <- 테이블B -----------o <- 테이블C

식별자 관계                   식별자 관계


[보기]

+ B를 제외하고 A와 C는 카테시안 조인이 된다.

+ 조인 최소 조건은 3개이다.

+ B, C 에서 C의 데이터는 모두 B에 존재하므로 Outer Join을 안해도 된다.

+ B는 A의 데이터를 모두 포함하지 않는다.

- 답 : 조인 최소 조건은 N개 테이블일 경우 n-1개이다(2개)

* A,C는 식별자 관계이므로 카테시안 조인이 되지 않을 수 있다.


8번. 식별자에 대한 설명으로 잘못된것은?

- 답 : 주식별자 / 보조 식별자 설명에 대해서 주식별자가 대표성을 띌수 없다는 내용


9번. 분산 데이터베이스의 특징 중 저장 장소 명시가 불필요 하다는 특성은 무엇일까?

[보기]

 + 분할 투명성, 위치 투명성, 지역사상 투명성, 병행 투명성

- 답 : 위치투명성



10번. 아래의 설명 중 바른것은?(ROW Migration 과 Row Chaining에 대한 설명)

- 답 : ROW Chaining에 대한 설명이 맞음


"많은 칼럼은 로우 체이닝과 로우 마이그레이션이 많아지게 되어 성능이 저하된다. 로우 길이가 너무 길어서 데이터 블록 하나에 데이터가

모두 저장되지 않고 두 개 이상의 블록에 걸쳐 하나의 로우가 저장되어 있는 형태가 로우체이닝(Row Chaining)현상이다.


또한, 로우 마이그레이션(Row Migration)은 데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고

다른 블록의 빈 공간을 찾아 저장하는 방식이다. 


로우 체이닝과 로우 마이그레이션이 발생하여 많은 블록에 데이터가 저장되면 데이터베이스

메모리에서 디스크와 I/O 입출력이 발생할 때 불필요하게 I/O가 많이 발생하여 성능이 저하된다."

'SQLD자격증 대비 > SQLD 기출문제 정리' 카테고리의 다른 글

33회 기출문제  (0) 2019.08.16
SQLD 블로그 질문 내용들  (0) 2019.08.16
SQLD 21회 기출문제  (0) 2019.03.12

+ Recent posts