본문 바로가기
자격증/SQLD

[SQLD 30회 2과목] 문제공유 + 자세한 해설 (비전공자도 가능)

by 0.0.0. 2020. 9. 1.
반응형

문제와 정답은 하단에 있습니다!

도움되셨다면 공감, 댓글 부탁드려요!

 

2과목은 16문제 이상 맞춰야 과락을 피할 수 있습니다!

 

30회 단답형 해설을 여기!

https://ori-gina-l.tistory.com/17?category=891355 

 

[SQLD 30회 단답형] 문제공유 + 자세한 해설 (비전공자도 가능)

문제는 아래 링크, 정답은 하단에 있습니다! 도움되셨다면 공감♥, 댓글 부탁드려요! 2과목은 16문제 이상 맞춰야 과락을 피할 수 있습니다! 1과목 해설을 여기! ori-gina-l.tistory.com/15 [SQLD 30회 1

ori-gina-l.tistory.com

 

21회 해설은 여기있습니다!

https://ori-gina-l.tistory.com/21

 

[SQLD 21회 1과목] 문제공유 + 자세한 해설 (비전공자도 가능)

문제와 정답은 하단에 있습니다! 도움되셨다면 공감♥, 댓글 부탁드려요! 1과목은 4문제 이상 맞춰야 과락을 피할 수 있습니다^^ 1. SELECT A.* FROM HR.EMPLOYEES A,  HR.EMPLOYEES B WHERE 1=1 AND A..

ori-gina-l.tistory.com

 

34, 35회 해설은 여기서 봐주세요!

https://ori-gina-l.tistory.com/category/%EC%9E%90%EA%B2%A9%EC%A6%9D/SQLD

 

'자격증/SQLD' 카테고리의 글 목록

 

ori-gina-l.tistory.com

 

 

 

12번 이해하는 고수님은 알려주세요! 저는 모르겠네용...

 

 

11.

SQLD_30_11_01
COL1 VARCHAR2(30)
COL2 NUMBER

 

1) SELECT A.COL1, A.COL2
    FROM SQLD_30_11_01 A
    WHERE A.COL1 > 0;

==> VARCHAR : 가변 문자열인데 1)에서는 비교연산하려함

 

2) SELECT A.COL1, B.COL4 
    FROM SQLD_30_11_01 A

        INNER JOIN SQLD_30_11_02 B

                ON (A.COL1 = B.COL1)
    WHERE B.COL3 > 'X';

==> FROM A테이블에서 INNER JOIN함(같은 것만 남기기)

       A.COL1이랑 B.COL1은 같으니 다 남음

==> WHERE B.COL3 > 'X' 는 문자열 연산, X문자열 보다 큰것만 남김

       A~, D~는 X보다 작은 문자열이고, XY는 X가 동일하지만 알파벳이 추가되있어 더 기니까 선택

       ==> (3, XY, 15) 선택

 

3) SELECT COUNT(*)
    FROM SQLD_30_11_01 A

        WHERE EXISTS (SELECT 'X'
                       FROM SQLD_30_11_02 B

                       WHERE A.COL2 = B.COL4);

==> A 테이블 선택

==> EXISTS 1개라도 존재하냐, B테이블 설정하고, A.COL2=B.COL4가 같은 것이ㅡ> 없음

       (SELECT 'X'는 그냥 무시해도 괜찮아용)

==> NULL값 출력하겠죠?

 

 

4) SELECT SUM(A.COL2) 
    FROM SQLD_30_11_01 A

        INNER JOIN SQLD_30_11_02 B

                ON (A.COL1 = B.COL1)
    WHERE B.COL4 > '1';

==> INNER JOIN해서 전체선택

==> B.COL.1 데이터와 문자 1 비교연산

       문자가 유효한 숫자형태기 때문에 숫자로 형변환, 비교연산 진행

 

12.

단일행 비교 연산자 : =,<,>,<>, IN, ALL, ANY, SOME , 반드시 1건 이하 반환
다중 행 비교 연산자 : IN, ALL, ANY, SOME, 2건 이상 반환

