MySQL - Insert Into Select: Полное руководство для начинающих

Здравствуйте, будущие маги баз данных! Сегодня мы отправимся в увлекательное путешествие в мир MySQL, особенно focusing на мощную команду "Insert Into Select". Не волнуйтесь, если вы новички в программировании - я буду вашим доброжелательным гидом, объясняя все шаг за шагом. Так что возьмите кружку кофе и погружайтесь с нами!

MySQL - 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.")

Этот скрипт:

  1. Подключается к вашей базе данных MySQL.
  2. Создает объект курсора для взаимодействия с базой данных.
  3. Определяет наш запрос INSERT INTO SELECT.
  4. Выполняет запрос.
  5. Подтверждает изменения (очень важно!).
  6. Печатает, сколько записей было 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