본문 바로가기
SQL

[SQL] SQL 자격검정 실전문제(노랑이책) 문제풀이 - SQL 기본 및 활용 (1~10번)

by 모닥불🔥 2024. 2. 5.

오늘부터 노랑이책 문제 모두 풀어보기 챌린지를 시작했다. 혼자서도 열정 태우기 바쁜 모닥🔥
노랑이책이 절판되어 구하기 힘들어 하는 사람도 있다고 들었는데, 문제까지 같이 적어둘 테니 숙숙 읽길 바람
 
아래는 노랑이책 목차와 이 글에 해당하는 부분

과목 1. 데이터 모델링의 이해(p. 5)
제 1장. 데이터 모델링의 이해(p. 7)
제 2장. 데이터 모델과 성능(p. 21)

과목 2. SQL 기본 및 활용(p. 37)
제 1장. SQL 기본(p. 39) 🔥
제 2장. SQL 활용(p. 77)
제 3장. SQL 최적화 기본 원리(p. 129)

과목 3. SQL 고급 활용 및 튜닝(p. 139)
제 1장. 아키텍처 기반 튜닝 원리(p. 141)
제 2장. Lock과 트랜잭션 동시성제어(p. 151)
제 3장. 옵티아미저 원리(p. 159)
제 4장. 인덱스와 조인(p. 167)
제 5장. 고급 SQL 튜닝(p. 183)

SQL 전문가 실기문제(p. 197)

 
2과목 127페이지까지가 SQLD 범위이고, SQL 기본 및 활용의 시험 비중이 커서 SQL 기본부터 풀이해 볼 생각


📒 p. 40 ~ p. 44 (SQL 기본, 문제 1~10)
 
1. 다음 중 데이터 제어어(DCL)에 해당하는 명령어는?
① INSERT
② RENAME
③ COMMIT
④ REVOKE
 

명령어의 종류명령어
데이터 조작어(DML)SELECT
INSERT
UPDATE
DELETE
데이터 정의어(DDL)CREATE
ALTER
DROP
RENAME
데이터 제어어(DCL)GRANT
REVOKE
트랜잭션 제어어(TCL)COMMIT
ROLLBACK
SAVEPOINT

 
답: ④
해설: 위 표를 보면 데이터 제어어(DCL)에 해당하는 명령어는 GRANT, REVOKE다.


2. 다음 중 아래 내용의 범주에 해당하는 SQL 명령어로 옳지 않은 것은?


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

 
① CREATE ② GRANT ③ ALTER ④ DROP
 
답: ②
해설: 데이터 구조를 정의한다고 했으니까 데이터 정의어(DDL)에 해당하고, DDL에 해당하는 명령어는 CREATE, ALTER, DROP, RENAME이 있다. 2번의 GRNAT는 데이터 제어어(DCL)에 해당함! 데이터 구조를 정의한다는 말이 어려울 수 있는데, 테이블을 만들고 수정한다고 생각하면 된다. DML은 표 안에 내용을 넣거나 수정하는 기능.


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


논리적인 작업의 단위를 묶어 DML에 의해 조작된 결과를 작업 단위(Transaction)별로 제어하는 명령어인 Commit, Rollback, Savepoint 등이 여기에 해당하며, 일부에서는 DCL(Data Control Language)로 분류하기도 한다.

 
[                        ]
 
답: 트랜잭션 제어어(TCL: Transaction Control Language)
해설: 트랜잭션(Transaction) 별로 제어(Control)하는 명령어(Language) = TCL


4. 데이터베이스를 정의하고 접근하기 위해서는 데이터베이스 관리 시스템과의 통신수단이 필요한데 이를 데이터 언어(Data Language)라고 하며, 그 기능과 사용 목적에 따라 데이터 정의어(DDL), 데이터 조작어(DML), 데이터 제어어(DCL)로 구분된다. 다음 중 데이터 언어와 SQL 명령어에 대한 설명으로 가장 부적절한 것은?
① 비절차적 데이터 조작어(DML)는 사용자가 무슨 데이터를 원하며, 어떻게 그것을 접근해야 되는지를 명세하는 언어이다.
② DML은 데이터베이스 사용자가 응용 프로그램이나 질의어를 통하여 저장된 데이터베이스를 실질적으로 접근하는데 사용되며 SELECT, INSERT, UPDATE 등이 있다.
③ DDL은 스키마, 도메인, 테이블, 뷰, 인덱스를 정의하거나 변경 또는 제거할 때 사용되며 CREATE, ALTER, DROP, RENAME 등이 있다.
④ 호스트 프로그램 속에 삽입되어 사용되는 DML 명령어들을 데이터 부속어(Data Sub Language)라고 한다.
 
