SQL 자격검정 실전문제 오답노트 #2

jjinny_0609·2023년 3월 1일
0

데이터베이스

목록 보기
9/17
post-custom-banner

과목 2. SQL 기본 및 활용

문제3. 아래 내용에 해당하는 SQL 명령어의 종류를 작성하시오.

논리적인 작업의 단위를 묶어 DML에 의해 조작된 결과를 작업단위(Transcation)별로 제어하는 
명령어인 Commit, Rollback, Savepoint 등이 여기에 해당하며, 
일부에서는 DCL(Data Control Language)로 분류하기도 한다.

[해설]
TCL
데이터의 구조를 정의하는 명령어는 DDL(데이터 정의어)에 해당하며 DDL 문으로는 CREATE, ALTER, DROP, RENAME이 있다.




문제10. 다음 중 테이블 생성시 칼럼별 생성할 수 있는 제약조건(Constraints)에 대한 설명으로 가장 부적절한 것은?
① UNIQUE : 테이블 내에서 중복되는 값이 없으며 NULL 입력이 불가능하다.
② PK : 주키로 테이블당 1개만 생성이 가능하다.
③ FK : 외래키로 테이블당 여러 개 생성이 가능하다.
NOT NULL : 명시적으로 NULL 입력을 방지한다.

[해설]
① : PK = UNIQUE & NOT NULL 특징을 가짐.
UNIQUE는 테이블 내에서 중복되는 값이 없지만, NULL 입력이 가능하다.




문제13. 다음 중 아래와 같은 문장으로 '학생' 테이블을 생성한 후, 유효한 튜플(Tuple)들을 삽입하였다. SQL 1, SQL 2 문장의 실행 결과로 가장 적절한 것은?

생성) create table 학생 (학번 char (8) primary key, 장학금 integer) :
SQL1: select count(*) from 학생
SQL2: select count(학번) from 학생

SQL1, SQL2 문장의 실행 결과는 다를 수 있으며, 그 이유는 장학금속성(Attrubute)에 널(Null) 값이 존재할 수 있기 때문이다.
② SQL1, SQL2 문장의 실행 결과는 항상 다르다.
③ SQL1, SQL2 문장의 실행 결과는 항상 같다.
④ SQL1, SQL2 문장의 실행 결과는 다를 수 있으며, 그 이유는 학번 속성(Attribute)에 널(Null) 값이 존재할 수 있기 때문이다.

[해설] ③ : 학번 칼럼이 PK 이기 때문에 NULL 값이 없다.




문제15. 다음 중 데이터베이스 테이블의 제약조건(Constraint)에 대한 설명으로 가장 부적절한 것은?
Check 제약조건(Constraint)은 데이터베이스에서 데이터의 무결성을 유지하기 위하여 테이블의 특정 컬럼(Column)에 설정하는 제약이다.
② 기본키(Primary key)는 반드시 테이블 당 하나의 제약만을 정의할 수 있다.
③ 고유키(Unique Key)로 지정된 모든 칼럼들은 Null 값을 가질 수 없다.
④ 외래키(Foreign Key)는 테이블간의 관계를 정의하기 위해 기본키(Primary Key)를 다른 테이블의 외래키가 참조하도록 생성한다.

[해설] ③ : 고유키(Unique key)로 지정된 모든 칼럼은 Null 값을 가질 수도 있으므로 ③번 보기에 오류가 있다.




문제18. STADIUM 테이블의 이름을 STADIUM_JSC로 변경하는 SQL을 작성하시오(ASNI 표준 기준)

[해설] RENAME STADUIM TO STADIUM_JSC
RENAME OLD_OBJECT_NAME TO NEW_OBJECT_NAME (ANSI 표준 기준, 오라클과 동일함)
RENAME STADIUM TO STADIUM_JSC;




문제19. 표준 SQL(SQL:1999)에서 테이블 생성시 참조관계를 정의하기 위해 외래키(Foreign Key)를 선언한다. 관계형 데이터베이스에서 Child Table의 FK데이터 생성시 Parent Table에 PK가 없는 경우, Child Table 데이터 입력을 허용하지 않는 참조동작(Referential Action)인 것은?
① CASCADE
② RESTRICT
AUTOMATIC
④ DEPENDENT