1) SELECT A.COL1,

          (SELECT COL3 FROM SQLD_30_12_03 B

           WHERE A.COL1 = B.COL1) AS B_COL3
    FROM SQLD_30_12_01 A

    WHERE A.COL2 > 10;

==> A테이블 선택, A.COL2>10이니 A 전체

==> A.COL1=B.COL1 에서 A가 2개 중복되서 오류

 

2) SELECT A.COL1,

          (SELECT COL5 FROM SQLD_30_12_03 B

           WHERE A.COL4 = B.COL4) AS B_COL3
    FROM SQLD_30_12_02 A

    WHERE A.COL4 > 0;

==> A 테이블에서, A.COL4>0 인 경우, 마지막 행 빼고 모두 선택

==> B테이블 선택하고, A.COL4=B.COL4 인 경우 COL5 선택, COL5 모두 선택

==> 1~A까지 A테이블에서 최종선택인데

       ( ) 안은 서브쿼리기 때문에 1개씩 반환이라 오류X

 

3) SELECT A.COL1, B.COL3
    FROM SQLD_30_12_01 A

        INNER JOIN SQLD_30_12_02 B

                ON (A.COL1 = B.COL1)

        INNER JOIN SQLD_30_12_03 C

                ON (B.COL4 = C.COL4)

     WHERE C.COL4 > 5

     AND A.COL2 > 10;

==> A테이블 선택하고, B테이블 선택, A.COL1 = B.COL1

 

13.

JOB_ID에 대한 합과, 총합을 구하기 때문에

==> ROLLUP(JOB_ID, MANAGER_ID) 

       인수 순서 바뀌면 값 달라짐!!!

       (CUBE였으면 JOB_ID합 MANAGER_ID합, 총합 다 구함)

       (GROUPING SET은 합 없음)

 

14.

COL1=A, COL2=50 인거 찾는 문제

==> 1개

 

15.

SELECT SUM(COL2) 
FROM SQLD_30_15_01

WHERE COL1 IN ('A', 'X', NULL);

==> 표 선택, COL1=A OR COL1=X OR COL1=NULL 인 것 찾기

       (X, 30) (A, 40) (A, 50) 선택, NULL넣는다고 뽑히지X

==> 30+40+50

 

16.

제일 안쪽부터 실행하되, 계층구조 파악필요

(정확히는 모르겠으나 구글링으로 여러 예시를 살펴본 결과

FULL이 아닌 BY INDEX ROWID가 붙은 경우는 가장 안쪽부터 읽으면 되는듯)

(선행테이블ㅡ> 인덱스ㅡ> 조인) (맞는지 모르겠음)

 

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)

 

=> 5번이 가장 안쪽이지만 위에 TABLE ACCESS(FULL)있음

=> 3ㅡ> 5ㅡ> 4 (3번과 4번은 같은 위치니까 위에 있는 3번ㅡ>4번 순서)

                      (5번이 원래 제일 먼저였는데, 3번을 우선 넣어준 것)

=> 7번이 더 안쪽이지만

     2번 아래에 3~5번 계획이 있었던 것, 계획 다 수행했으니 2번 수행하고 마무리

=> 3ㅡ> 5ㅡ> 4ㅡ> 2ㅡ> 7ㅡ> 6 (5ㅡ> 4와 동일)

=> 나머지는 더 안쪽에 있는 순으로 정리

    3ㅡ> 5ㅡ> 4ㅡ> 2ㅡ> 7ㅡ> 6ㅡ> 1ㅡ> 0

 

17.

SELECT NVL(COUNT(*), 9999) 
FROM SQLD_30_15_01

WHERE 1=2;

=> 표 선택

=> WHERE 1=2는 공집합이라는 뜻(FALSE)

=> COUNT(*)=0 (공집합이니까)

     NVLㅡ> COUNT(*) IS NULL 이면 9999 , 아니면 COUNT(*) 반환

     0이기 때문에 ISNULL 아님 정답 0

 

