Database/SQL ๊ธฐ์ดˆ

SQL ๊ธฐ์ดˆ - INSERT INTO SELECT

UNarD 2026. 4. 17. 10:40

๐Ÿ“ฅ INSERT INTO SELECT

INSERT INTO SELECT๋Š” ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ์กฐํšŒ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ์กด ํ…Œ์ด๋ธ”์— ์‚ฝ์ž…ํ•˜๋Š” ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค.
SELECT INTO์™€ ๋‹ฌ๋ฆฌ ๋Œ€์ƒ ํ…Œ์ด๋ธ”์ด ์กด์žฌํ•ด์•ผ ํ•ด์š”!

๐Ÿ“‹ ์˜ˆ์‹œ ํ…Œ์ด๋ธ” โ€” students

id name grade score teacher_id
1 ๊น€์ฒ ์ˆ˜ 1 85 1
2 ์ด์˜ํฌ 2 NULL 1
3 ๋ฐ•๋ฏผ์ค€ 1 90 2
4 ์ตœ์ง€์› 3 72 NULL
5 ์ •์ˆ˜ํ˜„ 2 NULL 2
6 ํ•œ์ง€๋ฏผ 1 78 1
7 ์œค์„œ์ค€ 3 95 2
8 ๊ฐ•๋‹ค์€ 2 88 1
9 ์ž„ํ˜„์šฐ 3 NULL 2
10 ์˜ค์ง€์•„ 1 65 NULL
CREATE DATABASE IF NOT EXISTS practice;
USE practice;

DROP TABLE IF EXISTS students;
DROP TABLE IF EXISTS students_backup;

CREATE TABLE students (
    id         INT,
    name       VARCHAR(10),
    grade      INT,
    score      INT,
    teacher_id INT
);

CREATE TABLE students_backup (
    id         INT,
    name       VARCHAR(10),
    grade      INT,
    score      INT,
    teacher_id INT
);

INSERT INTO students VALUES (1,  '๊น€์ฒ ์ˆ˜', 1, 85,   1);
INSERT INTO students VALUES (2,  '์ด์˜ํฌ', 2, NULL,  1);
INSERT INTO students VALUES (3,  '๋ฐ•๋ฏผ์ค€', 1, 90,   2);
INSERT INTO students VALUES (4,  '์ตœ์ง€์›', 3, 72,   NULL);
INSERT INTO students VALUES (5,  '์ •์ˆ˜ํ˜„', 2, NULL,  2);
INSERT INTO students VALUES (6,  'ํ•œ์ง€๋ฏผ', 1, 78,   1);
INSERT INTO students VALUES (7,  '์œค์„œ์ค€', 3, 95,   2);
INSERT INTO students VALUES (8,  '๊ฐ•๋‹ค์€', 2, 88,   1);
INSERT INTO students VALUES (9,  '์ž„ํ˜„์šฐ', 3, NULL,  2);
INSERT INTO students VALUES (10, '์˜ค์ง€์•„', 1, 65,   NULL);

โ€ผ๏ธ ์œ„ ํ…Œ์ด๋ธ”์„ ๊ธฐ์ค€์œผ๋กœ ์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿง  INSERT INTO SELECT๋ž€?

INSERT INTO SELECT๋Š” ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ์กฐํšŒ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ์กด ํ…Œ์ด๋ธ”์— ์‚ฝ์ž…ํ•˜๋Š” ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค.

๐ŸŽ€ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

INSERT INTO ๋Œ€์ƒํ…Œ์ด๋ธ” (์ปฌ๋Ÿผ1, ์ปฌ๋Ÿผ2, ...)
SELECT ์ปฌ๋Ÿผ1, ์ปฌ๋Ÿผ2, ...
FROM ์›๋ณธํ…Œ์ด๋ธ”
WHERE ์กฐ๊ฑด;
โ„น๏ธ SELECT INTO์™€ ์ฐจ์ด์ 
SELECT INTOINSERT INTO SELECT
๋Œ€์ƒ ํ…Œ์ด๋ธ”์ž๋™ ์ƒ์„ฑ์ด๋ฏธ ์กด์žฌํ•ด์•ผ ํ•จ
๊ธฐ์กด ๋ฐ์ดํ„ฐ-์œ ์ง€๋˜๊ณ  ์ถ”๊ฐ€๋จ
MySQL ์ง€์›โŒโœ…

