alt

(DB실무) Part4-SQL 기본 및 활용-1.Basic DML

2026년 11월 8일 공유

강의: SQL 기본과 활용 — 기본 DML

개요

SQL 실습 중심 수업의 첫 주제로 기본 DML을 다룬다. SQL의 구성과 작성 규칙을 살펴본 뒤, Oracle 환경에서 K리그 예제 데이터베이스를 사용해 SELECT, INSERT, DELETE, UPDATE를 실습한다. 이 중 가장 비중이 큰 내용은 조회 구문인 SELECT다.
실습 전 Oracle 환경과 SQL 스크립트를 준비해야 한다. 배포된 K리그 스크립트를 실행하면 선수·팀·경기장·일정 테이블과 예제 데이터가 생성된다.

핵심 개념

SQL의 구성

SQL은 관계형 데이터베이스의 정의·조작·제어에 사용되며, 다음 언어로 구성된다.
  • DDL: 데이터 구조와 스키마 정의. 예: CREATE, ALTER, DROP
  • DML: 테이블 데이터 조회 및 변경. 예: SELECT, INSERT, UPDATE, DELETE
  • DCL: 사용자 권한 부여·회수. 예: GRANT, REVOKE
  • TCL: 트랜잭션 제어. 예: COMMIT, ROLLBACK
대부분의 기본 문법은 표준 SQL을 따르지만, 일부 동작은 DBMS에 따라 다를 수 있다.

