Certification/SQLD 개발자

[SQLD] SQLD 문제 풀이 11-20

개발자하소서 2023. 10. 10. 17:23
728x90
반응형
SMALL

📌 SQLD 문제 풀이 11-20

 

 

11. 다음 중 물리적 테이블 명으로 가장 적절한 것은?

 


1) SQL_10

2) 100-SQL

3) SQL-100

4) 100_SQL

 

더보기

정답 : ①

 

- 테이블명과 칼럼명은 반드시 문자로 시작해야 한다. 

- 사용되는 글자는 A-Z , a-z , 0-9, _, $, # 만 허용한다. 

- 그냥 '-'는 허용이 안된다.  (언더바만 가능함)

 

[테이블 생성시 주의사항]

1. 테이블명은 객체를 의미할 수 있는 적절한 이름을 사용한다. 가능한 단수형을 권고한다.

2. 테이블 명은 다른 테이블의 이름과 중복되지 않아야 한다. 

3. 한 테이블 내에서는 컬럼명이 중복되게 지정될 수 없다. 

4. 테이블 이름을 지정하고 각 칼럼들은 괄호 '( )' 로 묶어 지정한다. 

5. 각 칼럼들은 콤마 ","로 구분되고, 테이블의 생성문의 끝은 항상 세미콜론 ";"으로 끝난다. 

6. 칼럼에 대해서는 다른 테이블까지 고려하여 데이터베이스내에서는 일관성 있게 사용하는 것이 좋다.

(데이터 표준화 관점)

7. 칼럼 뒤에 데이터 유형은 꼭 지정되어야 한다. 

8. 테이블명과 칼럼명은 반드시 문자로 시작해야 하고, 벤더별로 길이에 대한 한계가 있다.

9. 벤더에서 사전에 정의한 예약어(Reserved word)는 쓸 수 없다. 

10. A~Z, a~z, 0-9, _, $,#  문자만 허용된다 

 

 

 

 

12. 아래와 같은 테이블 구조를 정의하려고 한다.

이때 아직 부서가 정의되지 않은 사원은 기본부서(코드: '0000')로 배치하고,

입사일자(JOIN_DATE) 기준으로 많은 조회가 발생하므로 입사일자 index를 생성하려고 한다. 

다음 중 올바른 SQL 문장을 2개 고르시오. 

 

 

 

① CREATE TABLE EMP 
	(EMP_NO VARCHAR2(10) PRIMARY KEY,
     EMP_NM VARCHAR2(30) NOT NULL,
     DEPT_CODE VARCHAR2(4) DEFAULT '0000' NOT NULL,
     JOIN_DATE DATE NOT NULL,
     REGIST_DATE DATE NULL);
     CREATE INDEX IDX_EMP_01 ON EMP (JOIN_DATE);

② CREATE TABLE EMP 
	(EMP_NO VARCHAR2(10) PRIMARY KEY,
     EMP_NM VARCHAR2(30) NOT NULL,
     DEPT_CODE VARCHAR2(4) DEFAULT '0000',
     JOIN_DATE DATE NOT NULL,
     REGIST_DATE DATE );
     CREATE INDEX IDX_EMP_01 ON EMP (JOIN_DATE);


③ CREATE TABLE EMP 
	(EMP_NO VARCHAR2(10) NOT NULL,
     EMP_NM VARCHAR2(30) NOT NULL,
     DEPT_CODE VARCHAR2(4) DEFAULT '0000' NOT NULL,
     JOIN_DATE DATE NOT NULL,
     REGIST_DATE DATE );
     ALTER TABLE EMP ADD CONSTRAINT EMP_PK PRIMARY KEY(EMP_NO);
     CREATE INDEX IDX_EMP_01 ON EMP (JOIN_DATE);
     

④ CREATE TABLE EMP 
	(EMP_NO VARCHAR2(10) NOT NULL PRIMARY KEY,
     EMP_NM VARCHAR2(30) NOT NULL,
     DEPT_CODE VARCHAR2(4) DEFAULT '0000' NOT NULL,
     JOIN_DATE DATE NOT NULL,
     REGIST_DATE DATE NULL );
     ALTER TABLE EMP ADD CONSTRAINT EMP_PK PRIMARY KEY(EMP_NO);
     CREATE INDEX IDX_EMP_01 ON EMP (JOIN_DATE);

 

더보기

정답 :  ①, ③

 

[인덱스란?]

- 인덱스는 DB에서 검색의 속도를 빠르게 도와주는 역할을 한다.  

- 인덱스는 DB에서 성능 측면에서 중요한 역할을 수행한다.

 

