본문 바로가기
[자격증]/SQLD

[오답풀이] 2과목

by 에디터 윤슬 2025. 3. 6.

1. SUBSTR 결과가 다른 것을 고르시오

  • SELECT SUBSTR('DATABASE',7)FROM DUAL;
  • SELECT SUBSTR('DATABASE',-2)FROM DUAL;
  • SELECT SUBSTR('DATABASE',8,-2)FROM DUAL;
  • SELECT SUBSTR('DATABASE',INSTR('DATABASE','S'),2)FROM DUAL;
해설

1. `SELECT SUBSTR('DATABASE', 7) FROM DUAL;`
• `SUBSTR('DATABASE', 7)`은 문자열의 7번째 문자부터 끝까지 반환합니다.
• `'DATABASE'`에서 7번째 문자는 `'S'`이며, 결과는 `'SE'`입니다.
2. `SELECT SUBSTR('DATABASE', -2) FROM DUAL;`
• `SUBSTR('DATABASE', -2)`은 문자열의 뒤에서 두 번째 문자부터 끝까지 반환합니다.
• `'DATABASE'`에서 뒤에서 두 번째 문자는 `'S'`, 결과는 `'SE'`입니다.
3. `SELECT SUBSTR('DATABASE', 8, -2) FROM DUAL;`
• `SUBSTR('DATABASE', 8, -2)`는 시작 위치가 8이고 길이가 음수(-2)로 지정되었습니다.
• SQL에서 `SUBSTR` 함수의 길이 값은 음수가 될 수 없으므로, 이 구문은 유효하지 않으며 오류가 발생합니다.
4. `SELECT SUBSTR('DATABASE', INSTR('DATABASE','S'), 2) FROM DUAL;`
• `INSTR('DATABASE', 'S')`는 문자열 `'S'`가 처음 등장하는 위치를 반환합니다. `'DATABASE'`에서 `'S'`는 7번째 위치에 있습니다.
• `SUBSTR('DATABASE', 7, 2)`는 7번째 문자부터 길이 2만큼 반환하므로 결과는 `'SE'`입니다.

2. 아래 테이블 및 결과가 있을 때 SQL수행으로 올바른 것은?

[table1]
COL1 COL2
-----------
1 10
2 20
3 30

[table2]
COL1 COL2
------------
1 10
2 20

[RESULT]
COL1
----
3
  • WHERE NOT EXISTS (SELECT 1 FROM T2 B WHERE B.COL1 = A.COL1)
  • SELECT table1.COL1 FROM table1 INNER JOIN table2 ON table1.COL1 = table2.COL1;
  • SELECT COL1 FROM table2 EXCEPT SELECT COL1 FROM table1;
  • SELECT COL1 FROM table1 WHERE COL1 IN (SELECT COL1 FROM table2);

 

3. TABLE1, TABLE2, TABLE3 테이블에 대한 아래의 INSERT 결과 개수로 알맞은 것은?

[TABLE0] 
N1 
--- 
1 
2 
5 

INSERT FIRST 
WHEN N1 >= 2 THEN INTO TABLE1(N1) VALUES(N1) 
WHEN N1 >= 3 THEN INTO TABLE2(N1) VALUES(N1) 
ELSE INTO TABLE3 VALUES(N1) 
SELECT N1 FROM TABLE0;
  • 0,0,0
  • 1,1,1
  • 2,0,1
  • 0,0,1
해설

(2,0,1)

 

`INSERT FIRST`는 조건문을 평가할 때 첫 번째로 만족하는 조건만 실행하고, 이후 조건은 무시합니다. 따라서, 각 행에 대해 조건을 순차적으로 평가하여 해당 조건에 맞는 테이블에 데이터를 삽입합니다.

 

테이블 삽입된 데이터 개수
table1 2, 5 2
table2 없음 0
table3 1 1

4. 아래 SQL에서 위반된 트랜잭션의 특징은?

UPDATE TAB1 SET COL1 = 'VALUE1'; 

UPDATE TAB1 SET COL1 = 'VALUE2'; 

COMMIT; 

COMMIT;
  • 원자성
  • 일관성
  • 고립성
  • 지속성
해설

