Certification/SQLD 개발자

[SQLD] SQLD 문제 풀이 1-10

개발자하소서 2023. 10. 9. 22:09
728x90
반응형
SMALL

 

📌 SQLD 문제 풀이 1-10

 

 

1. 데이터 제어어(DCL)란? 

 


- Data Control Language

- 데이터제어어란 데이터 베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어이다.

- 데이터 제어어에는 두가지 종류가 있다.

더보기

[DCL의 종류]

① grant (권한 부여)
② revoke (권한 회수)

 

 

* 트랜잭션이란? 

 

-  DB의 상태를 변화시키기 위한 작업단위

 

 

2. 데이터 정의어(DDL)란?

 


- Data Defination Language

- 테이블의 구조를 생성, 변경, 삭제하는 등 데이터 구조를 정의하는데 사용되는 명령어이다.

- DDL에는 4가지 종류가 있다.  (C/A/D/R)

 

더보기

[DDL의 종류]

① Create
② Alter
③ Drop
④ Rename

 

 

3. 아래 내용에 해당하는 SQL 명령어의 종류를 작성하시오.

 

논리적인 작업의 단위를 묶어 DML에 의해 조작된 결과를 작업단위(Transaction)별로

제어하는 명령어인 commit, rollback, savepoint 등이 여기에 해당하며,

일부에서는 DCL(Data Control Language)로 분류하기도 한다. 

 

더보기

- 트랜잭션 제어어(TCL : Transaction Control Language)

① COMMIT

② ROLLBACK

 

 

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

 


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

2. DML은 데이터베이스 사용자가 응용 프로그램이나 질의어를 통하여 저장된 데이터베이스를 실질적으로 접근하는데 사용되며, SELECT, INSERT, DELETE, UPDATE 등이 있다. 

3. DDL은 스키마, 도메인, 테이블 뷰, 인덱스를 정의하거나 변경 또는 제거할 때 사용되며, CREATE, ALTER, DROP, RENAME 등이 있다. 

4. 호스트 프로그램 속에 삽입되어 사용되는 DML 명령어들을 데이터 부속어(Data Sub Language)라고 한다. 

 

더보기

정답 : ①

 

- DML(데이터 조작어)에는 select/insert/update/delete가 존재한다. 

 

- DML은 사용자가 무슨 데이터를 원하는 지를 원하는 언어는 맞지만, 어떻게 접근해야 되는지 명세하는 언어는 아니다. (즉, 비절차적 언어임 = 결과만 확인이 가능하다.)

 

- 어떻게 그것을 접근해야 되는지를 명세하는 언어 = 절차적 언어 

 

- 절차적 데이터 조작어는 어떻게 데이터를 접근해야하는 지를 명세한다. 

 

- 절차적 데이터 조작어의 종류 : java, PL/SQL(오라클) , T-SQL(SQL Server) 

 

 

 

5. 다음 중 데이터베이스 시스템 언어의 종류와 해당되는 명령어를 바르게 연결한 것을 2개 고르시오 

 


1) DML - SELECT 

2) TCL - COMMIT 

3) DCL - DROP

4) DML - ALTER 

 

더보기

정답 :  ①, ②

 

1) DML (데이터 조작어) : Select / Insert / Delete / Update  (SIDU) 엠씨두

 

2) TCL(트랜잭션 제어어) : Rollback / Commit (Tran CR)  트랜씨알

 

3) DCL(데이터 제어어) : Grant / Revoke  (제CRG) 제씨알지?

 

4) DDL(데이터 정의어) : Create/ Alter/ Drop / Rename (CADR) 캐디알

 

 

6. 다음 중 아래의 데이터 모델과 같은 테이블 및 PK 제약 조건을 생성하는 DDL 문장으로 올바른 것은? 

(단, DBMS는 오라클 기준으로 한다.)

 

 

 

