포스트

제 3장 관리 구문

Q. 데이터베이스를 정의하고 접근하기 위해서는 데이터베이스 관리 시스템과의 통신수단이 필요한데 이를 데이터 언어(Data Language) 라고 하며, 그 기능과 사용 목적에 따라 데이터 정의어(DDL), 데이터 조작어(DML), 데이터 제어어(DCL) 로 구분된다. 다음 중 데이터 언어와 SQL 명령어에 대한 설명으로 가장 부적절한 것은?

①

① 비절차적 데이터 조작어(DML)는 사용자가 무슨 데이터를 원하며, 어떻게 그것을 접근해야 되는지를 명세하는 언어이다.

② DML은 데이터베이스 사용자가 응용 프로그램이나 질의어를 통하여 저장된 데이터베이스를 실질적으로 접근하는데 사용되며 SELECT, INSERT, DELETE, UPDATE 등이 있다. ③ DDL은 스키마, 도메인, 테이블, 뷰, 인덱스를 정의하거나 변경 또는 제거할 때 사용되며 CREATE, ALTER, DROP, RENAME 등이 있다. ④ 호스트 프로그램 속에 삽입되어 사용되는 DML 명령어들을 데이터 부속어라고 한다.

이미지

  • 사용자가 데이터에 어떻게 접근해야 되는지를 명세하는 언어는 절차적 언어이며, JAVA, PL-SQL(오라클), T-SQL(SQL Server)가 있다.
  • 절차적 언어는 특정 조건에 어떻게 접근할 것인지를 개발자가 원하는 대로 명세할 수 있다.
  • DML(SELECT, INSERT, DELETE, UPDATE)는 사용자가 무슨 데이터를 원하는지 결과만 보는 비절차적 언어이다.
  • 데이터베이스는 완전한 프로그래밍 언어가 아니다. 파이썬이나 자바와 같은 언어에 포함되어 사용하기도 하기에 데이터 부속어라고 한다.

Q. 다음 중 아래의 데이터 모델과 같은 테이블 및 PK 제약조건을 생성하는 DDL 문장으로 올바른 것은? (DBMS는 오라클을 기준으로 한다.)

④

이미지

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
①
CREATE TABLE PRODUCT(
	PROD_ID VARCHAR2(10) NOT NULL, 
	PROD_NM VARCHAR2(100) NOT NULL,
	REG_DT DATE NOT NULL,
	REGR_NO NUMBER(10) NULL
);
ALTER TABLE PRODUCT ADD PRIMARY KEY PRODUCT_PK ON (PROD_ID);

②
CREATE TABLE PRODUCT( 
	PROD_ID VARCHAR2(10), 
	PROD_NM VARCHAR2(100), 
	REG_DT DATE,
	REGR_NO NUMBER(10) 
);
ALTER TABLE PRODUCT ADD CONSTRAINT PRODUCT_ PK PRIMARY KEY (PROD_ID);

③
CREATE TABLE PRODUCT( 
	PROD_ID VARCHAR2(10) NOT NULL,
	PROD_NM VARCHAR2(100) NOT NULL,
	REG_DT DATE NOT NULL, 
	REGR_NO NUMBER(10) NULL,
	ADD CONSTRAINT PRIMARY KEY (PROD_ID));

④	
CREATE TABLE PRODUCT( 
	PROD_ID VARCHAR2(10) NOT NULL, 
	PROD_NM VARCHAR2(100) NOT NULL,
	REG_DT DATE NOT NULL, 
	REGR_NO NUMBER(10),
	CONSTRAINT PRODUCT_PK PRIMARY KEY (PROD_ID));

이미지

  • ①, ②는 테이블을 생성한 후 제약조건을 추가(ALTER), ③,④는 테이블을 생성하면서 PK 제약조건을 동시에 적용시키는 구문이다.
  • ① ALTER TABLE PRODUCT ADD CONSTRAINT PRODUCT_ PK PRIMARY KEY (PROD_ID)
  • ② NULL, NOT NULL 제약조건 추가
  • ③ ADD 불필요, PK명 기입

