- 엔터티 내에서 속성에 대한 데이터 타입과 크기 그리고 제약사항을 지정하는 것? 도메인
- 반정규화에 대한 설명.
데이터를 조회할 때 디스크 입출력이 많아서 성능이 저하되거나 경로가 너무 멀어 조인으로 성능저하 예상될 때 수행
컬럼을 계산하여 읽을 때 성능이 저하될 것이 예상되는 경우 수행
반정규화를 적용할 때는 기본적으로 데이터 무결성이 깨질 가능성이 많이 있으므로 반드시 데이터 무결성을 보장
할 수 있는 방법을 고려해야 됨
발생시점에 따른 엔터티 분류에 의한 (중심 엔터티)는
매출, 계약, 주문
사원은 (기본 엔터티)임
발생시점에 따른 엔터티 분류
A: 기본/키 엔터티: 조직, 사원
B: 기본/키 엔터티: 부서
C: 중심 엔터티: 주문상품
D: 행위 엔터티: 주문내역, 계약진행
+ 기본/키 엔터티: 상품
데이터 모델링이 최종적으로 완료된 상태라고 정의할 수 있는,
즉 물리적인 스키마 설계를 하기 전 단계를 가리키는 말은 무엇인가? 논리적 모델링
-반정규화의 대상
- 자주 사용되는 테이블에 접근하는 프로세스의 수가 많고 항상 일정한 범위만을 조회하는 경우
- 테이블의 대량의 데이터가 있고 대량의 데이터 범위를 자주 처리하는 경우에 처리범위를
일정하게 줄이지 않으면 성능을 보장할 수 없는 경우 - 통계성 프로세스에 의해 통계 정보를 필요로 할 때 별도의 통계 테이블을 생성해야 하는 경우
- 식별자의 분류체계
- 스스로 생성 여부에 따라 분류되는 식별자는 내부식별자와 외부 식별자이다.
- 둘 이상의 속성으로 구성된 식별자를 복합식별자라고 하며 속성의 수에 따른 식별자 분류이다.
- 업무적으로 만들어지지는 않지만 필요에 따라 인위적으로 만든 식별자를 인조식별자 한다.
분산 데이터베이스의 특징 중 사용하려는 데이터의 저장 장소 명시가 불필요하다는 특징은? 위치 투명성
Row migration과 Row Chaining 에 대한 설명.
로우 길이가 너무 길어서 데이터 블록 하나에 데이터가 모두 저장되지 않고
두 개 이상의 블록에 걸쳐 하나의 로우가 저장되는 현상을 Row Chaining 이라고 한다.
11.
SELECT A.COL1, A.COL2
FROM SQLD_30_11_01 A
WHERE A.COL1 > 0;
여기서 SQLD_30_11_01 테이블의 COL1은 데이터 타입이 VARCHAR2(30) 으로 정의되어 있다.
따라서 COL1 > 0; 으로 문자와 0이라는 숫자는 비교연산자를 활용할 수 없다. 따라서 오류가 발생한다.
※ SQL 쿼리 중 오류가 발생할 수 있는 구조에 대해 묻는 문제 중 비교 연산시 data-type 확인 필요.
12.
스칼라 서브쿼리(Scalar Subquery)
- SELECT 절에서 사용하는 서브쿼리다.
- Scalar 는 '한번에 한가지만 처리' 라는 뜻으로 나오는 결과는 ' 하나의 행' 이어야 한다.
SELECT A.COL1
(SELECT COL3 FROM SQLD_30_12_02 B
WHERE A.COL1 = B.COL1) AS B_COL3
FROM SQLD_30_12_01 A
WHERE A.COL2 > 10;
SELECT 절의 서브쿼리는 스칼라 서브쿼리로 단일행 서브쿼리.
서브쿼리 결과가 여러행이 반환되면 오류.
"단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다."
13.
아래의 SQL 결과를 보고 GROUP BY 뒤 빈칸에 들어가는 내용은?
SELECT JOB_ID, MANAGER_ID, SUM(SALARY)
FROM HR.EMPLOYEES
WHERE JOB_ID IN ('SH_CLERK', 'ST_CLERK', 'SA_REP')
GROUP BY (ROLLUP(JOB_ID, MANAGER_ID));
14.
SELECT COUNT(*)
FROM SQLD_30_14_01
WHERE (COL1, COL2) IN (('A', 50));
A 50
== 1
15.
SELECT SUM(COL2)
FROM SQLD_30_15_01
WHERE COL1 IN ('A','X',NULL);
SUM = 120
16.
실행계획에 대한 SQL 수행 순서.
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 - 4 - 5 - 2 - 7 - 6 - 1 - 0
17.
아래 SQL 의 수행결과는?
SELECT NVL(COUNT(*), 9999)
FROM SQLD_30_17_01
WHERE 1=2
WHERE 1 = 2 는 FALSE 를 의미하기 때문에 공집합
공집합의 COUNT를 구하기 때문에 0
공집합은 NULL이 아님. 공집합은 아무것도 없는 것 (0 ROW)
NULL은 있지만 정해지지 않은 값 (행과 열이 존재하지만 그 안에 값이 없는 것)
18.
아래 데이터를 참고하여 아래 SQL의 수행결과.
SELECT COL1, SUM(COL2)
FROM SQLD_30_18_01
GROUP BY COL1;
19.
아래와 같은 SQL이 순서대로 수행되었을 때 최종 결과값은?
(7)번에서 ROLLBACK 하게 되면 바로 직전 SAVEPOINT로 저장된
UPDATE SQLD_30_19 SET COL1=4 WHERE COL1=2;
가 복원되게 되며 , 따라서 COL1의 4가 UPDATE 된다.
그리고 (8)에서 INSERT 3을 하게되며
(9)에서 COL1에서 MAX최대값을 찾게되면 이전 롤백된 값인 4가 출력된다.
20.
- Trigger에 대한 설명.
- DELETE ON TRIGGER 의 경우 :OLD 는 삭제 전 데이터를, :NEW 는 삭제 후 데이터를 나타냄
- 특정 테이블에 DML 문이 수행되었을 때 자동으로 동작하도록 작성된 프로그램이다
- UPDATE TRIGGER에서 :OLD는 수정전, :NEW에는 수정 후 값이 들어간다.
OLD는 이전, NEW 이후 라는 개념으로 암기.
21.
아래의 SELECT 결과가 NULL 이 아닌 것은?
- COALESCE(expr1, expr2, expr3...)
NVL의 확장판
1. expr1이 null이 아니면 expr1을 반환
2. expr1이 null이면 COALESCE(expr2, expr3...)를 반환
3. null 이 아닌 값이 나올 때까지 무한 반복 - DECODE(Column, 조건1, 값1, 조건2, 값2 ...)
"CASE 컬럼(WHEN 조건 THEN 결과)..." 와 같은 방식
더 짧은 버전이라고 생각하면 됨
ELSE 기능은 마지막에 조건 없이 값만 적으면 ELSE로 처리됨
ELSE가 안 적힌 경우, 조건에 맞는게 없으면 NULL이 나온다. - NULLIF(expr1, expr2)
expr1 값과 expr2 값이 같은 경우 null을 반환
expr1 값과 expr2 값이 다른 경우 expr1 값을 반환 - NVL(컬럼, expr)
컬럼값이 null일 경우, expr을 반환하는 함수
null이 아니면 컬럼값을 반환
컬럼이라고 적어 놨지만 컬럼만 들어가는 것이 아니면 값이면 무엇이든 들어올 수 있음 - CASE~ WHEN~ THEN~ ELSE
조건문.
조건문 배울 때 자주 나오는 성적 커트라인으로 예시 작성
CASE 점수
WHEN 점수 >= 90 THEN 'A'
WHEN 점수 >= 80 AND 점수 < 90 THEN 'B'
...
ELSE 점수 'F'
점수에 맞는게 없는데 ELSE도 없는 경우 NULL이 나온다.
SELECT COALESCE ('AB','BC','CD') FROM DUAL;
-- AB
SELECT CASE 'AB' WHEN 'BC' THEN 'CD' END FROM DUAL;
-- NULL
SELECT DECODE ('AB','CD','DE') FROM DUAL;
-- NULL
SELECT NULLIF('AB','AB')FROM DUAL;
-- NULL
22.
SQL 수행결과.
집계함수와 일반함수
- 집계함수는 전체 행을 대상으로 하나의 집계된 결과를 반환 (min, max, sum, avg 등)
- 일반함수는 1개 행을 대상으로 처리 결과를 반환 (nvl, substr, instr, lpad 등)
COALESCE는 집계함수가 아닌 일반함수.
따라서 COALESCE는 전체행을 대상으로 집계하는 것이 아니라 각각의 행별로 처리됨.
COALESCE 함수는 열거된 가장 좌측 파라미터 부터 가장 먼저 NULL이 아닌 값을 출력하는 함
100, 3000, 50
23.
DML, DCL, DDL 짝짓기 틀린것? 4번
① DDL : CREATE
② DML : UPDATE
③ DCL : ROLLBACK
④ DCL : SELECT
24.
SQL 명령어 중 TCL 은 COMMIT ROLLBACK
26.
아래의 SQL과 항상 동일한 결과를 나타내는 SQL은?
SELECT TOP(10) FIRST_NAME, JOB_ID
FROM HR.EMPLOYEES
ORDER BY SALARY;
SELECT FIRST_NAME, JOB_ID
FROM (SELECT FIRST_NAME, JOB_ID
FROM HR.EMPLOYEES
ORDER BY SALARY)
WHERE ROWNUM <= 10;
-- 행 10번째까지
-- ORDER BY default로 설정 됨.
27.
아래의 계층형 SQL을 수행하여 아래와 같은 결과가 나올 때 ( ) 에 맞는 것.
SELECT *
FROM 테이블명
START WITH <ROOTH를 정하는 조건>
CONNECT BY PRIOR <ROOT 이하 우선순위 조건>
START WITH 다음에는 ROOT(기준)를 정하는 조건이 필요
무엇을 시작점으로 잡을 것인가를 결정하는 것
CONNECT BY PRIOR 다음에는 ROOT 이하에 어떤 행(튜플)을 붙일 것인가에 대한 조건을 주게됨
START WITH (MANAGER_ID IS NULL)
CONNECT BY PRIOR (EMPLOYEE_ID = MANAGER_ID)
28.
SQL Set Operation 에서 중복 제거를 위해 정렬 작업을 하지 않는 연산자는? 2번
① UNION
② UNION ALL
③ INTERSECT
④ MINUS
29.
SQL Set Operation 에서 중복제거를 위해 정렬작업을 하지 않는 집합연산자는? 1
[보기]
대용량 데이터를 정렬하여 조인하여 조인한다.
동등 조인, 비동등 조인에서 모두 사용 가능하다. == sort merge join
각 테이블을 정렬한 후 조인한다.
① Sort Merge Join
② Hash Join
③ Nested Loop Join
④ Cartesian Join
30.
아래 ERD를 참고하여 모든 회원의 총 주문 금액을 구하는 SQL 중 잘못된 SQL은? 1번
모든 회원을 구하는 것인데 1번은 INNER JOIN 만 하기 때문에 모든 회원 데이터를 얻을 수 없음
31.
SQL 행의 개수는? 3번 5개
32.
1번
33.
UNIQUE INDEX SCAN을 할 수 없는 것은?
① 모두 사용할 수 없다.
② WHERE KEY1 = 1 AND KEY2 = 2
③ WHERE (KEY1, KEY2) IN ((1, 2))
④ WHERE KEY1 = 1
두개 조건이 다 들어와야 UNIQUE
UNIQUE INDX SCAN 은 단 하나의 값을 추출하는 방식.
34.
C002 고객 ID가 주문에만 있을 수 없음
무결성 제약조건 위배. 부모키가 없음.
35. Cross Join 과 Natural Join에 대한 차이점.
- Natural Join 에서는 특정 Join 컬럼을 명시적으로 적을 수 없다.
- Cross Join은 Join에 참여하는 테이블의 Join Key가 없을 경우 발생한다
- Natural Join에서 Join Key는 칼럼명으로 결정된다.
- Natural Join은 WHERE절에 JOIN 조건 추가 불가능
Cross Join은 WHERE절에 JOIN 조건 추가 가능
36.
다음과 같이 PK 컬럼이 구성되어 있을 때 가장 적합한 파티셔닝 방법? 2번
[테이블 정보]
특징: 데이터의 양이 매우 많은 대용량 테이블이다.
데이터의 생성일자를 구분짓는 특정 컬럼이 없는 형태이다.
PK: 지점, 코드
① Range
② List
③ Hash
④ Interval
37.
RIGHT OUTER JOIN
38.
특정 그룹에서 특정 컬럼으로 정렬된 결과에서 첫번째 값을 구하는 Window Function? 2번
① LAST_VALUE () OVER
② FIRST_VALUE () OVER
③ MAX () OVER
④ 없다.
39.
TRUNCATE = ROLLBACK 불가
DDL 명령이며 테이블 구조 유지 / 데이터 삭제 / 디스크 사용량 초기화 가능
40,
아래와 같은 데이터가 존재할 때 SQL의 실행 결과로 올바른 것은?
SELECT AVG(NVL (COL2, 0)) AS AVG_COL
FROM SQLD_30_40;
COL2 -> 10, 20, null->0
10, 20, 0 = SUM / 3 = AVG = 10
정답은 10.
41.
SQL에서 ORDER BY로 사용할 수 없는 것은? 4번
① ORDER BY JOB
② ORDR BY CNT DESC
③ ORDER BY COUNT(*)
④ ORDER BY 3
42.
USING 조건절
같은 이름을 가진 컬럼들 중에서 원하는 컬럼에 대해서만 EQUI JOIN을 할 수 있다.
ON 조건절
컬럼명이 다르더라도 JOIN 조건을 사용할 수 있다.
MERGE INTO SQLD_30_42_01 A
USING SQLD_30_42_02 B
ON (A.COL1 = B.COL1)
WHEN MATCHED THEN -- (A, B, C)
UPDATE SET A.COL3 = 4
WHERE A.COL3 = 2 -- (B: 2 -> 4)
DELETE WHERE A.COL3 <= 2 -- UPDATE 된 건에 대해서만 DELETE 대상이 되므로 없음
WHEN NOT MATCHED THEN -- (D, E)
INSERT (A.COL1, A.COL2, A.COL3) VALUES(B.COL1, B.COL2, B.COL3);
-- 최종 (A, B, C, X, D, E)
위 데이터 존재할 때 SQL을 수행한 후 SQLD_30_42_01 테이블의 건수는? 6건
-- MERGE에서의 DELETE 구문은 DELETE 단독구문이 아닌 UPDATE구문에 종속됨.
UPDATE 실행된 건에 한해 DELETE 구문이 수행됨.
43.
SELECT ABS(-3.8), FLOOR(3.8), TRUNC(3.8), ROUND(3.9) FROM DUAL;
ABS : 3.8
FLOOR: 3
TRUNC : 3
ROUND : 4
44.
VIEW(뷰) :
복잡한 질의를 단순하게 작성할 수 있다.
또한 해당 형태의 SQL 문을 자주 사용할 때 이용하면 편리하게 사용할 수 있다.
사용자에게 정보를 감출 수 있다.
실제 데이터를 가지고 있지 않다.
45.
START WITH 상위계층번호 IS NULL
: 해당 조건은 최상위로부터 시작하라는 조건
CONNECT BY 계층번호 = PRIOR 상위계층번호;
: 해당 조건은 역방향으로 거슬러 올라가라는 의미이다.
최상위에서는 더이상 올라갈 곳이 없기 때문에
1 NULL
2 NULL
총 2개.
46.
아래의 SQL 구문은 컬럼의 데이터 타입을 변형하는 SQL 구문. (SQL Server 기준)
(ALTER TABLE) DEPT
(ALTER COLUMN) VARCHAR(30) NOT NULL;
47.
아래와 같은 테이블이 있을 때 아래의 SQL 구문이 순서대로 수행되었을 때 마지막 SQL의 수행 결과.
INSERT INTO TABLE(CO1, COL2) VALUES('ABCD', NULL); -- (null)
INSERT INTO TABLE(CO1, COL2) VALUES('BC', NULL); -- (null)
ALTER TABLE TABLE MODIFY COL2 DEFAULT 10;
INSERT INTO TABLE(CO1, COL2) VALUES('XY', NULL); -- (null)
INSERT INTO TABLE(CO1, COL2) VALUES('EXD'); -- (10)
SELECT SUM(COL2) FROM TABLE; -- (10)
48.
테이블 생성을 위한 권한을 주기 위해 아래의 SQL을 완성하시오.
(GRANT) CREATE TABLE TO USER01;
49.
450
255
255
100
위와 같은 정렬 순서가 나오게 만들려면 ORDER BY DESC.
50.
SELECT UPPER("Sqldeveloper")FROM DUAL;
-> SQLDEVELOPER 소문자에서 대문자로 변환
'Language > RDBMS' 카테고리의 다른 글
옵티마이저와 실행계획 (0) | 2023.03.19 |
---|---|
계층형 질의 (0) | 2023.03.16 |
[SQLD]Prev-Exam Solving (21st) (0) | 2023.03.15 |
SQL 함수 (0) | 2023.03.08 |
분산 데이터베이스의 성능 (0) | 2023.03.07 |