[해설] ④

  • Delete(/Modify) Action : Cascade, Set Null, Set Default, Restric (부서 - 사원)
    1) Cascade : Master 삭제 시 Child 같이 삭제
    2) Set Null : Master 삭제 시 Child 해당 필드 Null
    3) Set Default : Master 삭제 시 Child 해당 필드 Default 값으로 설정
    4) Restrict : Child 테이블에 PK 값이 없는 경우만 Mater 삭제 허용
    5) No Action : 참조무결성을 위반하는 삭제/수정 액션을 취하지 않음

  • Insert Action : Automatic, Set Null, Set Default, Dependent (부서 - 사원)
    1) Automatic : Master 테이블에 PK에 없는 경우 Master PK를 생성 후 Child 입력
    2) Set Null : Master 테이블에 PK가 없는 경우 Child 외부키를 Null 값으로 처리
    3) Set Default : Master 테이블에 PK가 없는 경우 Child 외부키를 지정된 기본값으로 입력
    4) Dependent : Master테이블에 PK가 존재할 떄만 Child 입력 허용
    5) No Action : 참조무결성을 위반하는 입력 액션을 취하지 않음




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

① INSERT INTO BOARD VALUES (1, 'Q&A', 'Y', SYSDATE, 'Q&A 게시판');
② INSERT INTO BOARD VALUES(BOARD_ID, BOARD_NM, USE_YN, BOARD_DESC)
③ 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로 입력되므로 오류가 발생한다.




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

① DELETE FROM STADIUM;
② DELETE * FROM STADIUM;
TRUNCATE TABLE STADIUM;
④ DROP TABLE STADIUM;

[해설] ① : TRUNCATE TABLE과 DROP TABLE은 로그를 남기지 않으므로 개발 기준과 상충된다.
지문2는 문법에 맞지 않다.




문제29. 테이블 a에 대해 아래와 같은 SQL을 수행하였을 때 테이블 A의 ID '001'에 해당하는 최종 VAL의 값이 ORACLE에서는 200, SQL Server에서는 100이 되었다.