Q. 아래와 같이 데이터가 들어있지 않은 왼쪽의 기관분류 테이블 (가)를 오른쪽 기관분류 테이블 (나)처럼 변경하고자 할 때 다음 중 올바른 SQL 문장은? (단, DBMS는 SQL Server로 가정한다.)

④

이미지

1
2
3
4
5
6
7
8
9
① ALTER TABLE 기관분류 ALTER COLUMN(분류명 VARCHAR(30), 등록일자 DATE NOT NULL);

② ALTER TABLE 기관분류 ALTER COLUMN(분류명 VARCHAR(30) NOT NULL, 등록일자 DATE NOT NULL);

③ ALTER TABLE 기관분류 ALTER COLUMN 분류명 VARCHAR(30);
 	ALTER TABLE 기관분류 ALTER COLUMN 등록일자 DATE NOT NULL;

④ ALTER TABLE 기관분류 ALTER COLUMN 분류명 VARCHAR(30) NOT NULL;
	ALTER TABLE 기관분류 ALTER COLUMN 등록일자 DATE NOT NULL;
  • 여러 칼럼을 동시에 변경 불가능, 괄호 사용하지 않음

이미지


Q. 다음 중 NULL의 설명으로 가장 부적절한 것은?

③

① 모르는 값을 의미한다.

② 값의 부재를 의미한다.

③ 공백 문자 혹은 숫자 0을 의미한다.

④ NULL 과의 모든 비교(IS NULL 제외)는 알 수 없음(Unknown)을 반환한다.

이미지

  • NULL 값이 데이터에 포함되어 있을 때 NULL로 인해서 결과값이 달라질 수 있기 때문에 항상 고려해서 비교할 수 있도록 해야한다.

Q. 아래 테이블 T, S, R의 각각 다음과 같이 선언되었다. 다음 중 DELETE FROM T; 를 수행한 후에 테이블 R에 남아있는 데이터로 가장 적절한 것은?

② (1, NULL)과 (2, NULL)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE T(
	C INTEGER PRIMARY KEY, 
	D INTEGER
);
	
CREATE TABLE S(
	B INTEGER PRIMARY KEY,
	C INTEGER REFERENCES T(C) ON DELETE CASCADE
);

CREATE TABLE R(
	A INTEGER PRIMARY KEY,
	B INTEGER REFERENCES S(B) ON DELETE SET NULL
);
  • 현재 테이블 T, S, R의 상태는 다음과 같다.

[T]

CD
11
21

[R]

AB
11
22

[S]

BC
11
21

① (1, NULL)과 (2, 2)

② (1, NULL)과 (2, NULL)

③ (2, 2)

④ (1, 1)

이미지

  • T 테이블의 데이터가 삭제되었으므로 참조하고 있는 S 테이블의 데이터도 삭제된다.
  • S 테이블 B 데이터 값이 삭제되었으므로 참조하고 있는 R 테이블의 B는 NULL 값으로 세팅된다.

Q. 다음 중 테이블 생성 시 컬럼별 생성할 수 있는 제약조건(Constraints)에 대한 설명으로 가장 부적절한 것은?

①

① UNIQUE : 테이블 내에서 중복되는 값이 없으며 NULL 입력이 불가능하다.

② PK : 주키로 테이블당 1개만 생성이 가능하다.

③ FK : 외래키로 테이블당 여러 개 생성이 가능하다.

④ NOT NULL : 명시적으로 NULL 입력을 방지한다.

이미지

  • UNIQUE는 NULL 입력이 가능하며, PK는 NULL 입력이 불가능하며, 중복되는 값을 허용하지 않는다.
  • FK의 행 값들은 여러 개가 중복이 되어도 상관없으며, 테이블당 여러 개 생성이 가능하다.

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

① SQL_10

① SQL_10

② 100-SQL

③ SQL-100

④ 100_ SQL

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

이미지


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

①, ③