위 SQL 쿼리에서 두 개의 `COMMIT` 명령이 사용되었습니다. 트랜잭션의 특징에 따라, 이 방식은 원자성(Atomicity)을 위반하게 됩니다.

 

[ACID 속성]
ACID는 데이터베이스 트랜잭션의 4가지 핵심 속성을 나타냅니다:
1. 원자성 (Atomicity):
• 트랜잭션은 전체 작업이 성공하거나 실패해야 합니다. 즉, 트랜잭션 내 모든 작업이 완료되거나, 하나라도 실패하면 전체 작업이 롤백됩니다.
• 두 개의 `COMMIT` 명령을 사용하면 트랜잭션이 나눠져 원자성을 위반하게 됩니다. 트랜잭션은 하나의 단위로 처리되어야 하며, 중간에 부분적으로 완료된 상태를 허용하지 않습니다.

 

2. 일관성 (Consistency):
• 트랜잭션은 데이터베이스를 한 유효한 상태에서 다른 유효한 상태로 변경해야 합니다.
• 일관성은 데이터 무결성을 보장하며, 정의된 규칙이나 제약 조건을 위반하지 않아야 합니다.

 

3. 고립성 (Isolation):
• 트랜잭션은 서로 독립적으로 실행되어야 하며, 다른 트랜잭션의 중간 결과를 볼 수 없어야 합니다.
• 고립성은 동시 실행 시 데이터 충돌을 방지합니다.

 

4. 지속성 (Durability):
• 트랜잭션이 `COMMIT`된 후에는 시스템 장애가 발생하더라도 변경 사항이 영구적으로 저장됩니다.

 

왜 원자성이 위반되었는가?
• 트랜잭션은 하나의 단위로 처리되어야 하지만, 두 개의 `COMMIT` 명령으로 인해 트랜잭션이 분리되었습니다.
• 첫 번째 `COMMIT` 후에는 데이터베이스가 부분적으로 변경된 상태로 저장됩니다. 만약 두 번째 `UPDATE`가 실패하더라도 첫 번째 변경 사항은 롤백되지 않으므로 원자성이 깨집니다.

 

다른 속성과 비교
• 일관성: 데이터베이스는 여전히 유효한 상태를 유지하므로 일관성 위반은 아닙니다.
• 고립성: 다른 트랜잭션과의 충돌이 언급되지 않았으므로 고립성과는 관련이 없습니다.
• 지속성: `COMMIT` 후 데이터는 영구적으로 저장되므로 지속성이 위반되지 않습니다.

5. 실행 결과는?

[t1]
col1
1
2
3
4
5

[t2]
col1
1
1
1
3
6

select count(*)
from t1, t2
where t1.col1 = t2.col1;
  • 2
  • 3
  • 4
  • 5
1
1
1
3

 

6. 아래 SQL 실행값을 고르시오

INSERT INTO TABLE50 VALUES(1); 
INSERT INTO TABLE50 VALUES(2); 
INSERT INTO TABLE50 VALUES(3); 
SAVEPOINT SQL1; 
INSERT INTO TABLE50 VALUES(4); 
INSERT INTO TABLE50 VALUES(5); 
COMMIT; 
INSERT INTO TABLE50 VALUES(6); 
ROLLBACK TO SAVEPOINT SQL1; 

SELECT * FROM TABLE50;
  • 4
  • 5
  • 6
  • 7
해설

1. INSERT문에 의해 순서대로 1,2,3의 값을 TABLE50에 삽입합니다. 

2. SAVEPOINT SQL1을 지정합니다. 

3. 값 4,5를 TABLE50에 삽입합니다. 

4. COMMIT으로 현재 상태를 확정합니다. 

5. 값 6을 TABLE50에 삽입합니다. 

6.SQL1 시점으로 ROLLBACK합니다. 이때 확정된 4,5의 값은 되돌아 가지 않습니다. 

따라서 1,2,3,4,5가 최종 저장된 값입니다.

 

7. View에 대한 설명으로 적절하지 않은 것은?

  • 컬럼 추가가 되더라도 View 를 변경하지 않아 응용프로그램 변경이 없다.
  •  
  • VIEW는 논리적 데이터 독립성을 제공한다.
  •  
  • 뷰는 독립적인 인덱스를 가질 수 없다.
  •  
  • 뷰로 정의를 변경할 수 없다.