๐Ÿ”น ํ…Œ์ด๋ธ” ์ „์ฒด ๋ณต์‚ฌ

students ์ „์ฒด๋ฅผ students_backup์— ์‚ฝ์ž…
INSERT INTO students_backup
SELECT * FROM students;
๐Ÿ“ฅ ๊ฒฐ๊ณผ โ€” students_backup
id name grade score teacher_id
1 ๊น€์ฒ ์ˆ˜ 1 85 1
2 ์ด์˜ํฌ 2 NULL 1
3 ๋ฐ•๋ฏผ์ค€ 1 90 2
4 ์ตœ์ง€์› 3 72 NULL
5 ์ •์ˆ˜ํ˜„ 2 NULL 2
6 ํ•œ์ง€๋ฏผ 1 78 1
7 ์œค์„œ์ค€ 3 95 2
8 ๊ฐ•๋‹ค์€ 2 88 1
9 ์ž„ํ˜„์šฐ 3 NULL 2
10 ์˜ค์ง€์•„ 1 65 NULL

๐Ÿ”น ์กฐ๊ฑด๋ถ€ ์‚ฝ์ž…

์ ์ˆ˜๊ฐ€ ์žˆ๋Š” ํ•™์ƒ๋งŒ ์‚ฝ์ž…
INSERT INTO students_backup
SELECT * FROM students
WHERE score IS NOT NULL;
๐Ÿ“ฅ ๊ฒฐ๊ณผ โ€” students_backup
id name grade score teacher_id
1 ๊น€์ฒ ์ˆ˜ 1 85 1
3 ๋ฐ•๋ฏผ์ค€ 1 90 2
4 ์ตœ์ง€์› 3 72 NULL
6 ํ•œ์ง€๋ฏผ 1 78 1
7 ์œค์„œ์ค€ 3 95 2
8 ๊ฐ•๋‹ค์€ 2 88 1
10 ์˜ค์ง€์•„ 1 65 NULL

์ด์˜ํฌ, ์ •์ˆ˜ํ˜„, ์ž„ํ˜„์šฐ๋Š” score๊ฐ€ NULL์ด๋ผ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ”น ํŠน์ • ์ปฌ๋Ÿผ๋งŒ ์‚ฝ์ž…

name, score๋งŒ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์— ์‚ฝ์ž…
INSERT INTO students_score_only (name, score)
SELECT name, score
FROM students;

์ปฌ๋Ÿผ ๊ตฌ์กฐ๊ฐ€ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์— ์‚ฝ์ž…ํ•  ๋•Œ๋Š” ์ปฌ๋Ÿผ์„ ๋ช…์‹œํ•ด์ค˜์•ผ ํ•ด์š”.

๐Ÿ“ฅ ๊ฒฐ๊ณผ โ€” students_score_only
name score
๊น€์ฒ ์ˆ˜ 85
์ด์˜ํฌ NULL
๋ฐ•๋ฏผ์ค€ 90
์ตœ์ง€์› 72
์ •์ˆ˜ํ˜„ NULL
ํ•œ์ง€๋ฏผ 78
์œค์„œ์ค€ 95
๊ฐ•๋‹ค์€ 88
์ž„ํ˜„์šฐ NULL
์˜ค์ง€์•„ 65

โ˜• ๋งˆ๋ฌด๋ฆฌ

์šฉ๋„ ์˜ˆ์‹œ
์ „์ฒด ๋ณต์‚ฌ INSERT INTO ๋Œ€์ƒ SELECT * FROM ์›๋ณธ
์กฐ๊ฑด๋ถ€ ์‚ฝ์ž… INSERT INTO ๋Œ€์ƒ SELECT * FROM ์›๋ณธ WHERE ์กฐ๊ฑด
ํŠน์ • ์ปฌ๋Ÿผ๋งŒ ์‚ฝ์ž… INSERT INTO ๋Œ€์ƒ (์ปฌ๋Ÿผ) SELECT ์ปฌ๋Ÿผ FROM ์›๋ณธ

๐Ÿ“š ์ฐธ๊ณ ์ž๋ฃŒ