[인덱스 생성법] 

  CREATE INDEX [인덱스명]  ON [테이블명([컬럼명] [정렬기준])

 

- PRIMARY KEY는 NOT NULL이 기본값이기에, 따로 설정하지 않는다. (즉, 반드시 값이 들어와야하는 컬럼)

 

- ② NOT NULL 제약조건이 생성되지 않으면 명시적으로 DEPT_CODE 컬럼에 NULL을 입력하게 되면 NULL이 입력되는 문제가 발생한다.

 

- ④ 테이블 생성문장에서 이미 PRIMARY KEY를 지정하였으므로 ALTER TABLE에서 오류가 발생한다. 

 

 

 

13. 다음 중 아래와 같은 문장으로 '학생' 테이블을 생성한 후, 유효한 튜플(Tuple) 들을 삽입하였다. 

SQL 1, SQL 2 문장의  실행 결과로 가장 적절한 것은?

 

생성)

CREATE TABLE 학생 
	(학번 CHAR(8) PRIMARY KEY, 
       장학금 INTEGER)

SQL1: SELECT COUNT(*) FROM 학생

SQL2: SELECT COUNT(학번) FROM 학생

 


① SQL1, SQL2 문장의 실행 결과는 다를 수 있으며, 그 이유는 장학금 속성(Attribute)에 널(Null)값이 존재할 수 있기 때문이다.

② SQL1, SQL2 문장의 실행 결과는 항상 다르다.

③ SQL1, SQL2 문장의 실행 결과는 항상 같다.

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

 

더보기

정답 : ③

 

- 학번 칼럼이 PK이기 때문에 NULL값이 없다. 

 

 - COUNT(*)을 하게되면, NULL값에 관계없이 모든 학생테이블의 행수를 COUNT 하게 된다.

 

- COUNT(특정컬럼)을 하게되면, 만약 그 컬럼에 NULL값이 존재할 경우, NULL값은 제외하고 COUNT한다. 

 

- COUNT(*)와 COUNT(학번)의 결과는 항상 같다. 

 

 

 

14. 다음 중 외래키에 대한 설명으로 가장 부적절한 것을 2개 고르시오. 

 


① 테이블 생성 시 설정할 수 있다.

② 외래키 값은 널 값을 가질 수 없다.

③ 한 테이블에 하나만 존재해야 한다. 

④ 외래키 값은 참조 무결성 제약을 받을 수 있다. 
더보기

정답 : ②, ③

 

- 외래키 값은 널 값을 가질 수 있다.

 

- 외래키는 한 테이블에 여러개 존재할 수 있다.

 

 

15. 다음 중 데이터베이스 테이블의 제약조건(Constraint)에 대한 설명으로 가장 부적절한 것은?

 


① Check 제약조건(Constraint)은 데이터베이스에서 데이터의 무결성을 유지하기 위하여 테이블의 특정 컬럼(column)에 설정하는 제약이다.

② 기본키 (Primary key)는 반드시 테이블 당 하나의 제약만을 정의할 수 있다.

③ 고유키 (Unique Key)로 지정된 모든 컬럼들은 Null값을 가질 수 없다. 

④ 외래키(Foreign Key)는 테이블간의 관계를 정의하기 위해 기본키(Primary key)를 다른 테이블의 외래키가 참조하도록 생성한다. 

더보기

정답 : ③

- 고유키(Unique Key) 로 지정된 모든 컬럼은 Null 값을 가질 수도 있다. 

 

[Check 제약조건]

 

-- 제약 조건 이름 미기입 시
CREATE TABLE [테이블 이름](
  (다른 열 정의 문법 생략),
  [열 이름] [열 자료형] CHECK [해당 열의 조건 설정]
);



-- 제약 조건 이름 기입 시
CREATE TABLE [테이블 이름](
  (다른 열 정의 문법 생략),
  [열 이름] [열 자료형] CONSTRAINT [제약 조건 이름] CHECK [해당 열의 조건 설정]
);

 
CREATE TABLE TB_PASS_STUDENT(
  STUDENT_ID NUMBER(3) PRIMARY KEY,
  STUDENT_NM VARCHAR2(20),
  SCORE NUMBER(3) NOT NULL,
  CONSTRAINT SCORE_CK CHECK (SCORE >= 60)
);

-- 점수(SCORE)가 60 이상인 학생들만 INSERT 가능한 TB_PASS_STUDENT 테이블의 CHECK 설정

 

 

 

16. 4개의 컬럼으로 이루어진 EMP 테이블에서 COMM 칼럼을 삭제하고자 할때, 아래 SQL 문장의 ㄱ,ㄴ 안에 들어갈 내용을 기술하시오.

 

    ㄱ     TABLE EMP 
    ㄴ      COMM;