18.

SELECT COL1, SUM(COL2)
FROM SQLD_30_15_01

GROUP BY COL1;

=> 표 선택, COL1로 그룹 묶고

=> COL1과 SUM(COL2) 선택

     NULL + 숫자 = NULL 이지만

     집계함수 SUM은 NULL 무시

=> 2번 정답

(헷갈린다면 17번 참고 https://ori-gina-l.tistory.com/13

 

[SQLD 34회 2과목] 문제공유 + 자세한 해설 (비전공자도 가능)

문제와 정답은 하단에 있습니다! 도움되셨다면 공감♥, 댓글 부탁드려요! 2과목은 16문제 이상 맞춰야 과락을 피할 수 있습니다! 1과목 해설은 여기있습니다! https://ori-gina-l.tistory.com/12 [SQLD 34회

ori-gina-l.tistory.com

19.

SAVEPOINT 이름이 같다면 나중에 저장한 값으로 ROLLBACK함

 

 

 

=> 최댓값 출력이니까 4

 

20.

Procedure Trigger User defined function
EXECUTE 명령어로 실행 자동 실행(이벤트 발생하면)  
CREATE Procedure CREATE Trigger  
COMMIT, ROLLBACK 가능 COMMIT, ROLLBACK 불가  
  DML 많이 쓴다  
반드시 값 RETURN 필요X   반드시 값 RETURN

DELETE ON TRIGGER에서 OLD(삭제 전 데이터) / NEW(삭제 후 데이터)

UPDATE TRIGGER에서 OLD(수정 전) / NEW(수정 후)

특정 테이블에 DML 시행되면 자동실행

트리거는 DB자체에 저장, 테이블, 뷰에 가능

 

21.

1) COALESCE('AB', 'BC', 'CD') FROM DUAL;

    NULL이 아닌 최초값 출력 : AB

2) SELECT CASE 'AB' WHEN 'BC' THEN 'CD' END FROM DUAL;

    IF문과 같다

    AB = BC면 CD출력 ㅡ> 아니니까 NULL 출력

3) SELECT DECODE ('AB', 'CD', 'DE') FROM DUAL;

   AB=CD면 DE출력 아니면 NULL

4) SELECT NULLIF ('AB', 'AB') FROM DUAL;

    AB=AB면 NULL 출력 아니면 AB출력

 

22.

한 줄씩 수행한다

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

=> (100, 100) 일때, COL1= 100 이니까 100 출력

=> (NULL, 60) 일때, COL1은 NULL이니까 패스, COL2=60 이니까

      60*50=300 출력

=> (NULL, NULL) 이면 COL1, COL2 모두 패스, 50 출력

 

23.24.

DDL : CREATE, DROP, MODIFY(오라클), ALTER(SQL서버)
DML : SELECT, INSERT, DELETE, UPDATE
DCL : GRANK, REVOKE
TCL : COMMIT, ROLLBACK

 

25.

1) CHARACTER : 고정길이 문자열, S만큼 최대길이(그보다 작으면 공백으로 채움)2) VARCHAR : 가변 문자열3) NUMERIC(SQL서버) : 정수, 실수   NUMBER(오라클)4) DATETIME(SQL서버) : 날짜정보   DATE(오라클)

 

26.

ROWNUM : 그냥 상위 N개 추출

TOP : ORDER BY가 있다면 정렬 후 상위 N개 추출

 

SELECT TOP(10) FIRST_NAME, JOB_ID
FROM HR.EMPLOYEES

ORDER BY SALARY;

=> HR.EMP에서 SALARY로 정렬ㅡ> 위에서 10줄 추출

 

FROMㅡ> WHEREㅡ> GROUP BYㅡ> HAVINGㅡ> SELECTㅡ> ORDER BY

 

1) SELECT FIRST_NAME, JOB_ID
   FROM HR.EMPLOYEES

   WHERE ROWNUM <= 10

   ORDER BY SALARY;