SQL 작성 규칙

  • 문장은 **세미콜론(;)**으로 끝낸다. 줄바꿈은 문장의 끝을 뜻하지 않는다.
  • 명령어·객체명·변수명은 대소문자를 구분하지 않지만, 문자열 데이터 값은 대소문자를 구분한다.
  • 문자열과 날짜 값은 작은따옴표(')로 감싼다.
  • 단어는 공백이나 줄바꿈으로 구분한다.
  • 한 줄 주석은 --, 여러 줄 주석은 /* ... */를 사용한다.

테이블 간 참조와 생성 순서

외래 키를 선언할 때 참조 대상 테이블이 이미 존재해야 한다. 따라서 부모 테이블을 먼저 만들고, 이를 참조하는 테이블을 나중에 생성한다.
K리그 예제에서는 경기장과 팀·선수·일정 간 참조 관계를 고려해 테이블 생성 순서를 정한다. 배포 스크립트는 기존 테이블을 삭제한 뒤 다시 생성하고 데이터를 삽입하므로, 초기 상태로 복구할 때 다시 실행할 수 있다.

세부 노트

SELECT: 데이터 조회

기본 형식은 다음과 같다.
SELECT 컬럼명
FROM 테이블명
WHERE 조건;
  • SELECT *는 해당 테이블의 모든 컬럼을 조회한다.
  • 필요한 컬럼만 나열하면 해당 컬럼만 출력한다.
  • WHERE는 조회할 행을 조건으로 제한한다.
  • FROM은 필수이며, 조건이 필요하지 않으면 WHERE는 생략할 수 있다.
중복 제거와 별칭
  • 기본 조회는 중복 행을 그대로 반환한다. 이는 SELECT ALL과 같은 동작이다.
  • SELECT DISTINCT는 선택한 컬럼 또는 컬럼 조합을 기준으로 중복을 제거한다.
  • DISTINCT는 SELECT 바로 뒤에 한 번만 쓴다.
  • NULL도 중복 판정 시 하나의 값처럼 취급된다.
  • AS로 컬럼 별칭을 지정할 수 있다. 별칭에 공백이나 특수문자가 있으면 큰따옴표로 감싼다.
SELECT height AS "선수 키"
FROM player;
DUAL 테이블
테이블의 실제 데이터가 필요 없는 계산이나 상수 출력을 할 때 Oracle의 DUAL을 사용할 수 있다.
SELECT 5 + 4 AS result
FROM dual;
DUAL은 Oracle이 제공하는 한 행짜리 테이블이다.
정렬: ORDER BY
ORDER BY는 조회 결과의 출력 순서를 지정하며 SQL 문장의 마지막에 둔다.
  • 기본 정렬은 오름차순(ASC)이며 생략할 수 있다.
  • 내림차순은 DESC로 지정한다.
  • 여러 기준을 쉼표로 나열하면 앞의 기준이 우선한다.
  • SELECT 목록에 없는 컬럼도 정렬 기준으로 사용할 수 있다.
  • Oracle에서는 기본적으로 NULL을 큰 값으로 취급하므로 내림차순에서 먼저 나타날 수 있다. DBMS별 차이에 유의한다.
조건과 연산자
WHERE에서는 비교·논리·SQL 연산자를 사용한다.
  • 비교 연산자: =, <>, >, >=, <, <=
  • 논리 연산자: NOT, AND, OR
  • SQL 연산자: BETWEEN, IN, LIKE, IS NULL
주요 유의점:
  • BETWEEN A AND B는 A와 B를 포함한다. 반대 조건은 NOT BETWEEN이다.
  • IN은 여러 후보 값 중 하나와 일치하는지 확인한다. NOT IN은 해당 값들을 제외한다.
  • LIKE에서 %는 문자가 없거나 여러 개 있는 경우, _는 문자 하나에 대응한다.
  • NULL은 = NULL 또는 <> NULL로 비교하지 않는다. IS NULL, IS NOT NULL을 사용한다.
  • 조건의 우선순위가 헷갈릴 수 있으므로 괄호를 적절히 사용한다. 일반적으로 NOT이 AND보다, AND가 OR보다 먼저 평가된다.
  • AND, OR 조건에 NULL이 포함되면 결과가 참·거짓이 아닌 미정이 될 수 있다.
계산과 데이터 형식
  • 산술 연산은 SELECT와 WHERE에서 모두 사용할 수 있다.
  • 숫자뿐 아니라 날짜에도 산술 연산을 적용할 수 있다. 날짜에 정수를 더하면 날짜가 이동한다.
  • NULL은 값이 없는 상태이므로 산술 연산 결과도 NULL이 된다.
  • 숫자형 데이터는 숫자로 비교하지만, 문자열로 저장된 숫자는 문자열 순서로 비교될 수 있다. 데이터 형식에 유의한다.
  • || 또는 CONCAT으로 문자열을 연결할 수 있다. CONCAT은 두 항목을 연결하며, 여러 항목을 잇는 경우에는 ||를 이어 쓸 수 있다.
ROWNUM
ROWNUM은 Oracle이 제공하는 의사 컬럼으로, 결과 행에 순번을 부여하거나 앞에서부터 일정 개수의 행을 제한할 때 사용한다. 실제 테이블에 저장된 컬럼은 아니다.
  • 일반적으로 ROWNUM < N 또는 ROWNUM <= N 형태로 행 수를 제한한다.
  • ROWNUM은 일반 컬럼처럼 특정 번호와 직접 비교하는 용도로 쓰기 어렵다.
  • 순번을 실제 데이터로 보관해야 한다면 별도 컬럼을 만들고 값을 저장해야 한다.

INSERT: 데이터 삽입

한 번의 INSERT는 일반적으로 한 행을 추가한다.
  • 일부 컬럼에만 값을 넣을 때는 컬럼 목록을 지정한다. 지정하지 않은 컬럼은 NULL이 될 수 있다.
  • 컬럼 목록을 생략하면 테이블 전체 컬럼의 값과 순서를 맞춰 모두 입력해야 한다.
  • 값이 없는 항목은 NULL 또는 빈 문자열('')로 표현할 수 있다. 공백 한 칸이 들어간 문자열은 빈 문자열과 다르다.
  • 문자열과 날짜는 작은따옴표로 감싼다.
INSERT ALL은 여러 행을 한꺼번에 삽입할 때 사용한다. Oracle에서는 INSERT ALL 뒤에 반드시 SELECT 문을 써야 한다. 직접 입력한 값을 삽입할 때는 SELECT ... FROM DUAL을 활용할 수 있다.

DELETE: 데이터 삭제

  • 조건 없이 실행하면 테이블의 모든 행을 삭제한다.
  • 특정 행만 삭제하려면 WHERE 조건을 지정한다.
  • DELETE는 테이블 구조가 아니라 데이터 행에 영향을 준다.

UPDATE: 데이터 수정

UPDATE는 지정한 컬럼의 값을 변경한다.
  • WHERE가 없으면 모든 행이 수정된다.
  • 특정 행만 바꾸려면 WHERE 조건을 반드시 지정한다.
  • 조회(SELECT)와 달리 INSERT, UPDATE, DELETE는 데이터 내용을 변경하므로 실습 시 주의한다.

실습 데이터 관리

SELECT는 데이터를 변경하지 않지만, 나머지 DML은 테이블 데이터에 영향을 준다. 실습 결과가 강의 예시와 다를 수 있으며, 초기 상태로 되돌리고 싶다면 배포된 스크립트를 다시 실행한다.
공개 노트 모두 보기