해설

1. View의 주요 특징
• View는 가상 테이블로, 실제 데이터를 저장하지 않고, 정의된 SQL 쿼리를 기반으로 동적으로 데이터를 생성합니다.
• View는 데이터의 보안, 단순화, 논리적 독립성을 제공하며, 복잡한 쿼리를 단순화하여 사용자가 쉽게 접근할 수 있도록 합니다.
• View는 다음과 같은 특징을 가집니다:
• 논리적 데이터 독립성 제공: View는 기본 테이블의 구조가 변경되더라도 사용자가 동일한 방식으로 데이터를 조회할 수 있게 합니다.
• 독립적인 인덱스를 가질 수 없다: View는 실제 데이터를 저장하지 않으므로, 독립적으로 인덱스를 생성할 수 없습니다.
• 정의 변경 불가: View 자체는 정의된 SQL 쿼리를 기반으로 하며, View를 통해 기본 테이블의 구조를 변경할 수 없습니다.

 

[선택지 분석]
1. 컬럼 추가가 되더라도 View를 변경하지 않아 응용프로그램 변경이 없다. (부적절)
• 기본 테이블에 컬럼이 추가되더라도 View는 기존에 정의된 쿼리에 포함되지 않은 새로운 컬럼을 자동으로 포함하지 않습니다.
• 즉, View를 수정하지 않으면 새로운 컬럼은 응용프로그램에서 사용할 수 없습니다.
• 따라서 이 설명은 부적절합니다.
2. VIEW는 논리적 데이터 독립성을 제공한다. (적절)
• View는 기본 테이블과 독립적으로 동작하며, 기본 테이블의 구조가 변경되더라도 사용자는 동일한 방식으로 데이터를 조회할 수 있습니다.
• 이는 논리적 데이터 독립성을 제공하는 대표적인 사례입니다.
3. 뷰는 독립적인 인덱스를 가질 수 없다. (적절)
• View는 실제 데이터를 저장하지 않는 가상 테이블이므로, 독립적으로 인덱스를 생성할 수 없습니다.
• 다만, 특정 DBMS에서는 “인덱스가 있는 뷰”를 지원하기도 하지만, 이는 일반적인 뷰의 특성과 다릅니다.
4. 뷰로 정의를 변경할 수 없다. (적절)
• View는 기본적으로 읽기 전용이며, 기본 테이블의 정의(예: 컬럼 추가/삭제)를 직접 변경할 수 없습니다.
• 일부 DBMS에서 `INSTEAD OF` 트리거 등을 사용해 제한적으로 수정 작업을 지원하기도 하지만, 이는 일반적인 뷰의 기능과는 다릅니다.

 

8. Database의 논리적 업무 최소 단위는?

  • 트랜잭션
  • 쿼리
  • 도메인
  • 인스턴스
해설

트랜잭션은 데이터베이스의 논리적 업무 최소 단위입니다.

 

9. 아래의 SQL에 대한 설명으로 알맞은 것은?

SELECT ...
FROM .
WHERE COL1 LIKE 'A%'
  • 소문자 A, 대문자 A가 포함된 모든 ROW
  • A로 끝나는 모든 ROW
  • A가 포함된 모든 ROW
  • 대문자 A 로 시작하는 모든 ROW
해설

• `LIKE 'A%'`는 문자열 패턴 매칭을 수행하는 조건입니다.
• `A%`의 의미:
• `'A'`로 시작하는 문자열을 찾습니다.
• `%`는 0개 이상의 임의의 문자를 의미합니다.
• 따라서, `COL1` 값이 대문자 `'A'`로 시작하고 뒤에 어떤 문자(또는 아무 문자도 없을 수 있음)가 올 수 있는 모든 행을 반환합니다.

'[자격증] > SQLD' 카테고리의 다른 글

[오답 풀이] 38회차 기출 변형  (0) 2025.03.07
[오답 풀이] 1과목  (0) 2025.03.06
[2과목] 관리 구문  (0) 2025.03.03
[2과목] SQL 활용  (0) 2025.03.02
[2과목] SQL 기본  (0) 2025.03.01