더보기

정답   

ㄱ : ALTER 

ㄴ : DROP COLUMN

 

- TABLE 스키마 변경 시 사용하는 SQL 문은 DDL 로 컬럼 삭제 시 활용되는 문장은 아래와 같다.       

-- Drop Column 명령어 

ALTER TABLE [테이블명]
DROP COLUMN [삭제할 컬럼명];

 

 

 

17. 아래 7개의 SQL 문장이 성공적으로 수행되었다고 할 때,

      A,B,C 세 개의 SQL 문장을 차례대로 실행하면 A와C의 SELECT 문장 수행결과는 각각 무엇인가?

 

CREATE TABLE 부서 (부서번호 CHAR(10), 부서명 CHAR(10), PRIMARY KEY(부서번호));

CREATE TABLE 직원 (직원번호 CHAR(10), 소속부서 CHAR(10), PRIMARY KEY(직원번호), 
				 FOREGIN KEY(소속부서) REFERENCES 부서(부서번호)
                 ON DELETE CASCADE);
                 
INSET INTO 부서 VALUES('10', '영업과');                 
INSET INTO 부서 VALUES('20', '기획과');                 

INSET INTO 직원 VALUES('1000', '10');                 
INSET INTO 직원 VALUES('2000', '20');                 
INSET INTO 직원 VALUES('3000', '20');                 

---------------------------------------------------------------------------------------------


A. SELECT COUNT(직원번호) FROM 직원
B. DELETE FROM 부서 WHERE 부서번호 = '20'
C. SELECT COUNT(직원번호) FROM 직원
COMMIT;

① 3, NULL

② 3, 1

③ 3, 2

④ 3, 3

더보기

정답 : ②

- 참조 무결성 규정 

- DELETE FROM 부서 WHERE 부서번호 = '20' 이 CASCADE 참조 무결성 규정이므로 

  직원 테이블의 '2000', '3000' 도 같이 삭제된다. 

 

- CASCADE : Mater 삭제 시 Child 같이 삭제 

- Set Null : Master 삭제 시 child 해당 필드 Null

- Set Default : Master 삭제 시 child 해당 필드 Default 값으로 설정 

- Restrict : Child 테이블에 PK 값이 없는 경우만 Master 삭제 허용

- No Action : 참조무결성을 위반하는 삭제/수정 액션을 취하지 않음

 

 

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

 

더보기

정답: RENAME STADIUM TO STADIUM_JSC;

 

- RENAME은 DDL의 종류이다(Create/Alter/Drop/Rename)

 

단일 테이블 이름 변경

RENAME TABLE old_table TO new_table;

 

단일 테이블 이름 변경 (ALTER)

ALTER TABLE old_table RENAME new_table;

 

 

 

19. 표준 SQL (SQL:1999)에서 테이블 생성 시 참조관계를 정의하기 위해 외래키(Foreign Key) 를 선언한다.

관계형 데이터베이스에서 Child Table 의  FK 데이터 생성 시 Parent Table Pk가 없는 경우,

Child Table 데이터 입력을 허용하지 않는 참조동작(Referential Action) 인 것은?

 


① CASCADE

② RESTRICT

③ AUTOMATIC

④ DEPENDENT 

 

더보기

정답 : ④ DEPENDENT

 

[Insert Action]

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 : 참조무결성을 위반하는 입력 액션을 취하지 않음 

 

 

20. 아래와 같은 SQL 문에 대해 삽입이 성공하는 SQL 문은?

 

CREATE TABLE TBL
(
	ID NUMBER PRIMARY KEY, 
    AMT NUMBER NOT NULL, 
    DEGREE VARCHAR2(1)
 )
 
 ----------------------------------------------------------------------------------------------
 
 1. INSERT INTO TBL VALUES(1, 100)
 2. INSERT INTO TBL(ID, AMT, DEGREE) VALUES(2, 200, 'AB')
 3. INSERT INTO TBL(ID, DEGREE) VALUES(4, 'X')
 4. INSERT INTO TBL(ID, AMT) VALUES(3, 300)
 5. INSERT INTO TBL VALUES(5, 500, NULL)

① 1, 2

② 2, 3

③ 3, 4 

④ 4, 5

더보기

정답 : ④

 

1: 삽입 컬럼을 명시하지 않았을 경우 모든 컬럼을 삽입해야 한다.

2: DEGREE 컬럼의 길이는 VARCHAR2(1)이다. 'AB'는 컬럼 길이를 초과한다.

3. NOT NULL 컬럼인 AMT 컬럼을 명시하지 않는다. 

728x90
반응형
LIST