① Create TABLE PRODUCT
	(PROD_ID VARCHAR(10) NOT NULL
    ,PROD_NM VARCHAR(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 VARCHAR(10)
    ,PROD_NM VARCHAR(100)
    ,REG_DT DATE
    ,REGR_NO NUMBER(10));
    ALTER TABLE PRODUCT ADD CONSTRAINT PRODUCT_PK  
   				PRIMARY KEY (PROD_ID);
    

③  Create TABLE PRODUCT
	(PROD_ID VARCHAR(10) NOT NULL
    ,PROD_NM VARCHAR(100) NOT NULL
    ,REG_DT DATE NOT NULL
    ,REGR_NO NUMBER(10) NULL
    ,ADD CONSTRAINT PRIMARY KEY (PROD_ID);
 
 
④ Create TABLE PRODUCT
	(PROD_ID VARCHAR(10) NOT NULL
    ,PROD_NM VARCHAR(100) NOT NULL
    ,REG_DT DATE NOT NULL
    ,REGR_NO NUMBER(10) 
    ,CONSTRAINT  PRODUCT_PK PRIMARY KEY (PROD_ID) );

 

더보기

정답 :  ④

 

- 일단 제약 조건을 확인해보면, PRO_ID 가 Primary key이다. 

 

- NOT NULL 컬럼은 PRO_ID/  PROD_NM/  REG_DT

 

① ALTER TABLE PRODUCT ADD PRIMARY KEY PRODUCT_PK  ON (PROD_ID); 

------> ALTER TABLE PRODUCT ADD CONSTRAINT PRODUCT_PK PRIMARY KEY (PROD_ID); 

  • [제약조건 추가]
  • CREATE블록 밖에서는 ALTER (TABLE명) ADD CONSTRAINT (테이블명_PK) PRIMARY KEY (칼럼명);
  • 혹은 CREATE블록 안에서는 CONSTRAINT (테이블명_PK) PRIMARY KEY (칼럼명) 

 

② NOT NULL 제약 조건을 넣지 않아 틀림 

 

 ADD CONSTRAINT PRIMARY KEY (PROD_ID);

--------> CONSTRAINT PRODUCT_PK  PRIMARY KEY (PROD_ID);

CREATE 블록 내부에서는 ADD가 따로 필요가 없고, 테이블명을 넣어줘야 한다. 

 

 

 

 

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

 

 

 

① 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;

 

더보기

정답 : ④ 

 

①② : SQL Server는 여러개 컬럼을 동시에 수정하는 것을 지원하지 않는다. 또한 괄호를 사용하지 않는다. 

 

③ : 분류명을 수정할 경우에도 기존 설정되어있던 NOT NULL 구문을 넣어주지 않는다면, 제약 조건이 NULL로 변경됨

 

  • [테이블 컬럼에 대한 정의 변경 ]
  • 1. ORACLE
  • ALTER TABLE 테이블명 MODIFY (컬럼명1 데이터 유형 [DEFAULT 식] [NOT NULL] , 컬럼명2 데이터 유형..)
  • 2. SQL Server
  • ALTER TABLE 테이블명 ALTER (컬럼명1 데이터 유형 [DEFAULT식] [NOT NULL], 컬럼명2 데이터유형...)

 

 

 

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

 


① 모르는 값을 의미한다. 

② 값의 부재를 의미한다. 

③ 공백문자(Empty String) 혹은 숫자 0을 의미한다. 

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

 

더보기

정답 : ③

- NULL은 공백문자 혹은 0과 동일하지 않다. 

- NULL은 조건에 맞는 데이터가 없을 때의 공집합과도 다르다. 

- NULL은 아직 정의되지 않은 미지의 값이거나, 현재 데이터를 입력하지 못하는 경우를 의미한다. 

- NULL + NULL = NULL

- NULL + 1 = NULL

- NULL에 어떤 연산을 하더라도 다 NULL로 반환한다. 

 

 

 

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

 


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의 상태는 다음과 같다. 





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

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

③ (2 , 2)

④ (1, 1)

 

 

더보기

정답 : ②

 

- DELETE FROM T 이후에 

- T테이블 : 두개 모두 삭제 

- S테이블 (Cascade) : 두개 모두 삭제  

- R테이블 (Set Null) : child 해당 필드(FK: B칼럼) 값이 NULL로 변경됨 

 

- CASCADE  부모 테이블의 row 에 DELETE 또는 UPDATE 명령어를 적용할 때,

자동적으로 자식 테이블의 매치되는 row 에도 똑같이 DELETE 또는 UPDATE 를 반영하는 것을 의미한다.

 

- 이를 사용하기 위해서는 foreign key constraints 옵션에 ON DELETE CASCADE 를 설정해야한다.

 

- ON DELETE CASCADE 옵션을 적용하면 부모 테이블에서 row 를 삭제할 경우 연결된 자식 테이블의 row 가 함께 삭제된다.

 

- 연결된 데이터를 한 번에 지울 수 있어 데이터의 관리가 편리해지고 일관성을 유지할 수 있다.

 

 

 

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

 


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

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

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

 

더보기

정답 : ①

 

- PK = UNIQUE & NOT NULL의 특징을 가진다. 

- UNIQUE는 테이블 내에서 중복되는 값이 없지만, NULL 입력이 가능하다. 

 

[제약조건의 종류 ]

 

- PRIMARY KEY(기본키) :  데이터베이스 테이블에서 각각의 행/레코드가 유일하게 식별 가능한 값을 가지도록 한다

- UNIQUE KEY(고유키) : 한 열에서 각기 다른 값만 가지도록 설정한다. (중복된 값 불가)

- NOT NULL : 한 열이 NULL 값을 가지지 못하도록 한다.

- CHECK : 특정 조건(conditions)에 해당하는 값만 들어갈 수 있도록 한다. 

- FOREIGN KEY(외래키) : 또 다른 어떤 데이터베이스 테이블에서 행/레코드가 유일하게 식별 가능한 값을 가지도록 한다. 

728x90
반응형
LIST