Certification/SQLD 개발자

[SQLD] SQLD 문제 풀이 21-30

개발자하소서 2023. 10. 11. 18:01
728x90
반응형
SMALL

📌 SQLD 문제 풀이 21- 30 

 
 
21. 아래와 같은 데이터 모델에서 데이터를 조작하려고 한다. 다음 중 오류가 발생하는 SQL 문장인 것은?

 

①  INSERT INTO BOAED VALUES (1, 'Q&A', 'Y', SYSDATE, 'Q&A 게시판');

② INSERT INTO BOAED (BOARD_ID, BOARD_NM, USE_YN, BOARD_DESC) VALUES (100, 'F&Q', 'Y', SYSDATE, 'F&Q 게시판');

③ UPDATE BOARD SET USE_YN = 'N' WHERE BOARD_ID = '1';

④ UPDATE BOARD SET BOARD_ID = 200  WHERE BOARD_ID = '100';

 

더보기

정답 : ②

 

SQL은 REG_DATE 칼럼에 NOT NULL 제약조건이 있지만, INSERT INTO 구문에는 REG_DATE 컬럼이 대입되지 않아 NULL 로 입력되므로 오류가 발생한다. 

 

[테이블에 데이터를 입력하는 두 가지 유형]

INSERT INTO 테이블명 (COLUMN LIST) VALUES (COLUMN LIST에 넣을 VALUES LIST);


INSERT INTO 테이블명 VALUES (전체 COLUMN LIST 에 넣을 VALUES LIST);

 

[입력된 데이터의 수정]

UPDATE 테이블명 
SET 수정되어야할 칼럼명 = 수정되기를 원하는 새로운 값 ;

 


 
 
22. 아래 데이터 모델과 같이 고객과 주문 테이블이 생성되어 있으며, 고객과 주문 테이블에 입력되어 있는
데이터는 아래 표와 같다. 이 때 FX_001이라는 제약조건을 아래 SQL과 같이 설정하였다. 다음 중 오류 없이 정상적으로 수행되는 SQL 2개 고르시오
 

[SQL]

ALTER TABLE 주문 ADD CONSTRAINT FK_001 FOREIGN KEY (고객ID)
	REFERENCES 고객 (고객ID) ON DELETE SET NULL;

 

①  INSERT INTO 고객 VALUES ('C003' , '강감찬' , '2014-01-01');

②  INSERT INTO 주문 VALUES ('0005' , 'C003' , '2013-12-28');

③  DELETE FROM 주문 WHERE  주문번호  IN ('0001' , '0002');

 DELETE FROM 고객 WHERE  고객ID =  'C002';

 

더보기

정답 : ①, ③

 

②  INSERT INTO 주문 VALUES ('0005' , 'C003' , '2013-12-28');

-----> 고객테이블에 존재하지 않는 고객 ID의 주문을 입력하려고 하면 무결성 제약 오류가 발생한다. 

 

  DELETE FROM 고객 WHERE  고객ID =  'C002';

------> 고객 테이블에서 한 컬럼을 삭제하면 주문테이블은 삭제된 컬럼내부의 값이 NULL 로 변경된다는 SQL 구문이 주어졌기때문에 주문 테이블의 고객ID 컬럼이 NOT NULL 이기 때문에, NULL로 없데이트 될 수 없어 안됨 

 

 


 
 
23. 개발 프로젝트의 표준은 모든 삭제 데이터에 대한 로그를 남기는 것을 원칙으로 하고, 테이블 삭제의 경우는 허가된 인력만이 정기적으로 수행 가능하도록 정하고 있다. 개발팀에서 사용 용도가 없다고 판단한 STADIUM 테이블의 데이터를 삭제하는 가장 좋은 방법은 무엇인가?
 

 DELETE FROM STADIUM;

 DELETE * FROM STADIUM;

 TRUNCATE TABLE STADIUM;

 DROP TABLE STADIUM;

 

더보기

 정답 : ①

 

- TRUNCATE와 DROP 은 로그를 남기지 않는다.

 

- DELETE 구문은 * 을 사용하지 않는다. 

 

DROP TRUNCATE DELETE
DDL DDL DML
ROLLBACK 불가능 ROLLBACK 불가능 COMMIT 이전 ROLLBACK 가능
AUTO COMMIT AUTO COMMIT  사용자 COMMIT
용량 모두 반환 테이블 최초 생성시 용량만 남기고,
모두 반환 
용량 반환하지 않음
테이블의 정의 자체를 완전히 삭제함 테이블을 최초 생성된 초기상태로
만듬
데이터만 삭제 


 

 

 

 