이미지

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
①
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 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);
  • DEPT_CODE가 정의되지 않은 사원에 대해서 DEFAULT 값 설정
  • ① PRIMARY KEY는 NOT NULL이 DEFAULT이므로 NOT NULL을 지정하지 않아도 된다.
  • ② DEPT_CODE의 NOT NULL을 지정하지 않았다.
  • ③ ALTER TABLE로 PK 지정 - 제약조건 추가
  • ④ PK를 이미 지정했는데 ALTER로 재지정할 필요 없다.(오류 발생)

이미지

  • 인덱스는 데이터베이스의 검색 속도를 빠르게 도와주는 역할을 한다.(성능 측면)

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

③

1
2
3
4
5
6
7
CREATE TABLE 학생 (
	학번 CHAR(8) PRIMARY KEY,
	장학금 INTEGER 
);

SQL1: SELECT COUNT(*) FROM 학생
SQL2: SELECT COUNT(학번) FROM 학생

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

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

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

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

  • COUNT(*)의 경우 NULL 값 관계 없이 학생 테이블의 모든 행의 수를 반환
  • COUNT(특정 칼럼)의 경우 특정 칼럼에 NULL 값이 존재할 경우 그 NULL 값은 제외하고 COUNT를 한다.
  • 학번 칼럼은 PK이므로 NULL 값을 허용하지 않는다.

이미지


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

②, ③

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

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

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

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

이미지

  • FK는 테이블 B를 생성할 때 설정할 수 있다.
  • PK와 다르게 외래키는 NULL 값을 허용한다.
  • PK는 한 테이블에 하나만 존재해야 하지만, FK는 여러 개 존재할 수 있다.
  • FK는 PK 칼럼을 참조하고 있기 때문에 PK에 존재하지 않는 값은 FK로 가질 수 없다.

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

③

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

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

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

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

이미지

  • Age가 18 이상인 값들만 넣는다.
  • PK와 UNIQUE KEY의 가장 큰 차이점은 NULL 값의 허용이다.
  • 외래키는 기본키의 어떤 특정 컬럼을 참조하여 부모 자식 간의 관계를 가질 수 있다.

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

ALTER, DROP

이미지

㉠ TABLE EMP

㉡ COMMIT;

  • 테이블의 구조 변경: ALTER
  • DDL: ALTER, CREATE, DROP, RENAME

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

② 3, 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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;
1
2
3
4
A. SELECT COUNT(직원번호) FROM 직원
B. DELETE FROM 부서 WHERE 부서번호 = '20';
C. SELECT COUNT(직원번호) FROM 직원
COMMIT;

① 3, null

② 3, 1

③ 3, 2

④ 3, 3

  • 직원번호는 PK이므로 COUNT 결과는 직원 테이블의 전체 행 수와 동일하다.

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

1
RENAME STADIUM TO STADIUM_JSC;

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

④ DEPENDENT

① CASCADE

② RESTRICT

③ AUTOMATIC

④ DEPENDENT

이미지

  • DEPENDENT: 부모 테이블에 50이라는 데이터가 없기 때문에 자식 테이블에 먼저 들어올 수 없다. 즉, 의존하고 있다.
  • CASCADE: DELETE 시 action, 마스터 삭제 시 차일드도 같이 삭제
  • RESTRICT: DELETE 시 action, 차일드 테이블에 PK 값이 없는 경우에만 마스터 삭제를 허용(참조하고 있는데 사라지면 안 되므로 제한함)
  • AUTOMATIC: INSERT 시 action, 마스터 테이블의 PK가 없는 경우 마스터 PK의 값을 생성해주는 역할 - 50을 부모 테이블에 만들고, 자식 테이블에도 50을 넣어줌

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

④, ⑤

1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE TEL(
	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')
③ INSERT INTO TBL(ID, DEGREE) VALUES(4, 'X')
④ INSERT INTO TBL(ID, AMT) VALUES(3, 300)
⑤ INSERT INTO TBL VALUES(5, 500, NULL)
  • 테이블 명만을 명시할 경우, 테이블에 존재하는 모든 칼럼의 값을 VALUES 내에 넣어줘야 정상적으로 들어간다.
  • ‘AB’는 VARCHAR2(2)
  • 특정 칼럼 지정 시 NOT NULL 칼럼은 무조건 포함해야 한다.


참고 자료


이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.