MySQL - Insert Into Select: Una Guida Completa per i Principianti

Ciao a tutti, futuri maghi dei database! Oggi ci imbarchiamo in un viaggio emozionante nel mondo di MySQL, concentrandoci in particolare sulla potente istruzione "Insert Into Select". Non preoccupatevi se siete nuovi al programming - sarò il vostro guida amichevole, spiegando tutto passo per passo. Allora, prendetevi una tazza di caffè e tuffiamoci dentro!

MySQL - Insert Into Select

L'Istruzione MySQL Insert Into Select

Immaginate di organizzare la vostra libreria. Avete una pila di libri nuovi (chiamiamoli i nostri dati di origine) e volete aggiungerli alla vostra libreria già organizzata (la nostra tabella di destinazione). Questo è esattamente ciò che fa l'istruzione "Insert Into Select" in MySQL - ci permette di copiare dati da una tabella e inserirli in un'altra.

La sintassi di base è questa:

INSERT INTO tabella_di_destinazione (colonna1, colonna2, colonna3, ...)
SELECT colonna1, colonna2, colonna3, ...
FROM tabella_di_origine
WHERE condizione;

Analizziamo questo:

  • INSERT INTO tabella_di_destinazione: Qui stiamo mettendo i nostri nuovi dati.
  • (colonna1, colonna2, ...): Queste sono le colonne della nostra tabella di destinazione che stiamo riempiendo.
  • SELECT ...: Qui stiamo prendendo i nostri dati.
  • FROM tabella_di_origine: Questa è la tabella da cui stiamo copiando.
  • WHERE condizione: Questo è opzionale, ma ci permette di filtrare ciò che stiamo copiando.

Inserire Dati da una Tabella a un'altra Tabella

Ora, mettiamo le mani sporche con del codice reale! Supponiamo di avere due tabelle: old_books e new_arrivals. Vogliamo spostare tutti i libri fantasy da old_books a new_arrivals.

INSERT INTO new_arrivals (titolo, autore, genere)
SELECT titolo, autore, genere
FROM old_books
WHERE genere = 'Fantasy';

In questo esempio:

  • Stiamo inserendo in new_arrivals, specificando le colonne che vogliamo riempire.
  • Stiamo selezionando le stesse colonne da old_books.
  • Stiamo selezionando solo i libri dove il genere è 'Fantasy'.

Questa query copierà tutti i libri fantasy da old_books a new_arrivals. È come magicamente teletrasportare tutti i vostri libri fantasy su una nuova scaffale!

Inserire le Righe con LIMIT

A volte, non vogliamo spostare tutto in una volta. Forse stiamo testando le cose, o abbiamo solo spazio per pochi libri. È qui che entra in gioco LIMIT.

INSERT INTO bestseller (titolo, autore, vendite)
SELECT titolo, autore, vendite
FROM tutti_i_libri
WHERE vendite > 1000000
ORDER BY vendite DESC
LIMIT 10;

Questa query:

  • Inserisce nella nostra tabella bestseller.
  • Seleziona da tutti_i_libri dove le vendite sono oltre un milione.
  • Le ordina per vendite in ordine decrescente.
  • Prende solo i primi 10.

È come scegliere il meglio del meglio - solo i primi 10 bestseller arrivano sulla nostra scaffale speciale!

Inserire Tutte le Colonno da una Tabella a un'altra Tabella

A volte, vogliamo copiare tutto - ogni singolo dettaglio. Possiamo farlo anche noi! Supponiamo di voler archiviare l'intero nostro dati di vendita del 2022:

INSERT INTO sales_archive_2022
SELECT *
FROM current_sales
WHERE YEAR(data_vendita) = 2022;

Ecco cosa sta succedendo:

  • Non stiamo specificando colonne nell'INSERT INTO.
  • Stiamo usando SELECT * per selezionare tutte le colonne.
  • Filtriamo per includere solo le vendite del 2022.

È come fare una foto della vostra intera scaffale del 2022 e ricrearla esattamente in una nuova posizione.

INSERT INTO SELECT Utilizzando un Programma Client

Ora, parliamo di come possiamo fare questo fuori da MySQL, utilizzando un programma client. Vi mostrerò un esempio utilizzando Python, che è un linguaggio popolare per le operazioni sui database.

import mysql.connector

# Connettiti al database
mydb = mysql.connector.connect(
host="localhost",
user="il_tuo_username",
password="la_tua_password",
database="il_tuo_database"
)

mycursor = mydb.cursor()

# La nostra query INSERT INTO SELECT
sql = """
INSERT INTO new_arrivals (titolo, autore, genere)
SELECT titolo, autore, genere
FROM old_books
WHERE genere = 'Fantasy'
"""

# Eseguire la query
mycursor.execute(sql)

# Commit dei cambiamenti
mydb.commit()

print(mycursor.rowcount, "record inseriti.")

Questo script:

  1. Si connette al tuo database MySQL.
  2. Crea un oggetto cursor per interagire con il database.
  3. Definisce la nostra query INSERT INTO SELECT.
  4. Esegue la query.
  5. Commit dei cambiamenti (molto importante!).
  6. Stampa il numero di record inseriti.

È come avere un assistente robot che può riorganizzare le vostre scaffale per voi!

Conclusione

Eccoci arrivati, gente! Abbiamo viaggiato attraverso il regno dell' "Insert Into Select" in MySQL. Dalle concetti di base alle applicazioni pratiche, abbiamo coperto tutto. Ricordate, la pratica rende perfetti, quindi non abbiate paura di sperimentare con queste query.

Ecco una tabella di riepilogo dei metodi che abbiamo discusso:

Metodo Descrizione Esempio
Basic Insert Into Select Copia dati da una tabella a un'altra INSERT INTO destinazione SELECT * FROM origine
Inserire Colonne Specifiche Copia solo alcune colonne INSERT INTO destinazione (col1, col2) SELECT col1, col2 FROM origine
Inserire con Condizione Copia dati che soddisfano determinati criteri INSERT INTO destinazione SELECT * FROM origine WHERE condizione
Inserire con LIMIT Copia un numero limitato di righe INSERT INTO destinazione SELECT * FROM origine LIMIT 10
Inserire Tutte le Colonne Copia tutte le colonne senza specificarle INSERT INTO destinazione SELECT * FROM origine
Utilizzare un Programma Client Eseguire Insert Into Select fuori da MySQL Vedi esempio Python sopra

Buon querying, e possa i vostri database sempre essere organizzati ed efficienti!

Credits: Image by storyset