24. 아래의 고객지역 테이블을 대상으로 질의 결과와 같이 거주자와 근무지를 출력하고자 한다. 아래 SQL의 ㄱ 안에 들어갈 내용을 작성하시오 
 

 

[SQL]

SELECT                ㄱ                         거주지, 근무지

FROM       고객지역;

 

 

더보기

정답 : DISTINCT 

 

- 데이터의 중복을 제거하는 명령어는 'DISTINCT'이다. 

 

- GROP BY  문을 사용하여 다음과 같이 중복 데이터를 제거할 수 있다.

 

SELECT 거주지, 근무지 

FROM 고객지역

GROUP BY 거주지, 근무지;

 

 


 
 
25. 다음 중 아래와 같은 상황에서 사용할 수 있는 SQL 명령어는?
 


우리가 관리하는 데이터베이스의 '매출' 테이블이 너무나 많은 디스크 용량을 차지하여 '매출' 테이블에서 필요한 데이터만을

추출하여 별도의 테이블로 옮겨 놓았다.  이후 '매출' 원본 테이블의 데이터를 모두 삭제함과 동시에 디스크 사용량도 초기화

하고자 한다. (단, '매출' 테이블의 스키마 정의는 유지한다.)

 

①  TRUNCATE TABLE 매출;

②  DELETE FROM 매출;

③  DROP TABLE 매출;

 DELETE TABLE FROM 매출;  

 

더보기

정답 : ①

 

- 특정 테이블의 모든 데이터를 삭제하고, 디스크 사용량을 초기화 하기 위해서는 TRUNCATE TABLE을 사용하여야 한다. 

 

- DELETE 구문은 테이블의 데이터를 모두 삭제하지만, 디스크 사용량을 초기화 하진 않는다. 

 

- DROP 구은 테이블의 데이터를 모두 삭제하고 디스크 사용량도 초기화 할 수 있지만, 테이블의 스키마 정의도 함께 삭제 된다. 

 

- TRUNCATE TABLE은 테이블 자체가 삭제되는 것이 아니라 해당 테이블에 들어있던 모든 행들이 제거되고 저장 공간을 재사용 가능하도록 해제 한다. 

 

- 테이블 구조를 완전히 삭제하기 위해서는 DROP TABLE 을 실행하면 된다. 

 


 
 
26. 다음 중 DELETE와 TRUNCATE, DROP 명령어에 대해 비교한 설명으로 가장 부적절한 것을 2개 고르시오 
 
 


① 특정 테이블에 대하여 WHERE 조건절이 없는 DELETE 명령을 수행하면 DROP TABLE 명령을 수행했을 때와 똑같은 결과를

     얻을 수 있다.

② DROP 명령어는 테이블 정의 자체를 삭제하고, TRUNCATE 명령어는 테이블을 초기상태로 만든다.

③ TRUNCATE 명령어는 UNDO 를 위한 데이터를 생성하지 않기 때문에 동일 데이터량 삭제 시 DELETE보다 빠르다.

④ DROP은 Auto Commit이 되고, DELETE와 TRUNCATE는 사용자 Commit으로 수행된다.

 

더보기

 정답 : ①, ④

 

- DROP 은 모든 물리적인 구조가 완전히 삭제되는 것으로, 테이블의 정의 자체를 삭제한다. 

 

- DELETE는 데이터만 삭제가 된다.

 

- TRUNCATE 는 테이블을 최초 생성된 초기 상태로 만든다. 

 

- DROP이랑 TRUNCATE 는 AUTO COMMIT 이다. 

 

- DELETE는 사용자 COMMIT이다. 

 

- TRUNCATE와 DROP 은 로그를 남기지 않는다.


 
 
 
 
 
27. 데이터베이스 트랜잭션에 대한 설명으로 가장 부적절한 것을 2개 고르시오
 


① 원자성(atomicity) : 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로

    남아 있어야 한다.
 

② 일관성(consistency) : 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.



③ 고립성(isolation) : 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다.


④ 지속성(durability) : 트랜잭션이 실행 되기 전의 데이터베이스 내용이 잘못 되어 있지 않다면

    트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안된다.

 

더보기

 정답 : ②, ④

 

 

[트랜잭션의 특징]  = ACID

 

특성 설명
원자성
(ATOMICITY)
트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태