==> HR.EMP선택, 위에서 10줄 선택ㅡ> SALARY로 정렬

       (정렬하기 전에 그냥 10줄 뽑아오는 거)

 

2) SELECT TOP(10) WITH TIES FIRST_NAME, JOB_ID
   FROM HR.EMPLOYEES

   ORDER BY SALARY;

=> HR.EMP에서 SALARY로 정렬

=> 상위 10개 뽑되, 같은 SALARY 받는 사람 같이 출력

 

3) SELECT FIRST_NAME, JOB_ID
   FROM (

         SELECT FIRST_NAME, JOB_ID, ROWNUM RN
         FROM HR.EMPLOYEES

         ORDER BY SALARY

          )

    WHERE RN <= 10;

=> HR.EMP에서 FIRST_NAME, JOB_ID 선택하고, ROWNUM이 먼저 시행된다

=> 그 후 SALARY로 정렬 (이건 명확히 모르겠네용)

 

4) SELECT FIRST_NAME, JOB_ID
   FROM (

         SELECT FIRST_NAME, JOB_ID
         FROM HR.EMPLOYEES

         ORDER BY SALARY

          )

    WHERE ROWNUM <= 10;

=> HR에서 FIRST_NAME, JOB_ID 선택, SALARY로 정렬

=> 상위 10줄 추출

 

27.

SELECT LEVEL

      LPAD('**', (LEVEL-1)*2, '**') || EMPLOYEE_ID AS EMP_TREE,

      MANAGER_ID,

      EMPLOYEE_ID
FROM HR.EMPLOYEES

WHERE 1=1

START WITH (            )

CONNECT BY PRIOR (            )

 

START WITHㅡ> CONNECT BYㅡ> WHERE

 

==> HR에서 (   )에서 시작(루트노드)

       표를 보면 MANAGER_ID가 비어있음ㅡ> MANAGER_ID IS NULL

==> PRIOR 자식노드 = 부모노드, 이전 자식노드 값 = 현재 부모노드값

       PRIOR EMPLOYEE_ID = MANAGER_ID

 

 

 

 

 

28.

합집합 : UNION

중복허용 합집합 : UNION ALL (빠르다)

교집합 : INTERSECT

차집합 : MINUS

 

29.

NL Join Sort Merge Join Hash Join
랜덤 액세스 등가, 비등가 조인 가능 등가조인만 가능
대용량 sort 작업 유리 (sort가 포인트) 조인키 기준 정렬
각 테이블 정렬 후 조인

(대량이 포인트)
    함수 처리함
    선행테이블 작다
    별도 저장공간 필요함
    인덱스 없으면 유리

 

30.

1) FROM SQLD_30_30_고객 A

        INNER JOIN SQLD_30_30_주문 C ON A.고객ID = C.고객ID

        INNER JOIN SQLD_30_30_상품 B ON C.상품ID = B.상품ID

=> 이 경우 모든 고객의 총 주문금액인데

     INNER JOIN하면 서로 겹치는 것만 선택함ㅡ> 주문한 고객ID만 남음

(문제풀이 해본 결과 모든~~ 나타내는, 뭐를 꼭 나타내는~ 이런 식일 때 INNER JOIN이 오답인 경우가 많은듯)

 

31.

SELECT DISTINCT COL1, COL2
FROM SQLD_30_31_01

UNION ALL

SELECT COL1, COL2
FROM SQLD_30_31_02

=> DISTINCT 중복제거, UNION ALL 중복 허용 합집합

 

 

 

 

COL1 COL2
1 2
1 3
1 2
1 4
1 5

 

32.

SELECT COUNT(*)
FROM SQLD_30_11_01 A, SQLD_30_11_02 B

WHERE A.COL1 = B.COL1

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

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

=> A,B 선택

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

     A.COL1=B.COL1는 2번째 행까지 만족 (1,2)

     NVL(A.COL2, -1) = NVL(B.COL2, -1) 2번째 행만 만족 (NULL, NULL)

