해설: 트랜잭션의 특징으로는 A(원자성), C(일관성), I(고립성), D(지속성)이 있다.
▶ 원자성(Atomicity) : 트랜잭션과 관련된 일은 모두 실행되던지 모두 실행되지 않도록 하던지를 보장하는 특성이다. ▶ 일관성(Consistency) : 트랜잭션이 성공했다면, 데이터베이스는 그 일관성을 유지해야 한다. 일관성은 특정한 조건을 두고, 그 조건을 만족하는지를 확인하는 방식으로 검사할 수 있다. ▶ 고립성(독립성, Isolation) : 트랜잭션을 수행하는 도중에 다른 연산작업이 끼어들지 못하도록 한다. 임계 영역을 두는 것으로 달성할 수 있다. ▶ 지속성(Durability) : 성공적으로 트랜잭션이 수행되었다면, 그 결과는 완전히 반영이 되어야 한다. 완전히 반영되면 로그를 남기게 되는데, 후에 이 로그를 이용해서 트랜잭션 수행전 상태로 되돌릴 수 있어야 한다. 때문에 트랜잭션은 로그 저장이 완료된 시점에서 종료가 되어야 한다.
해설: MERGE INTO를 사용하면 INSERT와 UPDATE를 한 번에 수행할 수 있다. MERGE는 DML이다.
MERGE_INTO 변경할테이블 USING ___ ON ___ WHEN MATCHED THENUPDATESET 컬럼='값' WHEN NOT MATCHED THEN ___ INSERT VALUES
MERGE INTO dept AS a
USING (SELECT 1 AS dual) AS b
ON (a.deptno = 50)
WHEN MATCHED THEN
UPDATE SET a.dname = 'IT', a.loc = 'SOUTHLAKE'
WHEN NOT MATCHED THEN
INSERT(deptno, dname, loc) VALUES(50, 'IT', 'SOUTHLAKE');
문제 31
Q. INSERT, UPDATE, DELETE(DML)를 잘못 눌렀을 때 원래대로 되돌릴 수 있는 명령어는?
해설: DDL(CREATE, ALTER, DROP, TRUNCATE, RENAME)을 사용할 경우 자동으로 커밋(Auto Commit)이 된다. DML은 자동으로 커밋이 되지 않는다. ROLLBACK 함수를 사용할 경우 DML을 사용하더라도 원래대로 되돌릴 수 있도록 해준다.
첫 번째, 데이터모델링을 할 때 정규화를 정확하게 수행한다. 두 번째, 데이터베이스 용량 산정을 수행한다. 세 번째, 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다. 네 번째, 용량과 트랜잭션의 유형에 따라 (ㄱ)를 수행한다. 다섯 번째, 이력 모델의 조정, PK/FK 조정, 슈퍼 타입/서브 타입 조정 등을 수행한다.
해설: 성능을 고려한 데이터 모델링의 순서는 정규화 -> DB 용량 산정 -> 트랜잭션 유형 파악 -> 반정규화(역정규화) -> 이력 모델 조정, PK/FK 조정, 슈퍼 타입/서브 타입 조정이다.
출처: 노랭이 문제집⭐
문제 50 ⭐
Q. 아래 설명에서 데이터 액세스 성능을 향상시키기 위해 적용하는 방법에 대해서 (ㄱ)을 채우시오.
하나의 테이블에 많은 양의 데이터가 저장되면 인덱스를 추가하고 테이블을 몇 개로 쪼개도 성능이 저하되는 경우가 있다. 이때 논리적으로는 하나의 테이블이지만, 물리적으로는 여러 개의 테이블로 분리하여 데이터 액세스 성능도 향상시키고, 데이터 관리 방법도 개선할 수 있도록 적용하는 기법을 ( ㄱ ) 이라고 한다.
Q. 아래의 고객지역 테이블을 대상으로 질의 결과와 같이 거주지와 근무지를 출력하고자 한다. 아래 SQL의 ( ㄱ ) 안에 들어갈 내용을 작성하시오.
( ㄱ ) 은 데이터베이스의 논리적 연산단위로서 밀접히 관련되어 분리될 수 없는 한 개 이상의 데이터베이스 조작을 가리킨다. ( ㄱ )의 종료를 위한 대표적 명령어로서는 데이터에 대한 변경사항을 데이터베이스에 영구적으로 반영하는 ( ㄴ )과 데이터에 대한 변경사항을 모두 폐기하고 변경 전의 상태로 되돌리는 ( ㄷ )이 있다.
해설: 데이터베이스의 논리적 연산 단위 -> 트랜잭션, 영구적 반영 -> 커밋, 변경사항 폐기 -> 롤백
출처: 노랭이 문제집⭐
문제 54 ⭐
Q. 아래의 상품 테이블의 데이터에 대하여 관리자가 아래와 같이 SQL 문장을 실행하여 데이터를 변경하였다. 데이터 변경 후의 상품ID '001'의 최종 상품명을 작성하시오.
[SQL 구문]
BEGIN TRANSACTION;
SAVE TRANSACTION SP1;
UPDATE 상품 SET 상품명 = 'LCD-TV' WHERE 상품ID = '001';
SAVE TRANSACTION SP2;
UPDATE 상품 SET 상품명 = '평면-TV' WHERE 상품ID = '001';
ROLLBACK TRANSACTION SP2;
COMMIT;
해설: WHERE 절은 SELECT, FROM 절과 함께 쓰이는 조건절이다. 참고로 GROUP BY 절의 조건절로 HAVING을 쓴다.
출처: 노랭이 문제집⭐
문제 56 ⭐
Q. 아래는 SEARCHED_CASE_EXPRESSION SQL 문장이다. 이때 사용된 SEARCHED_CASE_EXPRESSION은 SIMPLE_CASE_EXPRESSION을 이용해 똑같은 기능을 표현할 수 있다. 아래 SQL 문장의 ( ㄱ ) 안에 들어갈 표현을 작성하시오. (스칼라 서브쿼리는 제외함.)
[SEARCHED_CASE_EXPRESSION 문장 사례]
SELECT LOC,
CASE WHEN LOC = 'NEW YORK' THEN 'EAST'
ELSE 'ETC'
END as AREA
FROM DEPT;
[SIMPLE_CASE_EXPRESSION 문장 사례]
SELECT LOC,
CASE ( ㄱ )
ELSE 'ETC'
END as AREA
FROM DEPT;
해설: 사원이 없는 부서 정보도 같이 출력하는 건 부서(DEPT) LEFT (OUTER) JOIN 사원(EMP)와 같이 사용했다는 뜻이다. 부서 정보는 무조건 전부 출력되는데 사원이 없을 경우, NULL로 채워져서 출력된다.
출처: 노랭이 문제집⭐
문제 61 ⭐
Q. 다음과 같은 2개의 릴레이션이 있다고 가정하자. student의 기본키는 st_num이고, department의 기본키는 dept_num이다. 또한 student의 d_num은 department의 dept_num을 참조하는 외래키이다. 아래 SQL문의 실행 결과 건수는?
SELECT count(st_name)
FROM student s
WHERE not exists
(SELECT *
FROM department d
WHERE s.d_num = d.dept_num
and dept_name = '전자계산학과');
CONNECT BY PRIOR C1 = C2에서 순방향 전개(C2에서 C1으로 이동)임을 파악할 수 있다. 따라서 A -> B -> C -> D 또는 A -> C -> B -> D 순서대로 정렬이 수행되는데, ORDER SIBLINGS BY C3 DESC에서 형제 노드의 경우, 내림차순(DESC)으로 정렬하라는 조건이 있으므로 A -> C -> B -> D 순서대로 정렬이 수행된다. 따라서 2번째 표시될 값은 C이다.
출처: 노랭이 문제집⭐
문제 63 ⭐
Q. 아래 결과를 얻기 위한 SQL문에서 ( ㄱ ) 에 들어갈 함수를 작성하시오.
[SQL문]
SELECT 구매고객, 구매월, COUNT(*) "총 구매건", SUM(구매금액) '총 구매액'
FROM 구매이력
GROUP BY ( ㄱ )(구매고객, 구매월)
해설: 문제에서 주어진 결과를 보면 (구매고객, 구매월), (구매고객, NULL), (NULL, NULL)이 표현되어 있다. 이처럼 (A, B), (A, NULL), (NULL, NULL)과 같이 표현될 경우 ROLLUP 함수가 쓰인 것이다. (참고로 CUBE 함수의 경우 (A, B), (A, NULL), (NULL, B), (NULL, NULL)와 같이 표현된다.)
출처: 노랭이 문제집⭐
문제 64 ⭐
Q. 아래 설명 중, ( ㄱ ), ( ㄴ ) 에 해당하는 내용을 작성하시오.
DBMS에 생성된 USER와 다양한 권한들 사이에서 중개 역할을 할 수 있도록 DBMS에서는 ROLE을 제공한다. 이러한 ROLE을 DBMS USER에게 부여하기 위해서는 ( ㄱ ) 명령을 사용하며, ROLE을 회수하기 위해서는 ( ㄴ ) 명령을 사용한다.
DBMS에 사용자를 생성하면 기본적으로 많은 권한을 부여해야 한다. 많은 DBMS에서는 DBMS 관리자가 사용자별로 권한을 관리해야 하는 부담과 복잡함을 줄이기 위하여 다양한 권한을 그룹으로 묶어 관리할 수 있도록 사용자와 권한 사이에서 중개 역할을 수행하는 ( ㄱ ) 을 제공한다.