SQL 개발자(SQLD)

SQL 개발자(SQLD) 시험 노트개념 정리15 MIN

관계형 데이터베이스와 SQL 문장의 종류

SQLD 2과목의 첫 자리입니다. 테이블·행·열·도메인 같은 관계형 데이터베이스의 기본 용어와 기본키·외래키, DDL·DML·DCL·TCL 네 갈래의 분류, SQL 문장이 처리되는 흐름, 그리고 명명 규칙과 DESCRIBE를 정리합니다.

앞 노트까지가 1과목이었습니다. 여기서부터는 모델로 그려 온 것을 실제 테이블로 만들고 SQL로 다룹니다. 1과목의 엔터티·속성·관계가 각각 테이블·컬럼·외래키라는 이름으로 다시 나오므로 용어가 바뀌는 자리를 먼저 맞추고 갑니다. 이 절의 분류 문항은 2과목에서 가장 확실하게 맞힐 수 있는 자리입니다.

관계형 데이터베이스의 구성

관계형 데이터베이스는 데이터를 행과 열로 이루어진 테이블에 담고, 테이블끼리는 값으로 이어 놓는 데이터베이스입니다. 이어 주는 것이 포인터가 아니라 값이라는 점이 핵심이고, 그래서 나중에 관계를 새로 만들어도 기존 데이터를 건드릴 필요가 없습니다.

테이블·행·열

용어 다른 이름 뜻
테이블 릴레이션 행과 열로 이루어진 데이터의 집합
행 로우, 튜플, 인스턴스 테이블의 가로 한 줄. 하나의 데이터
열 컬럼, 속성 테이블의 세로 한 줄. 데이터의 한 항목

1과목의 엔터티가 테이블, 인스턴스가 행, 속성이 열입니다. 시험은 이 대응을 섞어 묻습니다 — 「튜플은 테이블의 열이다」 같은 보기가 나오면 틀린 문장입니다.

테이블에는 두 가지 성질이 더 있습니다. 행에는 순서가 없습니다 — 먼저 넣은 행이 먼저 나온다는 보장이 없어서, 순서가 필요하면 ORDER BY로 직접 지정해야 합니다. 그리고 기본키가 있는 한 완전히 같은 행이 둘 존재할 수 없습니다. 조회 결과가 항상 넣은 차례대로 나온다는 보기는 틀린 문장입니다.

도메인

도메인은 하나의 열이 가질 수 있는 값의 범위입니다. 나이 컬럼이 NUMBER(3)이면 세 자리 숫자가 그 도메인이고, 성별 컬럼에 CHECK (성별 IN ('M', 'F'))를 걸면 두 값이 그 도메인입니다. 데이터 타입과 길이, 제약 조건을 합쳐 정해진다고 보면 됩니다.

기본키와 외래키

기본키는 테이블의 행을 유일하게 구분하는 열 또는 열의 조합입니다. 1과목의 주식별자가 물리 모델로 내려온 것이고, 유일해야 하며 NULL을 가질 수 없습니다.

외래키는 다른 테이블의 기본키를 참조하는 열입니다. 기본키와 달리 NULL일 수 있고 중복될 수도 있습니다 — 부서가 아직 안 정해진 사원이 있을 수 있고, 같은 부서에 사원이 여럿일 수 있기 때문입니다. 이 차이가 그대로 문항이 됩니다.

SQL 문장의 갈래

SQL 문장은 하는 일에 따라 네 갈래로 나뉩니다. 어느 명령이 어느 갈래인지를 묻는 문항이 매 회차에 나옵니다.

DDL

DDL은 테이블 같은 구조를 만들고 바꾸고 지우는 명령입니다. CREATE·ALTER·DROP·RENAME·TRUNCATE가 여기 속합니다.

DDL은 실행되는 순간 자동으로 커밋됩니다. 앞에서 실행한 INSERT가 아직 커밋되지 않았더라도 DDL 하나를 실행하면 그것까지 함께 확정됩니다. TRUNCATE가 DELETE와 다른 이유도 여기입니다 — DELETE는 DML이라 되돌릴 수 있지만 TRUNCATE는 DDL이라 롤백되지 않습니다.

DML

DML은 테이블 안의 데이터를 넣고 고치고 지우고 읽는 명령입니다. INSERT·UPDATE·DELETE·SELECT가 여기 속합니다.

SELECT만 따로 DQL로 부르기도 하지만 SQLD에서는 DML에 함께 넣습니다. DML은 자동 커밋되지 않으므로 COMMIT 전까지는 되돌릴 수 있습니다.