=> 2번째 행 AND NVL(A.COL3, -1) = NVL(B.COL3, -1)

=> 위 조건 만족, 최종 2번째 행만 출력

 

33.

Unique Index Scan은 1개 값 추출하는 방식

PK는 KEY1, KEY2인데 4) KEY1에만 조건 줌, 1개 이상 나올 수 있다

 

34.

주문 REFERENCES 고객 (고객이 부모, 주문이 자식)

 

 

 

 

4) 부모에 없는 데이터가 자식에 있음?ㅡ> 오류

3) 고객ID(FK) 외래키인데

   참조무결성 : 외래키는 부모키(기본키)값과 같거나 NULL값일 것

 

35.

Cross Join : Where 절에서 조건을 걸 수 있다

                Join Key 가 없을 경우 발생
Natural Join : Where 절에서 조건을 걸 수 없다. 

                  특정 Join 컬럼을 명시적으로 적을 수 없다.(OWNER명 불가)(EX EMP.DEPT)
                  Join Key 는 컬럼명으로 결정된다.

 

36.

RANGE : 관리 쉽다 / 가장 많이 쓰임 / 숫자값으로 분리O

LIST : 대량 데이터 / 특정컬럼(생성일자}) 없음 / PK

HASH : 관리어렵 / 데이터 위치모름

 

37.

FROM SQLD_30_11_01 A (    ) SQLD_30_11_02 B

=> 결과에 B값은 모두 나오고 A값은 B와 겹치는 것만 출력

=> 오른쪽의 B값 모두 출력한 것 : RIGHT OUTER JOIN

 

38.

1) LAST_VALUE() OVER : 가장 마지막 값

2) FIRST_VALUE() OVER : 제일 처음값

3) MAX() OVER : 제일 큰 값

 

39.

 

 

 

 

테이블 이름으로 말장난, 앞에 있는 테이블의 SUM 구하면 된다

 

40.

SELECT AVG (NVL (COL2, 0) ) AS AVG_COL
FROM SQLD_30_40

=> 표 선택, NVL (COL2, 0)ㅡ> (10, 20, 0) 출력ㅡ> 걔네 평균은 10

 

41.

SELECT JOB, COUNT(*) AS CNT=> JOB과 행 수 세는 것 선택 (2개)    4) ORDER BY 3 , 3번째 열이 없어서 오답

 

42.MERGE 사용 시 DELETE는 UPDATE절에 종속

 

MERGE INTO SQLD_30_40_01 A

USING SQLD_30_40_02 B

    ON (A.COL1 = B.COL1)

WHEN MATCHED THEN

    UPDATE SET A.COL3 = 4

         WHERE A.COL3 = 2  

    DELETE WHERE A.COL3 <= 2

WHEN NOT MATCHED THEN  

    INSERT (A.COL1,A.COL2,A.COL3) VALUES(B.COL1,B.COL2,B.COL3);

=> A 표를 수정하는데, A.COL1=B.COL1이 같다면 (A~C까지 선택)

     A.COL3=2인 곳을 A.COL3=4로 바꾸고

     A.COL3=4인 줄이 A.COL3 <= 2이라면 지워라 (안 지우겠죠?)

=> 같지 않다면 (X)(D,E)부분을 A표에 추가해라!

COL1 COL2 COL3
A X 1
B Y 4
C Z 3
X T 1
D 4
E 5

 

 

 

S.O.S_Network_SQLD_기출문제집(30회)_ver1.0.pdf
0.65MB

 

 

출처는 여기

https://cafe.naver.com/sqlpd/8352

 

SQLD 예상문제 (30회 기출문제 복원, 2018년 9월 시험)

-----------------------------------------------Update : 2019.3.14Contents 1) 24번 문제 수정 : TCL 찾기로 ...

cafe.naver.com

 


​정답

 

 

 

 

 

반응형

댓글