🍏 개발일기/으쌰으쌰 SQLD 자격증 준비

노랭이 40P 부터 시작 1번 ~ 20번

보배 진 2026. 2. 17. 12:33

문제 1. 다음 중 데이터 제어어(DCL)에 해당하는 명령어는?

1. INSERT

2. RENAME

3. COMMIT

4. REVOKE

정답 4번


문제 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)라고 한다

1번이 틀렸다

왜나면 문장을 보면

비절차적 DML은 사용자 무슨 데이터를 원하며, 어떻게 접근해야 되는지를 명세하는 언어이다 라고 하는데

어떻게 접근해야 되는지 이 부분이 틀렸다

🍑 비절차적 언어란

무엇을 원하는지만 말한다

Ex) select * from account; 

처럼 계정 데이터 줘

하면 DB가 알아서 찾지, 우리가 찾는 방법을 적지 않는다


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

이 문제는 "데이터 모델(컬럼/NOT NULL/PK)" 그대로 DDL을 만들었는지만 체크하면 된다

 

1) 주어진 모델 정리

PRODUCT 테이블

▪️PROD_ID VARCHAR2(10) NOT NULL + PK
▪️PROD_NM VARCHAR2(100) NOT NULL

▪️REG_DT DATE NOT NULL

▪️ REGR_NO NUMBER(10) NULL(=기본값이라 안 써도 됨)

 

2) 보기 판단 포인트

▪️CREATE TABLE 안에서 PK를 만들려면 보통 이렇게 써야 함 

CONSTRAINT 제약조건명 PRIMARY KEY(컬럼)

▪️Oracle에서 ALTER TABLE로 PK 추가하려면

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

 

3) 보기별로 왜 틀렸는지

① 문법이 개박살남

ADD PRIMARY KEY ❌

ADD CONSTRAINT 필요 ✅

 

② NOT NULL 제약조건이 빠짐

③ ADD CONSTRAINT를 CREATE TABLE 안에 “ADD”로 쓰는 건 문법 오류

→ CREATE TABLE 안에서는 ADD가 아니라 그냥 CONSTRAINT ... 로 써야 함

④ REGR_NO는 NULL이 기본이라 NULL 안 써도 됨


 

먼저 바뀌는 부분을 보자

변경 1 : 분류명 VARCHAR(10) ➡️ VARCHAR(30)

변경2 : 등록일자 VARCHAR(10) NULL ➡️ DATE NOT NULL

 

DBMS 확인 ⭐⭐⭐

컬럼 수정은 한 번에 하나씩 ALTER

ALTER TABLE 테이블 ALTER COLUMN 컬럼 ...

이런식으로 여러 컬럼을 동시에 작업 못한

 

👉 SQL Server 나오면
👉 보기에서 컬럼 2개 같이 있으면 바로 오답!


문제 9. 아래 테이블 T, S, R이 각각 다음과 같이 선언되었다. 

다음 중 DELETE FROM T;를 수행한 후에 테이블 R에 남아있는 데이터로 가장 적절한 것은?

DELETE가 어디에 걸렸는지 → FK 옵션이 뭐였는지만 따라가보자

지금 실행하는 SQL이 DELETE FROM T; 이다

T 테이블 전체 행을 삭제하는 것이다 (WHERE 없음)

 

관계를 정리하면

💠 ON DELETE CASCADE : T의 부모행 삭제되면 자식(S) 행도 같이 삭제

💠 ON DELETE SET NULL : S의 부모행 삭제되면 R의 FK 컬럼(B)만 NULL로 바꿈 (행은 남음)

정답은 2번


 

문제 요구사항(체크리스트)
EMP 테이블은 아래를 반드시 만족해야 함
EMP_NO : NOT NULL + PK
EMP_NM : NOT NULL
DEPT_CODE : NOT NULL + DEFAULT '0000' (부서 미정이면 0000)
JOIN_DATE : NOT NULL
REGIST_DATE : NULL 가능
JOIN_DATE에 INDEX 생성

 

🍑 INDEX란?

검색을 빠르게 해주는 목차

SELECT * FROM EMP
WHERE JOIN_DATE = '2024-01-01';

EMP 테이블에 직원 100만명 있다고 해보자. 

INDEX 없으면 100만명 전부 검사 느림!!

 

INDEX 있으면 JOIN_DATE 정렬된 목록에서 바로 찾음

JOIN_DATE 기준 조회 많이 발생하므로 INDEX를 만들자 하였다

CREATE INDEX IDX_EMP_01 ON EMP(JOIN_DATE);

그래서 인덱스를 만들었고, 조회가 빨라진다

 

 

1번 : PK ✅, DEPT_CODE DEFAULT '0000' NOT NULL ✅, JOIN_DATE 인덱스 생성 ✅

2번 : DEPT_CODE DEFAULT '0000'는 있는데 NOT NULL이 없음

3번 : 테이블 만들 때 EMP_NO를 NOT NULL로 두고, ALTER TABLE ... ADD CONSTRAINT ... PRIMARY KEY (EMP_NO)로 PK 추가 ✅, DEPT_CODE DEFAULT '0000' NOT NULL ✅, JOIN_DATE 인덱스 생성 ✅

4번 : CREATE TABLE에서 이미 EMP_NO ... PRIMARY KEY로 PK를 만들었는데 또 ALTER TABLE ... PRIMARY KEY (EMP_NO)로 PK를 2번 생성 ❌ (에러)


 

 

 

문제의 핵심은

Parent Table에 PK가 없으면 Child 입력 못하게 하는 동작이다

즉 참조를 못하면 입력 금지 ➡️  RESTRICH

 

① CASCADE : 부모 삭제 → 자식 삭제

② RESTRICT ✅ : 부모에 값 없으면 자식 입력 못함

③ AUTOMATIC :  SQL FK 옵션 아님

④ DEPENDENT : SQL FK 옵션 아님