자격증/SQLD

2. SQL 테이블 생성

이응 2024. 7. 12. 16:42

<SQL 테이블 생성의 주의사항>

 

  • 테이블명은 객체를 의미할 수 있는 적절한 이름을 사용한다. 가능한 단수형을 권고
  • 테이블명은 다른 테이블의 이름과 중복되지 않아야 한다.
  • 한 테이블 내에서는 칼럼명이 중복되게 지정할 수 없다.
  • 테이블 이름을 지정하고 각 칼럼들은 괄호"()"로 묶어 지정한다.
  • 각 칼럼들은 콤마 ","로 구분되고, 테이블 생성문의 끝은 항상 세미콜론 ";"으로 끝난다
  • 칼럼에 대해서는 다른 테이블까지 고려하여 데이터베이스 내에서는 일관성 있게 사용하는 것이 좋다. (데이터 표준화 관점)
  • 칼럼 뒤에 데이터 유형은 꼭 지정되어야 한다.
  • 테이블명과 칼럼명은 반드시 문자로 시작해야 하고, 벤더별로 길이에 대한 한계가 있다.
  • 벤더에서 사전에 정의한 예약어(Reserved word)는 쓸 수 없다. 
  • A-Z, a-z, 0-9, _, $, # 문자만 허용된다

 

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

 

1) SQL_10

2) 100-SQL 

:  숫자로 시작해서 안됨

3) SQL-100

:  _ 허용되지만 - 는 허용 안됨

4) 100_SQL

:  숫자로 시작해서 안됨

 

 

12. 아래와 같은 테이블 구조를 정의하려고 한다. 이 때 아직 부서가 정의되지 않은 사원은 기본 부서(코드:'0000')로 배치하고, 입사일자(JOIN_DATE) 기준으로 많은 조회가 발생하므로 입사일자 Index를 생성하려고 한다.

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

 

EMP_NO VARCHAR2(10) NOT NULL
EMP_NM VARCHAR2(30) NOT NULL
DEPT_CODE VARCHAR2(4) NOT NULL
JOIN_DATE DATE NOT NULL
REGIST_DATE DATE NULL

 

💡

Index

데이터 베이스 안에서 검색의 속도를 빠르게 도와주는 역할

성능에 대한 문제나 개선을 위해서 가장 먼저 확인하는 게 부분

 

-

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) 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 CONTRAINT EMP_PK PRIMARY KEY (EMP_NO);

CREATE INDEX IDX_EMP_01 ON EMP (JOIN_DATE);

 

 

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

SQL1, SQL2 문장의 실행 결과로 가장 적절한 것은?

 

생성 )

CREATE TABLE 학생 (

 학번 CHAR(8) PRIMARY KEY,

 장학금 INTEGER)

 

SQL 1: SELECT COUNT(*) FROM 학생

SQL 2: SELECT COUNT(학번) FROM 학생

 

 

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

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

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

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

 

 

 

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

 

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

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

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

4) 외래키 값은 참조 무결성 제약을 받을 수 있다.

 

 

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

 

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

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

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

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

 

🔖

Primary Key 와 Unique Key 의 가장 큰 차이점은 Primary Key는 Null 값을 가질 수 없지만 Unique Key는 Null 값을 가질 수 있다.

 

 

 

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

 

 

COMM을 삭제해야 하는 것이기 때문에 Alter 를 사용해야한다.

 

ㄱ : Alter

ㄴ : drop

 

DDL : Alter / Create / drop / rename

 

 

17. 아래 7개의 SQL 문장이 성공적으로 수행되었다고 할 때 A,B,C 세개의 SQL문장을 차례대로 실행하면 A와 C의 SELECT 문장 수행결과는 각각 무엇인가

 

 

1) 3, NULL

2) 3,1

3) 3,2

4) 3,3

 

부서 테이블에 부서번호가 사라지게 되면 Delete cascada 지정했기 때문에 직원 테이블에 소속부서 번호도 함께 사라진다

A 를 조회하면 3건의 직원번호가 있는데 B를 실행하면 20 이 2건이 날라가기 때문에 C 를 다시 조회했을 때 1건만 남게 된다

 

 

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

 

rename STADIUM TO STADIUM_JSC;

 

DDL : CREATE , Alter , drop, rename

 

 

 

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

관계형 데이터베이스에서 Child Table의 FK 데이터 생성 시 Parent Table PK가 없는 경우, Child Table 데이터 입력을 허용하지 않는 참조 동작(Referential Action)인 것은?

 

1) CASCADE

: 삭제와 관련 있는 옵션

2) RESTRICT

: Child Table PK값이 없는 경우에만 마스터 삭제를 허용

3) AUTOMATIC

: 마스터 테이블에 PK가 없는 경우 자동으로 마스터 PK 의 값을 생성

4) DEPENDEN

 

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

 

CREATE TABLE TEL (

                                   ID NUMBER PRIMARY KEY,

                                   AMT NUMBER NOT NULL,

                                   DEGREE VARCHAR2(1)

)

 

  1. INSERT INTO TBL VALUES(1,100) : 'X'를 추가해서 INSERT 하면 성공
  2. INSERT INTO TBL(ID, AMT, DEGREE) VALUES(2, 200, 'AB') : DEGREE는 현재 VARCHAR2(1) 한 자리수 이기 때문에 'AB'는 틀림
  3. INSERT INTO TBL(ID, DEGREE) VALUES(4, 'X') : 특정 컬럼을 지정할 수 있는 데 NOT NULL 컬럼은 무조건 포함 시켜야한다 (AMT)
  4. INSERT INTO TBL(ID,AMT) VALUES(3, 300)
  5. INSERT INTO TBL VALUES(5, 500, NULL)

 

1) 1,2

2) 2,3

3) 3,4

4) 4,5

 

 

 

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

2과목 관계형 데이터 베이스  (0) 2024.08.18
1과목 데이터 모델링의 이해  (0) 2024.08.02
1. SQL 문장들  (0) 2024.07.09
SQLD 자격 준비  (0) 2024.07.03