답: ①
해설: 비절차적 데이터 조작어는 사용자가 무슨(what) 데이터를 원하는지를, 절차적 데이터 조작어는 어떻게(how) 데이터에 접근해야 하는지 명세한다. 절차라는 것 자체가 how의 의미를 담고 있으니 잘 구분하면 좋을 것 같다.


5. 다음 중 데이터베이스 시스템 언어의 종류와 해당되는 명령어를 바르게 연결한 것을 2개 고르시오.
① DML - SELECT
② TCL - COMMIT
③ DCL - DROP
④ DML - ALTER
 
답: ①, ②
해설: DROP과 ALTER는 DDL에 해당한다.


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

① 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) );
 
답: ④

🔥 알아 둘 내용

- 데이터 모델 표기법에는 IE 표기법과 BARKER 표기법이 있다.
- BARKER 표기법에서는 기호를 사용한다.
  #: 식별자
  *: 필수값(mandatory) 즉, null이 아닌값 = 빈칸 금지
  o: 선택값(optional). null 허용 = 빈 칸으로 둬도 됨
- IE 표기법에서 선 위쪽 칸은 식별자를 의미한다.
- primary key는 반드시 유일값(unique)이며 null이 아니어야 한다(not null).

 
위 그림에 나온 데이터 모델을 해석하면, PRODUCT 테이블은 PROD_ID를 기본키(primary key)로 가진다. PROD_NM과 REG_DT는 필수값이다(not null, *, 빈칸 금지). REGR_NO는 NULL이어도 괜찮다(optional, o, 빈칸 허용).
 
1번이 답이 아닌 이유: ALTER TABLE 문장에 문법적 오류가 존재한다.
ALTER TABLE PRODUCT ADD PRIMARY KEY PRODUCT_PK ON (PROD_ID); 가 아니라
ALTER TABLE PRODUCT ADD CONSTRAINT PORDUCT_PK PRIMARY KEY (PROD_ID); 라고 써야 하기 때문이다.
 
2번이 답이 아닌 이유: NOT NULL 조건이 빠져 있다.
 
3번이 답이 아닌 이유: 1, 2번과 달리 3, 4번은 CREATE문 안에 제약 조건 구문이 있는데 이 경우에는 ADD를 붙일 필요가 없다. 또한 CONSTRAINT PRODUCT_PK 와 같이 PK명을 적어 주어야 한다.
 
4번은 정답인 문장임


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

 
① 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;
 
답: ④
 
문제에서 (가)를 (나)처럼 바꾼다고 했으니 어떤 부분이 달라졌는지 확인하자.
하나, 분류명 컬럼에서 VARCHAR(10)이던 것이 VARCHAR(30)이 되었다.
, 등록일자 컬럼에서 VARCHAR(10)이었던 것이 DATE로 바뀌었다.
, (가)의 등록일자는 NULL 허용이었는데 (나)에서 NOT NULL로 바뀌었다. 즉, 기관분류 테이블에 존재하는 분류_ID, 분류명, 등록일자 컬럼은 모두 NOT NULL이 되어야 한다.
 
이제 선지를 살펴 보면서 위 변경 조건이 잘 반영되었는지 확인하면 된다.
1번, 2번이 틀린 이유: SQL 서버는 여러 컬럼을 동시에 변경할 수 없음!
3번이 틀린 이유: 분류명 컬럼에 NOT NULL 제약조건을 설정하지 않았다. 원래 NOT NULL이던 열을 변경하더라도 NOT NULL을 붙여주어야 한다. 그렇지 않으면 default인 NULL 허용으로 변경된다.
정답은 4번!

🔥 오라클과 SQL서버는 ALTER문을 약간 다르게 쓴다. 잘 기억해 두자!

오라클

ALTER TABLE 테이블명 MODIFY 컬럼명 데이터유형 NOT NULL/NULL

SQL 서버
ALTER TABLE 테이블명 ALTER 컬럼명 데이터유형 NOT NULL/NULL

8. 다음 중 NULL의 설명으로 가장 부적절한 것은?
① 모르는 값을 의미한다.
② 값의 부재를 의미한다.
③ 공백 문자(Empty String) 혹은 숫자 0을 의미한다.
④ NULL과의 모든 비교(IS NULL 제외)는 알 수 없음(Unknown)을 반환한다.
 