남아 있어야 한다. ( ALL or Nothing)
일관성
(CONSISTENCY)
트랜잭션이 실행 되기 전의 데이터베이스 내용이 잘못 되어 있지 않다면 

트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안된다. 
고립성
(ISOLATION)
트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다.
지속성
(DURABILITY)
트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.

 

 


 
 
28. 데이터베이스 트랜잭션에 대한 격리성이 낮은 경우 발생할 수 있는 문제점으로 가장 부적절한 것을 2개 고르시오 
 


① Dirty Read : 다른 트랜잭션에 의해 수정되었고 이미 커밋된 데이터를 읽는 것을 말한다.

② Non-Repeatble Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데,

    그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에 두 쿼리 결과가 다르게 나타나는 현상을 말한다.

③ Phantom Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 첫번째 쿼리에서 없던
   
    유령 레코드가 두번째 쿼리에서 나타나는 현상을 말한다.

④ Isolation : 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다. 

 

더보기

정답 : ①, ④

 

① Dirty Read : 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽는 것을 말한다. 

 

④ Isolation : (트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다.) 

는 데이터베이스 트랜잭션의 문제점이 아니라, 목표라고 할 수 있다.

 

 


 


 
 
29. 테이블 A에 대해 아래와 같은 SQL을 수행하였을 때 테이블 A의 ID '001'에 해당하는 최종 VAL 값이

ORACLE에서는 200, SQL SERVER에서는 100이 되었다. 다음 설명 중 가장 부적절한 것은?
(단, AUTO COMMIT은 FALSE로 설정되었다.)
 
 

[SQL]

UPDATE A SET VAL = 200 WHERE ID = '001';

CREATE TABLE B (ID CHAR(3) PRIMARY KEY);

ROLLBACK;

 


①  ORACLE에서는 CREATE TABLE 문장을 수행한 후, 묵시적으로 COMMIT이 수행 되어 VAL  값은 200이 되었다.

② SQL Server 에서는 ROLLBACK 문장에 의해 UPDATE가 취소되어 VAL 값은 100이 되었다.

③ ORACLE에서는 CREATE TABLE 문장 수행에 의해 VAL 값은 200 이 되었지만, ROLLBACK 실행으로 인하여 최종적으로 B테이블은 생성 되지 않았다. 

④ SQL Server에서는 ROLLBACK 실행으로 인하여 UPDATE가 취소되었으며, 최종적으로 B테이블은 생성되지 않았다.

 

더보기

 정답 : ③
 
①  ORACLE에서는 DDL 문장(Create/Alter/Drop/Rename) 수행 이후 자동으로 COMMIT 을 수행한다
 

② SQL Server 에서는  DDL 문장(Create/Alter/Drop/Rename) 수행 이후 자동으로 commit을 수행하지 않는다.

 

③ ORACLE에서는 DDL 문장(Create/Alter/Drop/Rename) 수행은 내부적으로 트랜잭션을 종료시키므로, B테이블은 생성된다.


④ SQL Server에서는 CREATE TABLE 문장도 TRANSACTION의 범주에 포함된다. 

    그러므로 ROLLBACK 문장에 의해서 최종적으로 B테이블은 생성되지 않는다. 


 
 
 
30. 아래 내용의 ㄱ, ㄴ, ㄷ 에 해당하는 단어를 순서대로 작성하시오.
 


               ㄱ           은 데이터베이스의 논리적 연산단위로서 밀접히 관련되어 분리될 수 없는 한 개 이상의

    데이터베이스 조작을 가리킨다. 

               ㄱ          의 종료를 위한 대표적 명령어로서는 데이터에 대한 변경사항을 데이터베이스에 영구적으로 반영하는 

               ㄴ           과 데이터에 대한 변경사항을 모두 폐기하고 변경전의 상태로 되돌리는

            ㄷ          이 있다.

 

더보기

정답 

 ㄱ. 트랜잭션 Transaction

 ㄴ. 커밋 commit

 ㄷ.  롤백 rollback 

728x90
반응형
LIST

'Certification > SQLD 개발자' 카테고리의 다른 글

[SQLD] SQLD 문제 풀이 41-50  (1) 2023.10.14
[SQLD] SQLD 문제 풀이 31-40  (1) 2023.10.14
[SQLD] SQLD 문제 풀이 11-20  (0) 2023.10.10
[SQLD] SQLD 문제 풀이 1-10  (1) 2023.10.09
[SQLD] 51회 시험 일정 및 계획  (0) 2023.09.07