되돌릴 수 있다는 것은 바꾼 내용이 아직 나만 보인다는 뜻이기도 합니다. UPDATE를 실행하고 커밋하지 않은 동안 다른 사용자가 그 테이블을 조회하면 바뀌기 전 값이 보입니다. 확정 전까지 걸려 있는 이 상태를 트랜잭션이라고 부르고, 2과목 뒤쪽의 관리 구문에서 다시 다룹니다.

DCL과 TCL

갈래 하는 일 명령
DCL 권한을 주고 거둔다 GRANT, REVOKE
TCL 트랜잭션을 확정하거나 되돌린다 COMMIT, ROLLBACK, SAVEPOINT

COMMIT과 ROLLBACK을 DCL로 분류한 자료가 있어 혼동되는 자리인데, SQLD 출제 기준은 트랜잭션을 다루는 이 셋을 TCL로 따로 둡니다. 「GRANT는 TCL이다」 같은 보기가 오답으로 자주 나옵니다.

SQL이 처리되는 흐름

파싱·실행·인출

SQL 문장 하나가 결과를 내놓기까지 세 단계를 거칩니다.

  1. 파싱 — 문법이 맞는지, 그런 테이블과 컬럼이 있는지, 그것을 볼 권한이 있는지 확인하고 실행 계획을 만듭니다.
  2. 실행 — 만들어진 계획대로 데이터에 접근합니다.
  3. 인출 — 읽어 온 행을 사용자에게 돌려줍니다. SELECT에만 있는 단계입니다.

문법이 틀렸거나 없는 컬럼을 적으면 데이터에 손도 대기 전인 파싱 단계에서 멈춥니다. 오류 메시지가 「테이블 또는 뷰가 존재하지 않습니다」로 나오는 자리가 여기입니다.

테이블을 만들고 채우는 순서

새 업무를 시작할 때 문장 갈래는 대개 이 차례로 쓰입니다.

CREATE TABLE 부서 (               -- ① DDL: 구조를 만든다 (여기서 자동 커밋)
  부서코드 VARCHAR2(10) PRIMARY KEY,
  부서명   VARCHAR2(50) NOT NULL
);
INSERT INTO 부서 VALUES ('D01', '개발팀');   -- ② DML: 데이터를 넣는다
COMMIT;                                      -- ③ TCL: 확정한다
GRANT SELECT ON 부서 TO 조회전용;            -- ④ DCL: 권한을 준다

②와 ③ 사이에서 ROLLBACK을 하면 넣은 행이 사라지지만 ①의 테이블은 남습니다. 갈래를 외우는 것보다 이 차이를 이해해 두는 편이 응용 문항에 강합니다.

명명 규칙과 구조 확인

이름을 짓는 규칙

테이블과 컬럼 이름에는 공통 규칙이 있습니다.

  • 반드시 문자로 시작합니다. 숫자로 시작할 수 없습니다.
  • 영문자·숫자와 _·$·#만 쓸 수 있고 공백은 쓸 수 없습니다.
  • SELECT·TABLE 같은 예약어는 이름으로 쓸 수 없습니다.
  • 한 테이블 안에서 같은 컬럼 이름을 두 번 쓸 수 없습니다.
  • 같은 사용자 아래에서 테이블 이름이 겹칠 수 없습니다.

EMP_2026은 되지만 2026_EMP는 숫자로 시작해 안 되고, EMP LIST는 공백 때문에 안 됩니다. 시험은 이런 이름 넷을 늘어놓고 만들 수 없는 것을 고르게 합니다.

주석

주석은 두 가지입니다. --는 그 줄의 끝까지를 주석으로 만들고, /*와 */는 그 사이를 감싸 여러 줄을 주석으로 만듭니다. 테이블이나 컬럼에 설명을 붙여 데이터베이스에 저장하는 COMMENT ON은 이름은 비슷하지만 전혀 다른 명령입니다 — 이쪽은 실제로 실행되어 사전에 기록됩니다.

DESCRIBE

DESCRIBE는 테이블의 구조를 보여 주는 명령이고 DESC로 줄여 씁니다. 표준 SQL이 아니라 도구가 제공하는 명령이라 DDL·DML 어디에도 속하지 않습니다.

DESC 부서;
-- 이름       널?       유형
-- ---------- --------- -------------
-- 부서코드   NOT NULL  VARCHAR2(10)
-- 부서명     NOT NULL  VARCHAR2(50)

