본문 바로가기
자격증/SQLD

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

by 0.0.0. 2020. 8. 31.
반응형

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

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

 

1과목 해설은 여기있습니다!

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

 

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

카페에서는 정답 정도만 있고, 해설을 따로 제공하지않아서 혼자 공부했어야 했는데 제 다음에 공부하시는 분은 이 글 보고 편안하게 공부하시길 바라요! (틀린 부분은 댓글로 남겨주세요) 1과��

ori-gina-l.tistory.com

 

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

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

 

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

문제와 정답은 하단에 있습니다! 도움되셨다면 공감♥, 댓글 부탁드려요! 다들 열심히 해서 한번에 합격합시다! SQLD는 응시비용이 무려 50,000 원... 한번에 갑시다!! 1과목은 4문제 이상 맞춰야

ori-gina-l.tistory.com

 

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

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

 

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

 

ori-gina-l.tistory.com

 

43.

SELECT A.DEPT_NM, B.EMP_NM, A.DEPT_ID
FROM DEPT  (      )   EMP ON (A.DEPT_ID = B.DEPT_ID)
WHERE 1=1

=> 사원 없는 부서도 보여주기 (DEPT 모두 포함)

=> LEFT OUTER JOIN

 

44.

SELECT CODE
FROM SQLD_34_X2
START WITH SUPER_ID IS NULL
CONNECT BY PRIOR ID = SUPER_ID
ORDER SIBLINGS BY CODE DESC;

 

 

=> Start with SUPER_ID IS NULLㅡ> (1, NULL, A) 선택, 얘가 루트(LEVEL 1)

=> CONNECT BY PRIOR ID = SUPER_ID 

    ID가 자식 SUPER_ID가 부모

    ID=2,3 은 SUPER_ID=1의 자식  / ID=4는 SUPER_ID=2의 자식

=> ORDER SIBLINGS BY 는 같은 레벨 내에서 정렬하는 것

     ID=2,3은 둘다 LEVEL=1이라 정렬 필요, CODE DESC니까 코드 뒷순서부터

=> 2번째 값 C

ID SUPER_ID CODE
1 NULL A
3 1 C
2 1 B
4 2 D

 

45.

SALARY < (SELECT (MAX)(SALARAY) FROM EMPLOYEES))

=> 최댓값보다 작은 월급 구하기

 

 

 

 

46.

UPPER() : 전부 대문자로

LOWER() : 전부 소문자로

LPad (왼쪽) : LPAD("값", "총 문자길이", "채움문자")
                 LPAD(30, 5)             //3자리가 공백으로 자동처리
                 LPAD(30, 5, ‘0’)        //00030
RPad (오른쪽) : RPAD("값", "총 문자길이", "채움문자")
                    RPAD(30, 5)             //3자리가 공백으로 자동처리
                    RPAD(30, 5, ‘0’)        //30000
LTrim : LTRIM(“문자열”, “옵션”)
          LTRIM(“   냥”)                      //냥 (왼쪽 공백제거)
          LTRIM(“00030”, “0”)               //30 (왼쪽 반복문자 제거)
          LTRIM(“ACCUT”, “ACC”)          //UT
RTrim : RTRIM(“문자열”, “옵션”)
          RTRIM(“냥   ”)                //냥 (오른 공백제거)
          RTRIM(“00030”, “0”)         //0003 (오른 반복문자 제거)
Substr : SUBSTR(“문자열”, “시작위치”, “길이”)
          SUBSTR(“ABCD”, 2)                 // AB (걍 2글자 자름)
          SUBSTR(“ABCD”, -2)                // CD
          SUBSTR(“ABCD”, 2, 1)              // B (걍 2번째에서 1글자)
Instr : INSTR(“문자열”, “찾을문자값”, “찾기시작위치(1, -1)”, “찾은 결과순번”)
        INSTR(“HELLO WORLD”, “O”)                   // 5(기본 앞에서부터)
        INSTR(“HELLO WORLD”, “LO”)                 // 4 (처음 인덱스)
        INSTR(“HELLO WORLD”, “LVO”)                // 0 (없음)
        INSTR(“HELLO WORLD”, “L”, 1, 2)              // 4 (1번째부터, 2번째 L찾음)

 

47.

WITH WITH_TAB (last_name, EMP_ID, MGR_ID, o_salary,sum_salary  )
AS
(
 SELECT last_name,EMPLOYEE_ID,MANAGER_ID, salary, to_char(salary)
 FROM (SELECT * FROM HR.EMPLOYEES WHERE EMPLOYEE_ID < 110)
 WHERE MANAGER_ID IS NULL
 UNION ALL
 SELECT a.last_name, a.EMPLoYEE_ID, a.MANAGER_ID, a.salary+b.sum_salary
 FROM HR.EMPLOYEES, WITH_TAB B
 WHERE B.EMP_ID = A.MANAGER_ID)
SELECT SUM_SALARY FROM WITH_TAB
WHERE EMP_ID = 105;

=> a.salary+b.sum_salary : 현재 SAL(EMP_ID = 105)에서 루트SAL(MANAGER_ID IS NULL)까지 더해라

     조건은 B.EMP_ID = A.MANAGER_ID

 

 

현재 EMP_ID 105에서 루트 100까지 SALARY 더해되,

B.EMP_ID = A.MANAGER_ID인 105, 103, 102, 100의 SALARY 더함

=> 4800 + 9000 + 17000 + 24000

 

48.

SELECT COUNT(*)
FROM SQLD_34_X6
WHERE SALARY > 200

           OR MGR_ID IS NULL AND CODE ='B'

NOT - AND - OR 순으로 연산

=> MGR_ID IS NULL AND CODE ='B' 연산하면 아무것도 선택X

=> SALARY>200 OR NULL 이기때문에 SALARY>200인것만 선택

 

49.

10건을 4건으로 잘 나눔(3+3+2+2=10)

SELECT VAL, COUNT(*) AS CNT
FROM (
      SELECT (     )(4) over (ORDER BY COL1) AS VAL
      FROM SQLD_34_X7
     )

=> NTILE : 전체건수를 인수값으로 N등분함

 

50.

LAG(SALARY, ( ) ) OVER(PARTITION BY DEPARTMENT_ID ORDER BY SALARY ) AS BEFORE_SALARY

=> LAG는 이전 N번째 행 가져옴

     <-> LEAD : 이후 N번째 행

=> DEPARTMENT_ID로 그룹 묶고, SALARY로 오름차순 정렬

 

 

 

반응형

댓글