답: ③
 
NULL은 모르는 값 혹은 값의 부재를 의미한다. 공백 문자(띄어쓰기)나 숫자 0은 확실히 아는 값이므로 NULL이 아니다.
노랑이 책에 나온 NULL 설명: '아직 정의되지 않은 미지의 값' 혹은 '현재 데이터를 입력하지 못하는 경우'를 의미한다.


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

 
① (1, NULL)과 (2, 2)
② (1, NULL)과 (2, NULL)
③ (2, 2)
④ (1, 1)
 
답: ②

🔥 알아 둘 것

INTEGER는 INT와 동일한 의미로 '정수'를 의미한다. (데이터타입)
REFERENCES는 참조형 제약조건이라고 부르고 REFERENCES 부모테이블명(참조할 컬럼명) 형태로 구현한다. 위 문제에서 REFERENCES T(C) 라고 하면 테이블 T의 C 컬럼을 참조하는 것이다.

REFERENCE 테이블명(컬럼명) 뒤에 'ON DELETE CASCADE' 혹은 'ON DELETE SET NULL' 조건이 붙을 수 있다.
ON DELETE CASCADE: 부모 테이블이 삭제되면 자식 테이블도 삭제한다.
ON DELETE SET NULL: 부모 테이블이 삭제되면 자식 테이블이 참조한 값을 NULL로 바꾼다.

 
위 참고 사항을 바탕으로 문제를 풀이 해보자. 문제에서는 테이블 T를 삭제하고(DELETE FROM T;), 테이블 R에 남아 있는 값이 무엇인지 묻고 있다.
 
SQL 구문을 보면,

  • 테이블 T는 정수형 컬럼 C(기본키)와 정수형 컬럼 D를 가진다.
  • 테이블 S는 정수형 컬럼 B(기본키)와 정수형 컬럼 C를 가지는데, 여기서 C는 테이블 T의 기본키인 C 컬럼을 참조한다. 또한 부모 테이블인 T가 삭제될 경우 T를 참조해 만든 S의 데이터도 함께 삭제되도록 한다.
  • 마지막으로 테이블 R은 정수형 컬럼 A(기본키)와 정수형 컬럼 B를 가지는데, 여기서 B는 테이블 S의 기본키인 B 컬럼을 참조한다. 만약 부모 테이블인 S가 삭제될 경우 S를 참조해 만든 컬럼 B의 값을 NULL로 바꾼다.

구문을 해석하면 T가 삭제돼서 S 테이블이 모두 사라졌고, S 테이블의 B 컬럼을 참조해 만든 R 테이블의 B 컬럼 값은 모두 NULL이 되어 정답은 2번이 된다.


10. 다음 중 테이블 생성시 칼럼별 생성할 수 있는 제약조건(Constraints)에 대한 설명으로 가장 부적절한 것은?
① UNIQUE: 테이블 내에서 중복되는 값이 없으며, NULL 입력이 불가능하다.
② PK: 주키로 테이블당 1개만 생성이 가능하다.
③ FK: 외래키로 테이블당 여러 개 생성이 가능하다.
④ NOT NULL: 명시적으로 NULL 입력을 방지한다.
 
답: ①
 

🔥 알아 둘 것

UNIQUE KEY(고유키)는 테이블 내에서 중복되는 값이 없으며, NULL 입력이 가능하다.

PRIMARY KEY(기본키)는 중복 불가, NULL 입력 불가능, 테이블당 1개만 생성 가능하다. (PK = UNIQUE + NOT NULL)
FOREIGN KEY(외래키)는 다른 테이블의 기본 키를 참조하여 사용한다. 테이블당 여러 개 생성 가능.

오늘은 SQL 노랑이책 SQL기본 파트, 문제 1번에서 10번을 풀어 보았다. 생각보다 오래 걸려서 10개씩 끊어서 해야 할 것 같다. 또로록... 꾸준히 열심히 해야지!  열쩡🔥 열쩡🔥
 
문제 풀이 모르는 부분은 아래 유튜브 영상을 참고하였다. 상세하게 잘 설명해주어서 이해하기 쉽기 때문에 SQLD를 준비하고 있다면 틈틈이 아래 동영상을 보는 걸 추천한다. :D
 
https://youtu.be/3xjikMSPtbU?feature=shared