컬럼 이름과 NULL 허용 여부, 데이터 타입이 나옵니다. 값이 아니라 구조만 보여 준다는 점을 묻는 보기가 있습니다.

연습 문제

  1. 관계형 데이터베이스의 용어 대응으로 옳지 않은 것은?
    ① 테이블 — 릴레이션
    ② 행 — 튜플
    ③ 열 — 속성
    ④ 도메인 — 행이 가질 수 있는 값의 범위
    ④. 도메인은 행이 아니라 하나의 열이 가질 수 있는 값의 범위입니다.
  2. 기본키와 외래키에 대한 설명으로 옳은 것은?
    ① 외래키는 NULL을 가질 수 없다
    ② 기본키는 중복된 값을 가질 수 있다
    ③ 외래키는 같은 값이 여러 행에 있을 수 있다
    ④ 한 테이블에 기본키를 둘 이상 만들 수 있다
    ③. 한 부서에 사원이 여럿이면 외래키 값이 반복됩니다. 기본키는 유일해야 하고 NULL일 수 없으며 테이블당 하나입니다.
  3. 다음 중 DDL에 해당하지 않는 것은?
    ① CREATE
    ② ALTER
    ③ TRUNCATE
    ④ DELETE
    ④. DELETE는 데이터를 지우는 DML이라 롤백할 수 있습니다. TRUNCATE는 DDL이라 실행 즉시 확정되어 되돌릴 수 없습니다.
  4. 다음 SQL을 차례로 실행했을 때 마지막 SELECT가 돌려주는 값은?
    INSERT INTO 부서 VALUES ('D01', '개발팀');
    INSERT INTO 부서 VALUES ('D02', '영업팀');
    CREATE TABLE 임시 (번호 NUMBER);
    ROLLBACK;
    SELECT COUNT(*) FROM 부서;
    「실행 전 부서 테이블은 비어 있었다」
    ① 0
    ② 1
    ③ 2
    ④ 오류가 난다
    ③. CREATE는 DDL이라 실행되는 순간 앞의 INSERT 둘까지 함께 자동 커밋됩니다. 따라서 ROLLBACK이 되돌릴 것이 남아 있지 않아 두 행이 그대로 있습니다.
  5. 명령과 갈래가 잘못 짝지어진 것은?
    ① GRANT — DCL
    ② SAVEPOINT — TCL
    ③ RENAME — DDL
    ④ COMMIT — DCL
    ④. COMMIT은 트랜잭션을 확정하는 명령이라 TCL입니다. ROLLBACK·SAVEPOINT와 한 묶음입니다.
  6. 테이블 이름으로 쓸 수 없는 것은?
    ① EMP_2026
    ② SALES#Q1
    ③ 2026_SALES
    ④ DEPT$MASTER
    ③. 이름은 반드시 문자로 시작해야 합니다. _·$·#은 이름 안에서 쓸 수 있습니다.
  7. SQL 문장이 처리되는 단계에 대한 설명으로 옳은 것은?
    ① 없는 컬럼 이름을 적으면 실행 단계에서 오류가 난다
    ② 파싱 단계에서 권한이 있는지도 확인한다
    ③ 인출은 모든 SQL 문장에 있는 단계다
    ④ 실행 계획은 인출 단계에서 만들어진다
    ②. 파싱은 문법·객체 존재·권한을 함께 확인하고 실행 계획까지 만듭니다. 인출은 결과 행을 돌려주는 단계라 SELECT에만 있습니다.
  8. 다음 설명 중 옳은 것은?
    ① DESC는 테이블에 든 데이터를 보여 준다
    ② --는 여러 줄을 한꺼번에 주석으로 만든다
    ③ COMMENT ON은 주석 기호와 달리 실제로 실행되어 설명이 저장된다
    ④ /* */ 안의 SQL은 그대로 실행된다
    ③. COMMENT ON은 테이블·컬럼 설명을 데이터 사전에 기록하는 명령입니다. DESC는 구조만, --는 한 줄만, /* */ 안은 실행되지 않습니다.

여기까지가 2과목의 입구입니다. 다음 자리에서는 SELECT 문의 기본 구조로 들어가 별칭과 산술·합성 연산자를 다룹니다. 이 절에서 본 테이블·컬럼 용어가 그대로 FROM과 SELECT 뒤에 적히는 이름이 되므로, 갈래 분류는 여기서 한 번에 외워 두는 편이 좋습니다.

SQL 개발자(SQLD) 시험 노트 전체 보기