기본 DML

이강용·2026년 9월 29일

SQLD

목록 보기
6/12

INSERT

INSERT의 개념

  • INSERT는 테이블에 새 행을 추가하는 DML 명령어
  • 테이블이 먼저 생성되어 있어야 함
  • 기본은 한 행 삽입이며, 문법에 따라 여러 행도 가능
  • 실행 결과는 COMMIT 또는 ROLLBACK으로 확정·취소

단일 행 INSERT

  • 한 번의 INSERT 문으로 한 행을 삽입하는 방식
  • 컬럼 목록 명시 방식과 생략 방식이 있음

컬럼 목록 명시 방식

  • 지정하지 않은 컬럼에는 DEFAULT 값 또는 NULL이 입력
  • NOT NULL이며 DEFAULT가 없는 컬럼이면 오류가 발생
  • VALUES의 값 순서는 명시한 컬럼 순서와 일치해야 함
  • 실무에서 권장되는 방식

INSERT INTO 테이블명 (컬럼1, 컬럼2, 컬럼3) VALUES(값1, 값2, 값3);

컬럼 목록 생략 방식

  • 모든 컬럼에 값을 입력해야 하며 순서가 테이블 정의 순서와 일치해야 함
  • 순서나 개수가 맞지 않으면 오류가 발생
  • 값을 생략할 컬럼은 NULL 또는 DEFAULT를 명시

INSERT INTO 테이블명 VALUES(값1, 값2, 값3);

다중 행 INSERT

  • 한 번의 INSERT 문으로 여러 행을 삽입하는 방식
  • DBMS별 지원 방식이 다름

UNION ALL + DUAL 방식(Oracle)

  • DUAL은 Oracle의 더미 테이블로, 고정값 SELECT에 사용
  • 각 SELECT가 한 행을 만들고 UNION ALL로 합쳐 삽입

INSERT INTO DEPARTMENT (DEPT_ID, DEPT_NAME, LOCATION)
SELECT 60, '품질관리팀', '서울' FROM DUAL
UNION ALL
SELECT 70, '법무팀', '서울' FROM DUAL
UNION ALL
SELECT 80, '연구소', '대전' FROM DUAL;

INSERT ALL 방식(Oracle)

  • Oracle에서 다중 행 삽입에 자주 쓰는 문법
  • 마지막에 SELECT * FROM DUAL을 붙여야 실행
  • 서로 다른 테이블에 동시 삽입 가능

INSERT ALL
INTO DEPARTMENT (DEPT_ID, DEPT_NAME, LOCATION)
VALUES (60, '품질관리팀', '서울')
INTO DEPARTMENT (DEPT_ID, DEPT_NAME, LOCATION)
VALUES (70, '법무팀', '서울')
INTO DEPARTMENT (DEPT_ID, DEPT_NAME, LOCATION)
VALUES (80, '연구소', '대전')
SELECT*FROM DUAL;

VALUES 다중 나열 방식(MySQL/ANSI)

  • MySQL, MariaDB, PostgreSQL 등에서 지원하는 방식

INSERT INTO DEPARTMENT (DEPT_ID, DEPT_NAME, LOCATION) VALUES
(60, '품질관리팀', '서울'),
(70, '법무팀', '서울'),
(80, '연구소', '대전');

INSERT INTO ~ SELECT

  • SELECT 결과를 그대로 삽입하는 방식
  • VALUES 절 없이 SELECT가 그 역할을 대체
  • SELECT가 반환하는 행 수만큼 삽입

INSERT INTO 대상테이블 (컬럼1, 컬럼2,...)
SELECT 컬럼A, 컬럼B,...
FROM 원본 테이블
WHERE 조건;

SELECT 기본 구조

SELECT의 개념

  • SELECT는 데이터를 조회하는 명령어
  • 데이터를 변경하지 않으므로 트랜잭션 제어 대상이 아님
  • 조회 대상·컬럼·조건·정렬 기준을 함께 지정
  • SQL에서 가장 자주 쓰이는 명령어

SELECT 기본 문법

  • SELECT 절에는 조회할 컬럼을 명시
  • FROM 절에는 가져올 테이블을 명시
  • SELECT와 FROM은 필수 절
  • 작성 순서와 실행 순서는 다름
