MySQL - Insert Into Select: 초보자를 위한 종합 가이드
안녕하세요, 미래의 데이터베이스 마법사 여러분! 오늘 우리는 흥미로운 MySQL의 세계로 여행을 떠납니다. 특히 강력한 "Insert Into Select" 문을 집중적으로 다룰 것입니다. 프로그래밍에 새로운 사람이라면 걱정하지 마세요 - 저는 당신의 친절한 가이드가 되어 단계별로 설명해 드릴 것입니다. 그럼 커피 한 잔을 손에 들고, 이제 시작해 보겠습니다!
MySQL Insert Into Select 문
책장을 정리하는 것을 상상해 보세요. 새로운 책들이 쌓여 있는 stos(소스 데이터)가 있고, 이미 정리된 책장(목표 테이블)에 이들을 추가하고 싶습니다. MySQL에서 "Insert Into Select" 문이 하는 일은 바로 이와 같습니다 - 하나의 테이블에서 데이터를 복사하여 다른 테이블에 삽입할 수 있습니다.
기본 문법은 다음과 같습니다:
INSERT INTO target_table (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM source_table
WHERE condition;
이를 쉽게 풀어보면:
-
INSERT INTO target_table
: 여기에 우리의 새로운 데이터를 넣습니다. -
(column1, column2, ...)
: 우리가 채우고자 하는 목표 테이블의 컬럼들입니다. -
SELECT ...
: 여기서 우리는 데이터를 가져옵니다. -
FROM source_table
: 여기서 우리는 복사할 테이블을 지정합니다. -
WHERE condition
: 이 부분은 선택 사항이지만, 우리가 복사할 데이터를 필터링할 수 있습니다.
하나의 테이블에서 다른 테이블로 필요한 데이터 삽입
이제 실제 코드로 손을 대보겠습니다! 가정해 봅시다. 우리에게 두 개의 테이블이 있다고 해요: old_books
와 new_arrivals
. 우리는 old_books
에서 판타지 장르의 책들을 new_arrivals
로 이동하고 싶습니다.
INSERT INTO new_arrivals (title, author, genre)
SELECT title, author, genre
FROM old_books
WHERE genre = 'Fantasy';
이 예제에서:
- 우리는
new_arrivals
에 삽입하고, 지정된 컬럼들을 채우고자 합니다. - 우리는
old_books
에서 같은 컬럼들을 선택합니다. - 우리는 장르가 'Fantasy'인 책들만 선택합니다.
이 쿼리는 old_books
에서 모든 판타지 책들을 new_arrivals
로 복사합니다. 마치 판타지 책들을 새로운 책장으로 마법으로 이동시키는 것과 같습니다!
LIMIT을 사용하여 행 삽입
때로는 모든 것을 한 번에 이동하고 싶지 않을 수 있습니다.也许我们在测试,或者只有空间을 가지고 있습니다. 그때 LIMIT
이 유용하게 사용됩니다.
INSERT INTO bestsellers (title, author, sales)
SELECT title, author, sales
FROM all_books
WHERE sales > 1000000
ORDER BY sales DESC
LIMIT 10;
이 쿼리는:
-
bestsellers
테이블에 삽입합니다. -
all_books
에서 판매량이 백만을 초과하는 책들을 선택합니다. - 판매량이 내림차순으로 정렬합니다.
- 상위 10개만 가져옵니다.
이는 마치 최고의 책을 골라내는 것과 같습니다 - 상위 10개 베스트셀러만 특별 책장에 올립니다!
모든 컬럼을 하나의 테이블에서 다른 테이블로 복사
때로는 모든 것 - 모든 세부 사항을 복사하고 싶을 수 있습니다. 우리는 그렇게 할 수도 있습니다! 가정해 봅시다. 우리는 전체 2022년 판매 데이터를 보관하고 싶습니다:
INSERT INTO sales_archive_2022
SELECT *
FROM current_sales
WHERE YEAR(sale_date) = 2022;
여기서 어떤 일이 일어나고 있습니까?
- 우리는
INSERT INTO
부분에서 컬럼을 지정하지 않습니다. - 우리는
SELECT *
를 사용하여 모든 컬럼을 선택합니다. - 우리는 2022년 판매 데이터만 필터링합니다.
이는 마치 2022년 책장의 전체 사진을 찍고 새로운 장소에 정확히 재현하는 것과 같습니다.
클라이언트 프로그램을 사용하여 INSERT INTO SELECT 실행
이제 MySQL 외부에서 이 작업을 수행하는 방법에 대해 이야기해 보겠습니다. 클라이언트 프로그램을 사용하는 예제를 보여드리겠습니다. Python을 사용하는 예제를 보여드리겠습니다. Python은 데이터베이스 작업에 널리 사용되는 언어입니다.
import mysql.connector
# 데이터베이스에 연결
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="yourdatabase"
)
mycursor = mydb.cursor()
# 우리의 INSERT INTO SELECT 쿼리
sql = """
INSERT INTO new_arrivals (title, author, genre)
SELECT title, author, genre
FROM old_books
WHERE genre = 'Fantasy'
"""
# 쿼리 실행
mycursor.execute(sql)
# 변경 사항을 커밋
mydb.commit()
print(mycursor.rowcount, "레코드가 삽입되었습니다.")
이 스크립트는:
- MySQL 데이터베이스에 연결합니다.
- 데이터베이스와 상호작용할 커서 객체를 생성합니다.
- 우리의 INSERT INTO SELECT 쿼리를 정의합니다.
- 쿼리를 실행합니다.
- 변경 사항을 커밋합니다( 매우 중요!).
- 몇 개의 레코드가 삽입되었는지 출력합니다.
이는 마치 책장을 정리하는 로봇 비서가 당신을 위해 책장을 재정리하는 것과 같습니다!
결론
이제 "Insert Into Select"의 세계를 여행을 마쳤습니다. 기본 개념에서 실질적인 응용까지 모두 다루었습니다. 연습이 완벽을 만드는 것을 기억하시고, 이 쿼리들을 실험해 보지 마세요.
여기서 다룬 방법들의 빠른 참조 표입니다:
방법 | 설명 | 예제 |
---|---|---|
기본 Insert Into Select | 하나의 테이블에서 다른 테이블로 데이터 복사 | INSERT INTO target SELECT * FROM source |
특정 컬럼 삽입 | 특정 컬럼만 복사 | INSERT INTO target (col1, col2) SELECT col1, col2 FROM source |
조건부 삽입 | 특정 조건을 만족하는 데이터 복사 | INSERT INTO target SELECT * FROM source WHERE condition |
LIMIT을 사용한 삽입 | 제한된 수의 행 복사 | INSERT INTO target SELECT * FROM source LIMIT 10 |
모든 컬럼 복사 | 모든 컬럼을 지정하지 않고 복사 | INSERT INTO target SELECT * FROM source |
클라이언트 프로그램 사용 | MySQL 외부에서 Insert Into Select 실행 | 위의 Python 예제 |
快乐하게 쿼리 작성하시고, 데이터베이스가 항상 정리되고 효율적이기를 바랍니다!
Credits: Image by storyset