문제와 정답은 하단에 있습니다!
도움되셨다면 공감♥, 댓글 부탁드려요!
1과목 해설은 여기있습니다!
https://ori-gina-l.tistory.com/12
30회 해설은 여기있습니다!
https://ori-gina-l.tistory.com/15
21, 35회 해설은 여기서 봐주세요!
https://ori-gina-l.tistory.com/category/%EC%9E%90%EA%B2%A9%EC%A6%9D/SQLD
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로 오름차순 정렬
'자격증 > SQLD' 카테고리의 다른 글
[SQLD 30회 단답형] 문제공유 + 자세한 해설 (비전공자도 가능) (2) | 2020.09.01 |
---|---|
[SQLD 30회 2과목] 문제공유 + 자세한 해설 (비전공자도 가능) (14) | 2020.09.01 |
[SQLD 30회 1과목] 문제공유 + 자세한 해설 (비전공자도 가능) (0) | 2020.08.31 |
[SQLD 34회 2과목] 문제공유 + 자세한 해설 (비전공자도 가능) (21) | 2020.08.30 |
[SQLD 34회 1과목] 문제공유 + 자세한 해설 (비전공자도 가능) (8) | 2020.08.29 |
댓글