MySQL - Insert Into Select: Полное руководство для начинающих
Здравствуйте, будущие маги баз данных! Сегодня мы отправимся в увлекательное путешествие в мир MySQL, особенно focusing на мощную команду "Insert Into Select". Не волнуйтесь, если вы новички в программировании - я буду вашим доброжелательным гидом, объясняя все шаг за шагом. Так что возьмите кружку кофе и погружайтесь с нами!
Оператор MySQL Insert Into Select
Представьте, что вы организуете свою книжную полку. У вас есть куча новых книг (давайте назовем это是我们的 исходные данные), и вы хотите добавить их на уже организованную полку (нашу целевую таблицу). Именно это делает оператор "Insert Into Select" в MySQL - он позволяет нам копировать данные из одной таблицы и вставлять их в другую.
Основная синтаксис выглядит так:
INSERT INTO целевая_таблица (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM исходная_таблица
WHERE условие;
Давайте разберем это:
-
INSERT INTO целевая_таблица
: Это место, куда мы будем вставлять наши новые данные. -
(column1, column2, ...)
: Это столбцы в нашей целевой таблице, которые мы будем заполнять. -
SELECT ...
: Это место, откуда мы будем брать наши данные. -
FROM исходная_таблица
: Это таблица, которую мы копируем. -
WHERE условие
: Это可选的, но позволяет нам фильтровать то, что мы копируем.
Вставка необходимых данных из одной таблицы в другую
Теперь давайте脏手写一些真正的 код! Предположим, у нас есть две таблицы: 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
. Это как магически teleporting все ваши фэнтези-книги на новую полку!
Вставка строк с LIMIT
Иногда мы не хотим делать все сразу. Maybe мы тестируем вещи или у нас есть только место для нескольких книг. Вот где LIMIT
comes в handy.
INSERT INTO бестселлеры (title, author, sales)
SELECT title, author, sales
FROM all_books
WHERE sales > 1000000
ORDER BY sales DESC
LIMIT 10;
Этот запрос:
- Вставляет в нашу таблицу
bestsellers
. - Выбирает из
all_books
, где продажи превышают миллион. - Сортирует их по продажам в порядке убывания.
- Берет только top 10.
Это как выбирать сливки - только top 10 бестселлеров попадают на нашу особую полку!
Вставка всех столбцов из одной таблицы в другую
Иногда мы хотим copied everything - каждую мелочь. Мы можем сделать и это! Давайте представим, что мы архивируем всю нашу данные продаж за 2022 год:
INSERT INTO sales_archive_2022
SELECT *
FROM current_sales
WHERE YEAR(sale_date) = 2022;
Вот что происходит:
- Мы не указываем столбцы в части
INSERT INTO
. - Мы используем
SELECT *
, чтобы выбрать все столбцы. - Мы фильтруем, чтобы включить только продажи за 2022 год.
Это как сделать snapshot вашей всей книжной полки за 2022 год и recreate это exactly в новом месте.
INSERT INTO SELECT Использование клиентской программы
Теперь давайте поговорим о том, как мы можем сделать это خارج MySQL, используя клиентскую программу. Я покажу вам пример с использованием 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, "records inserted.")
Этот скрипт:
- Подключается к вашей базе данных MySQL.
- Создает объект курсора для взаимодействия с базой данных.
- Определяет наш запрос INSERT INTO SELECT.
- Выполняет запрос.
- Подтверждает изменения (очень важно!).
- Печатает, сколько записей было inserted.
Это как иметь роботического assistenta, который может reorganize ваши книжные полки для вас!
Заключение
И вот мы и добрались до этого, друзья! Мы прошли через страну "Insert Into Select" в MySQL. От основных концепций до практического применения, мы covered это все. Помните, что практика makes perfect, так что не бойтесь experimenting с этими запросами.
Вот быстрый справочный стол с методами, которые мы обсуждали:
Метод | Описание | Пример |
---|---|---|
Основной Insert Into Select | Копирование данных из одной таблицы в другую | INSERT INTO цель SELECT * FROM источник |
Вставка конкретных столбцов | Копирование только определенных столбцов | INSERT INTO цель (col1, col2) SELECT col1, col2 FROM источник |
Вставка с условием | Копирование данных, соответствующих определенным критериям | INSERT INTO цель SELECT * FROM источник WHERE условие |
Вставка с LIMIT | Копирование ограниченного количества строк | INSERT INTO цель SELECT * FROM источник LIMIT 10 |
Вставка всех столбцов | Копирование всех столбцов без указания | INSERT INTO цель SELECT * FROM источник |
Использование клиентской программы | Выполнение Insert Into Select из внешнего MySQL | См. пример на Python выше |
Счастливого запроса и пусть ваши базы данных всегда будут организованы и эффективны!
Credits: Image by storyset