본문 바로가기
Database/SQLD

SQLD 문제풀이 2

by KkingKkang 2023. 5. 10.

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

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

 

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

1) SQL_10
2) 100-SQL : "-" 불가, 문자로 시작되어야 함
3) SQL-100 : "-" 불가
4) 100_SQL : 문자로 시작되어야 함

 

2. 아래와 같은 테이블 구조를 정의하려고 한다. 이 때 아직 부서가 정의되지 않은 사원은 기본부서(코드:'0000') 로 배치하고, 입사일자(join_date) 기준으로 많은 조회가 발생하므로 입사일자 index를 생성하려고 한다. 다음 중 올바른 sql 문장을 2개 고르시오.

EMP

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
--1
CREATE TABLE EMP (
	EMP_NO VARCHAR2(30) 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);

--2
CREATE TABLE EMP (
	EMP_NO VARCHAR2(30) 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);
--DEPT_CODE 에 NOT NULL지정이 되어있지 않아서 틑림

--3
CREATE TABLE EMP (
	EMP_NO VARCHAR2(30) 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);

--4 
CREATE TABLE EMP (
	EMP_NO VARCHAR2(30) 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);
--PRIMARY KEY 중복 지정으로 틀림

▶ 1, 3번

 

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

--생성)

CREATE TABLE 학생 (
	학번 CHAR(8) PRIMARY KEY,
    장학금 INTEGER)
    
--SQL1
SELECT COUNT(*) FROM 학생

--SQL2
SELECT COUNT(학번)FROM 학생

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

3) SQL1, SQL2문장의 실행 결과는 항상 같다
▶ 학번은 PRIMARY KEY로 NULL값이 들어올 수 없다. COUNT 할 때 NULL값이 있으면 카운트 되지 않는다.

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

 

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

1) 테이블 생성시 설정할 수 있다.
2) 외래키 값은 널 값을 가질 수 없다.
3) 한 테이블에 하나만 존재해야 한다.
4) 외래키 값은 참조 무결성 제약을 받을 수 있다. → 참조하는 값에 없는 값을 가질 수 없다.

 

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

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

CREATE TABLE Customer (
	ID int NOT NULL
    , LASTNAME VARCHAR(255) NOT NULL
    , FIRSTNAME VARCHAR(255)
    , AGE int CHECK(Age>=19)
)


2) 기본키(Primary Key)는 반드시 테이블 당 하나의 제약만을 정의할 수 있다.
3) 고유키(Unique Key)로 지정된 모든 칼럼들은 Null 값을 가질 수 없다.고유키는 null값을 가질 수 있다!

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


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

(ㄱ) TABLE EMP (ㄴ) COMM;

ALTER TABLE EMP DROP COMM

DDL : ALTER, CREATE, DROP, RENAME 

 

7. 아래 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(직원번호)
    , FOREIGN KEY(소속부서) REFERENCES 부서(부서번호) ON DELETE CASCADE
);

INSERT INTO 부서 VALUES('10','영업과');
INSERT INTO 부서 VALUES('20','기획과');

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

SELECT COUNT(직원번호) FROM 직원;
--3

DELETE FROM 부서 WHERE 부서번호 = '20';
--남은 데이터 (10 : 영업과)

SELECT COUNT(직원번호) FROM 직원;
--CASCADE해서 부서번호 20날아감, 1

 

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

RENAME STADIUM  TO STADIUM_JSC

DDL : CREATE / ALTER / DROP / RENAME

 

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

1) CASCADE → master 삭제 시 child 에서도 같이 삭제됨
2) RESTRICT delete시 child 테이블에 참조되고 있는 pk값이 없는 경우에만 master삭제를 허용
3) AUTOMATIC insert시  master테이블의 pk가 없는 경우 자동으로 pk 생성
4) DEPENDENT 

 

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

CREATE TABLE TBL (
	ID NUMBER PRIMARY KEY,
	AMT NUMBER NOT NULL,
	DEGREE VARCHAR2(1)
)

INSERT INTO TBL VALUES(1, 100);
--하나가 빠져 있음

INSERT INTO TBL(ID, AMT, DEGREE) VALUES (2,  200, 'AB')
--AB가 VARCHAR2(1) 의 용량을 넘어가서 안됨

INSERT INTO TBL(ID, DEEGREE) VALUES(4, 'X')
--AMT 가 NULL이면 안됨

INSERT INTO TBL(ID, AMT) VALUES(1,100)
--성공

INSERT INTO TBL VALUES(5, 500, NULL)
--성공

 

 

반응형

'Database > SQLD' 카테고리의 다른 글

SQLD 문제 풀이 6  (0) 2023.05.15
SQLD 문제 풀이 5  (1) 2023.05.13
SQLD 문제 풀이 4  (0) 2023.05.11
SQLD 문제 풀이 3  (0) 2023.05.10
SQLD 문제풀이 1  (0) 2023.05.08

댓글