[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 문장 수행 후 자동으로 COMMIT을 수행한다.
② SQL Server에서는 DDL 문장 수행 후 자동으로 COMMIT을 수행하지 않는다.
③ ORACLE에서 DDL 문장의 수행은 내부적으로 트랜잭션을 종료 시키므로 B 테이블 생성된다.
④ SQL Server에서는 CREATE TABLE 문장도 TRANSACTION 범주에 포함된다. 그러므로 ROLLBACK 문장에 의해서 최종적으로 B 테이블은 생성되지 않는다.




문제31. 아래와 같은 테이블에 SQL 구문이 실행되었을 경우 최종 출력 값을 작성하시오.

① 0
2
③ 3
④ 4

[해설] ③
ROLLBACK 구문은 COMMIT되지 않은 상위의 모든 Transaction을 모두 rollback한다.




문제33. 아래의 ㉠ 을(를) 이용하여 조회하는 데이터의 조건을 설정하여 데이터를 제한할 수 있다.에 들어갈 내용을 적으시오.

SQL을 사용하여 데이터베이스에서 데이터를 조회할 때 원하는 데이터만을 검색하기 위해서
SELECT, FROM 절과 함께 ㉠ 을(를) 이용하여 조회하는 데이터의 조건을 설정하여 데이터를 제한할 수 있다.

[해설] WHERE 또는 WHERE 절
WHERE 절은 SQL을 이용하여 데이터베이스로부터 데이터를 검색할 때 조회되어야 하는 데이터를 필터링하는데 사용된다.




문제35. 다음 중 SELECT COL + COL3 FROM TAB_A; 의 결과로 가장 적절한 것은?

① NULL
80 10 60
③ 150
④50 NULL NULL

[해설] ④ NULL 값이 포함된 4칙 연산의 결과는 NULL이다.
30+20 = 50
NULL+40=NULL
50+NULL=NULL




문제41. 다음중 아래와 같은 2건의 데이터 상황에서 SQL의 수행 결과로 가장 적절한 것은? (단, 이해를 돕기 위해 ↓는 줄바꿈을 의미 → 실제 저장값이 아님, CHR(10) : ASCII 값 → 줄바꿈을 의미)

① 2
3
③ 5
④ 6

[해설] ③
라인수를 구하기 위해서 함수를 이용해서 작성한 SQL이다.
LENGTH : 문자열의 길이를 반환하는 함수
CHR : 주어진 ASCII 코드에 대한 문자를 반환하는 함수 (CHR(10) -> 줄바꿈)
REPLACE : 문자열을 치환하는 함수 (REPLACE(C1, CHR(10) -> 줄바꿈 제거)
함수 결과 값




문제42. 오라클환경에서 날짜형 데이터를 다룰 경우, 아래 SQL 결과로 가장 적절한 것은?

SELECT TO_CHAR(TO_DATE('2015.01.10 10', 'YYYY.MM.DD HH24')
+ 1/24/(60/10), 'YYYY.MM.DD HH24:MI:SS') FROM DUAL;

① 2015.01.10 11:01:00
2015.01.10 10:05:00
③ 2015.01.10 10:10:00
④ 2015.01.10 10:30:00

[해설] ③
오라클에서 날짜 연산은 숫자의 연산과 같다. 특정 날짜에 1을 더하면 하루를 더한 결과와 같으므로 1/24/60 = 1분을 의미한다. 1/24/(60/10) = 10분과 같으므로 2015년 1월 10일 10시 10시에 10분을 더한 결과와 같다.




문제43. 아래는 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'
FROM DEPT;                                                                     
[SIMPLE CASE_EXPRESSION 문장 사례]
SELECT LOC,
	CASE ㉠
      ELSE 'ETC'
    END as AREA
FROM DEPT;

[해설] LOC WHEN 'NEW YORK' THEN 'EAST'
SEARCHED_CASE_EXPRESSION을 SIMPLE_CASE_EXPRESSION으로 변환하는 문제임.
SELECT LOC,
CASE LOC WHEN 'NEW YORK' THEN 'EAST'
ELSE 'ETC'
END as AREA
FROM DEPT;




문제45. 다음 중아래 TAB1을 보고 각 SQL 실행 결과를 가장 올바르게 설명한 것을 고르시오.

SELECT COL2 FROM TAB1 WHERE COL1 = 'b';
→ 실행 결과가 없다.(공집합)
② SELECT ISNULL(COL2, 'X') FROM TAB1 WHERE COL1 = 'a';
→ 실행 결과로 'X를 반환한다.
③ SELECT COUNT(COL1) FROM TAB1 WHERE COL2 = NULL;
→ 실행 결과는 1이다.
④ SELECT COUNT(COL2) FROM TAB1 WHERE COL1 IN ('b','c');
→ 실행 결과는 1이다.

[해설] ②
ISNULL 함수는 결과값이 NULL일 경우 지정된 값을 반환한다. 칼럼의 NULL 값을 확인할 때는 IS NULL을 사용해야 한다.




문제46. 사원 테이블에서 MGR의 값이 7698과 같으면 NULL을 표시하고, 같지 않으면 MGR을 표시 하려고 한다. 아래 SQL 문장의 ㉠ 안에 들어갈 함수명을 작성하시오.

SELECT ENAME, EMPNO, MGR, ㉠ (MGR,7698) as NM FROM EMP;

[해설] NULLIF
해설 : NULLIF 함수는 EXPRI이 EXPR2와 같으면 NULL을, 같지 않으면 EXPR1을 리턴한다.
특정 값 NULL로 대체하는 경우에 유용하게 사용할 수 있다.
NULLIF(EXPR1, EXPR2)




문제48. 다음 중 아래와 같은 데이터 상황에서 SQL의 수행 결과로 가장 적절한 것은?

① 0
② 1
③ 6
14
[해설] ③ : 따라서, 결과의 합은 6이다.
COALESCE 함수는 첫번째 NULL이 아닌 값을 반환한다.
COALESCE(C1, C2, C3)는 각 Row에서 첫번째로 NULL이 아닌 값인 1,2,3을 반환한다.

profile
뉴비 개발자 입니다. velog 주소 : https://velog.io/@jjinny_0609 Github 주소 :
post-custom-banner

0개의 댓글