<테이블 생성 시 주의사항>
- 테이블명은 객체를 의미할 수 있는 적절한 이름을 사용한다. 가능한 단수형을 권고한다.
- 테이블명은 다른 테이블의 이름과 중복되지 않아야 한다.
- 한 테이블 내에서는 칼럼명이 중복되게 저장할 수 없다.
- 테이블 이름을 지정하고 각 칼럼들은 괄호 "()"로 묶어 저장한다.
- 각 칼럼들은 콤마 "."로 구분되고, 테이블 생성문의 끝은 항상 세미콜론 ","으로 끝난다.
- 칼럼에 대해서는 다른 테이블까지 고려하여 데이터베이스 내에서 일관성 있게 사용하는 것이 좋다. (데이터 표준화 관점) (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 |
댓글