절역할실행순서
FROM조회의 대상이 되는 테이블과 JOIN 지정1
WHERE조건을 만족하는 행(Row)을 필터링2
GROUP BY특정 컬럼을 기준으로 결과 집합을 그룹화3
HAVING그룹화된 결과에 대한 조건 필터링4
SELECT조회할 컬럼 및 표현식 선택5
ORDER BY최종 결과 데이터 정렬6

전체 열 조회와 특정 열 조회

전체 열 조회(*)

  • *는 모든 컬럼을 출력하는 와일드카드
  • 출력 순서는 테이블 정의 순서를 따름
  • 실무에서는 필요한 컬럼만 명시하는 것이 좋음

SELECT * FROM EMPLOYEE;

EMP_IDEMP_NAMESALARYHIRE_DATE
1010박팀장7002012-03-15
1011이대리5002020-04-01
1012최사원3002024-01-02

특정 열 조회

  • 출력할 컬럼을 쉼표(,)로 구분
  • SELECT 절에 작성한 순서대로 출력
  • 같은 컬럼을 중복 작성하면 중복 출력됨

SELECT EMP_ID, EMP_NAME, SALARY FROM EMPLOYEE;

EMP_IDEMP_NAMESALARY
1010박팀장700
1011이대리500
1012최사원300

산술 연산자와 열 별칭(AS)

산술 연산자

  • SELECT 절에서 컬럼 값으로 산술 연산을 수행할 수 있음
  • 연산 결과는 새 컬럼처럼 출력
  • NULL이 포함된 산술 연산 결과는 항상 NULL
  • 연산자 종류는 다음과 같음
연산자의미예시
+더하기SALARY + 100
-빼기SALARY - 100
*곱하기SALARY * 12
/나누기SALARY/12

SELECT EMP_NAME, SALARY, ROUND(SALARY/12) AS 월급 FROM EMPLOYLEE;

열 별칭(AS)

  • 컬럼 또는 연산 결과에 임시 이름을 부여하는 기능
  • AS는 생략할 수 있음
  • 별칭은 ORDER BY에서는 가능, WHERE에서는 불가능
  • WHERE는 SELECT보다 먼저 실행되어 별칭이 아직 없기 때문

WHERE 절

WHERE 절 개념

  • WHERE 절은 SELECT·UPDATE·DELETE에서 조건으로 행을 필터링함
  • 조건을 만족하는 행만 결과에 포함
  • FROM 절 다음에 위치하며 FROM 직후에 처리
  • 조건식이 TRUE인 행만 결과에 포함

SELECT 컬럼1, 컬럼2,...
FROM 테이블명
WHERE 조건식;

비교 연산자

  • 두 값을 비교해 TRUE 또는 FALSE를 반환
  • 문자열은 작은따옴표(') 처리
  • 숫자는 따옴표 없이 씀
  • NULL은 비교 연산자(=, <>)로 비교할 수 없으며 IS NULL을 사용
연산자의미예시
=같다 (Equal to)SALARY = 500
<> 또는 !=같지 않다 (Not equal to)SALARY <> 500
<작다 (Less than)SALARY < 500
>크다 (Greater than)SALARY > 500
<=작거나 같다 (Less than or equal to)SALARY <= 500
>=크거나 같다 (Greater than or equal to)SALARY >= 500

UPDATE

UPDATE의 개념

  • UPDATE는 저장된 행의 컬럼 값을 수정하는 DML 명령어
  • WHERE 절로 수정할 행을 지정, 생략 시 모든 행의 컬럼 값이 수정
  • 수정 결과는 COMMIT 또는 ROLLBACK으로 확정·취소

UPDATE 기본 문법

  • SET 절에 수정할 컬럼과 새 값을 명시
  • 여러 컬럼은 쉼표(,)로 구분
  • WHERE 절을 생략하면 모든 행의 컬럼 값이 수정되므로 주의가 필요

UPDATE 테이블명
SET 컬럼1 = 값1,
컬럼2 = 값2,...
WHERE 조건식;

profile
HW + SW = 1

0개의 댓글