728x90
1. 주식별자를 도출하기 위한 기준?
- 주식별자 특징은 -> 유 최 불 존
- 유일성 : 유일하게 인스턴스를 구분 가능하다.
- 최소성 : 주식별자의 속성 수가 최소이다.
- 불변성 : 주식별자의 값은 변경이 안된다.
- 존재성 : 반드시 값이 들어와야한다.(NOT NULL)
2. 속성의 특징?
- Entity는 2개 이상의 속성으로 구성된다.
- Entity를 설명하고, 인트턴스의 구성요소이다.
- 하나의 속성은 하나의 값을 갖는다.
- 속성은 모든 일반적인 기본속성, 새로만드는 설계속성, 영향을 받아서 발생하고, 빠른 성능과 계산을 하는 파생속성이 있다.
3. TABLE 명령어의 특징?
- DROP : 구조까지 모두 삭제한다.
- TRUNCATE : 구조를 유지하고 데이터만 삭제한다.
- DELETE : 원하는 데티어만 삭제, 복구 가능하다. 용량이 줄지않고 느리다.
4. PROCEDURE, TRIGGER에 대한 설명?
- PROCEDURE : EXECUTE명령어로 실행한다, CREATE PROCEDURE, COMMIT과 ROLLBACK이 가능하다.
- TRIGGER : 이벤트 발생 시 자동실행된다, CREATE TRIGGER, COMMIT과 ROLLBACK이 불가능하다.
5. SQL을 ORACLE과 SQL SERVER에서 수행할 때에 대한 설명?
- ORACLE의 경우 기본 값이 AUTO COMMIT OFF로 DDL이 일어날 경우 묵시적으로 COMMIT이 된다.(설정이 불가능하다.)
- SQL SERVER의 경우 기본 값이 AUTO COMMIT ON으로 FALSE가 될 경우 DDL도 묵시적으로 COMMIT이 되지 않는다.
- SQL SERVER의 경우, AUTO COMMIT을 OFF해두면 UPDATE, CREATE 모두 취소되고 다시 테이블이 생성되지 않는다.
- ORACLE은 DDL의 AUTI COMMIT이 기본이기 때문에 CREATE와 UPDATE가 취소되지 않는다.
6. SQL결과가 다른것?
- SELECT 고객ID, 이용일자 -> 왼쪽 테이블 전체
FROM SQLD_34_22_01
UNION -> 중복을 허용하지 않는 합집합
SELECT 고객ID, 이용일자 -> 오른쪽 테이블 전체
FROM SQLD_34_22_03 -> FILL OUTER JOIN
- A, B, 고객ID, 이용일자를 중복없이 모두 선택해서 CROSS JOIN이다.
- A, B, 고객ID, 이용일자 전부 선택해서 FULL OUTER JOIN이다.
- A의 고객ID, 이용일자 전부 선택한다, 중복을 허용하지 않는 합집합, B의 고객ID,이용일자를 전부 선택한다.
- A의 고객ID, 이용일자를 선택하되, B와 같은 고객ID는 허용하지 않는다.
NOT EXIST(SELECT 'X' -> 'X'는 무시해도 괜찮다.
FROM ~~~
WHERE A.고객ID = B.고객ID)
7. 빈 칸에 들어갈 SQL문?
- SELECT MIN(ID) FROM SQLD_34_32 GROUP BY NAME
: FROM으로 표를 선택하고 이름으로 그룹을 만든다음 가장 작은 ID선택한다.
8. SQL중 잘못 된 것은?
- INSERT INTO 주문 VALUES(2, SYSDATE, 'TEST2') -> 행은 4개인데 3개만 INSERT되어서 안된다.
- 3. DELETE에서는 FROM이 생략될 수 있다.
9. ORDER BY의 특징?
- ORDER BY의 기본 정렬은 오름차순이다.
- SELECT 구문에 사용되지 않은 컬럼도 ORDER BY구문에서 사용할 수 있다.
- ORDER BY 1, COL1과 같이 숫자와 컬럼을 혼용하여 사용할 수 있다.
- ORACLE은 NULL을 가장 큰 값으로 취급하여 ORDER BY시 맨 뒤로 정렬되고 SQL SERVER에서는 반대로 가장 앞으로 정렬한다.
10. 사원과 관리자, 그리고 최상위 관리자가 나오도록 작성된 SQL을 완성하라.
- INNER JOIN을 하면 일치하는 것만 가져오니 최상위 관리자가 누락되서 불가능하다.
- INNER JOIN을 하면 일치하는 것만 가져오니 최상위 관리자가 누락되서 불가능하다.
- LEFT OUTER JOIN을 해야 최상위 관리자가 나오고 A.MANAGER_ID = B.MANAGER_ID가 되야 된다.
- A.EMPLOYEE_ID = B.MAANGER_ID로 반대가 되서 안된다.
11. 집합연산자?
- 합집합 : UNION(느리다.)
- 중복허용 합집합 : UNION ALL(빠르다.)
- 차집합 : MINUS(ORACLE), EXCEPT(SQL SERVER)
- 교집합 : INTERSECT
12. WINDOW FUNCTION?
- PARTITION BY와 GROUP BY는 파티션 분할한다는 점에서 유사하다.
- 집계 WINDOW FUNCTION(SUM, MAX, MIN) 쓸 때 WINDOW절과 함께하면 레코드 범위(집계대상) 지정이 가능하다.
- WINDOW FUNCTION은 순위, 합계, 평균, 행위치 조작이 가능하다.
- WINDOW FUNCTION은 행, 행 간 관계를 정의하는데 사용한다.
- WINDOW FUNCTION으로 결과 건수가 줄지 않는다.
- GROUP BY, WINDOW FUNCTION은 병행이 불가능하다.
13. 부서명, 부서에 소속된 사원명, 부서번호를 보여주고자 하고, 사원이 없는 부서도 보여주고자 할때 SQL문을 완성해라.
- 사원이 없는 부서도 보여줘야한다. 따라서 모든 DEPT(부서)를 보여줘야 한다.
- LEFT OUTER JOIN으로 보여줄 수 있다.
14. 아래 테이블에서 연봉이 2번째, 3번째로 높은 사원의 정보를 구해라
- SALARY < (SELECT(MAX)(SALARY) FROM EMPLOYEES) )
- 최댓값보다 작은 월급을 구하는 문제이기 때문에 '월급 < 최댓값'을 하면 2번째 월급부터 구할 수 있고 WHERE RN < 3; 으로 3번째까지 구할 수 있다.
15. SQL 문자 정리
- 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") -> ACC를 지우고 'UT'만 남는다. - RTRIM : RTRIM("문자열", "옵션")
RTRIM("아 ") -> 오른쪽공백을 제거한다. 따라서 출력값은 '아'가 된다.
RTRIM("00030", "0") -> 오른쪽 반복문자를 제거한다. 따라서 출력값은 '0003'이 된다. - SUBSTR : SUBSTR("문자열", "시작위치", "길이")
SUBSTR("ABCD", 2) -> 앞쪽 두글자만 나오고 나머지는 자른다. 따라서 출력값은 'AB'가 된다.
SUBSTR("ABCD", -2) -> 뒤쪽 두글자만 나오고 나머지는 자른다. 따라서 출력값은'CD'가 된다.
SUBSTR("ABCD", 2, 1) -> 두번째에서 한글자를 출력한다. 따라서 출력값은 'B'가 된다. - INSTR : INSTR("문자열", "찾을 문자 값", "찾기 시작하는 위치(1, -1)", "찾은 결과 순번")
INSTR("HELLO WORLD", "O") -> 앞에서부터 5번째니까 5가된다.
INSTR("HELLO WORLD", "LO") -> 앞에서부터 4번째니까 4가된다.
INSTR("HELLO WORLD", "LVO") -> 없다.
INSTR("HELLO WORLD", "L", 1, 2) -> 1번부터 2번째 L을 찾아라. 따라서 출력값은 '4'가 된다.
16.SQL의 수행결과?
- 문제에서 a.salary + b.sum_salary는 현재 SAL(EMPLOYEE_ID = 105)에서 루트SAL(MANAGER_ID IS NULL)까지 더하하는 뜻이고 조건은 B > EMPLOYEE_ID = A.MANAGER_ID 이다.
- 현재 EMPLOYEE_ID 105에서 루트 100까지 SALARY를 더하되, B.EMPLOYEE_ID = A.MANAGER_ID인 105, 103, 102, 100의 SALARY를 더한다.
- 따라서 4800 + 9000 + 17000 + 24000 = 54800이다.
17. SQL의 수행결과?
- NOT -> AND -> OR순으로 연산한다.
- MGR_ID IS NULL AND CODE = 'B'를 연산하면 아무것도 선택되지 않는다.
- SALARY > 200 OR NULL 이기 때문에 SALARY > 200인 것만 선택한다.
- EMP_ID가 2, 4, 5번 3개이기 때문에 3이된다.
18. 빈칸에 들어갈 SQL문은?
- SQLD_34_49에서 RESULT를 보면 4개로 나눠져있다.
- SELECT()(4)~~~~ -> ()안에 전체 건수를 인수값으로 N등분하는 'NTILE'를 넣어주면 RESULT처럼 4등분된 값이 나온다.
19.
- LAG(SALARY, () ) OVER(PARTITION BY DEPARTMENT_ID ORDER BY SALARY) AS BEFORE_SALARY
- LAG는 이전 N번째 행을 가지고 온다. <-> LEAD는 이후 N번째 행을 가지고 온다.
- DEPARTMENT_ID로 그룹을 묶고, SALARY로 오름차순 정렬한다.
- 따라서 BEFORE_SALARY를 보면 두번째 이전의 SALARY값을 가지고 오므로 '2'가 된다.
'WorkHard > 자격증' 카테고리의 다른 글
[SQLD 개발자] 기출문제 공부(35회) (0) | 2023.03.07 |
---|---|
[SQLD 개발자] 기출문제 공부(35회) (0) | 2023.03.06 |
[SQLD 개발자] 기출문제 공부(30회) (0) | 2023.03.03 |
[SQLD 개발자] 기출문제 공부(30회) (0) | 2023.03.02 |
[SQLD 개발자] 기출문제 공부(21회) (0) | 2023.03.01 |