MySQL - Insert Into Select: Ein umfassender Leitfaden für Anfänger

Hallo da draußen, zukünftige Datenbank-Zauberer! Heute machen wir uns auf eine aufregende Reise in die Welt von MySQL, speziell konzentriert auf die mächtige "Insert Into Select"-Anweisung. Keine Sorge, wenn du neu im Programmieren bist – ich werde dein freundlicher Führer sein und alles Schritt für Schritt erklären. Also hole dir eine Tasse Kaffee und tauchen wir ein!

MySQL - Insert Into Select

Die MySQL Insert Into Select Anweisung

Stell dir vor, du organisierst dein Bücherregal. Du hast eine pile von neuen Büchern (das nennen wir unsere Quelldaten) und möchtest sie in dein bereits organisiertes Regal (unser Zieltable) einfügen. Genau das macht die "Insert Into Select"-Anweisung in MySQL – sie ermöglicht es uns, Daten von einer Tabelle zu kopieren und in eine andere einzufügen.

Die grundlegende Syntax sieht so aus:

INSERT INTO ziel_tabelle (spalte1, spalte2, spalte3, ...)
SELECT spalte1, spalte2, spalte3, ...
FROM quelle_tabelle
WHERE bedingung;

Lassen wir das auseinanderbrechen:

  • INSERT INTO ziel_tabelle: Dort platzieren wir unsere neuen Daten.
  • (spalte1, spalte2, ...): Diese sind die Spalten in unserer Zieltable, die wir füllen.
  • SELECT ...: Dort holen wir unsere Daten her.
  • FROM quelle_tabelle: Das ist die Tabelle, die wir kopieren.
  • WHERE bedingung: Das ist optional, aber es ermöglicht uns, zu filtern, was wir kopieren.

Einfügen erforderlicher Daten von einer Tabelle in eine andere Tabelle

Nun, lassen wir uns mit ein wenig richtigen Code beschäftigen! Angenommen, wir haben zwei Tabellen: alte_bücher und neue_zugänge. Wir möchten alle Fantasy-Bücher von alte_bücher nach neue_zugänge verschieben.

INSERT INTO neue_zugänge (titel, autor, genre)
SELECT titel, autor, genre
FROM alte_bücher
WHERE genre = 'Fantasy';

In diesem Beispiel:

  • Fügen wir in neue_zugänge ein, indem wir die Spalten angeben, die wir füllen möchten.
  • Selektieren wir die gleichen Spalten aus alte_bücher.
  • Wir selektieren nur Bücher, deren Genre 'Fantasy' ist.

Dieser Query wird alle Fantasy-Bücher von alte_bücher nach neue_zugänge kopieren. Es ist, als ob du alle deine Fantasy-Bücher zauberhaft auf ein neues Regal teleportierst!

Einfügen von Zeilen mit LIMIT

Manchmal möchten wir nicht alles auf einmal verschieben. Vielleicht testen wir Dinge aus, oder wir haben nur Platz für einige Bücher. Da kommt LIMIT sehr gelegen.

INSERT INTO bestseller (titel, autor, verkäufe)
SELECT titel, autor, verkäufe
FROM alle_bücher
WHERE verkäufe > 1000000
ORDER BY verkäufe DESC
LIMIT 10;

Dieser Query:

  • Fügt in unsere bestseller-Tabelle ein.
  • Selektiert von alle_bücher, wo die Verkäufe über einer Million liegen.
  • Sortiert sie nach Verkäufen in absteigender Reihenfolge.
  • Nimmt nur die Top 10.

Es ist, als ob du nur die Sahne des Erntes – nur die Top 10 Bestseller – auf dein spezielles Regal picks.

Einfügen aller Spalten von einer Tabelle in eine andere Tabelle

Manchmal möchten wir alles kopieren – jeden einzelnen Detail. Das können wir auch! Nehmen wir an, wir archivieren unsere gesamten Verkaufsdaten von 2022:

INSERT INTO verkaufs_archive_2022
SELECT *
FROM aktuelle_verkäufe
WHERE YEAR(verkaufsdatum) = 2022;

Hier ist, was passiert:

  • Wir geben keine Spalten in der INSERT INTO-Teil an.
  • Wir verwenden SELECT *, um alle Spalten zu selektieren.
  • Wir filtern, um nur Verkäufe aus dem Jahr 2022 einzuschließen.

Das ist, als ob du ein Abbild deines gesamten 2022er Bücherregals nimmst und es exakt an einem neuen Ort recreatest.

INSERT INTO SELECT mit einem.Client-Programm

Nun, lassen uns darüber sprechen, wie wir das außerhalb von MySQL, mit einem Client-Programm, machen können. Ich zeige dir ein Beispiel mit Python, das eine beliebte Sprache für Datenbankoperationen ist.

import mysql.connector

# Verbinde zur Datenbank
mydb = mysql.connector.connect(
host="localhost",
user="deinbenutzername",
password="deinpasswort",
database="deinedatenbank"
)

mycursor = mydb.cursor()

# Unser INSERT INTO SELECT Query
sql = """
INSERT INTO neue_zugänge (titel, autor, genre)
SELECT titel, autor, genre
FROM alte_bücher
WHERE genre = 'Fantasy'
"""

# Führe den Query aus
mycursor.execute(sql)

# Bestätige die Änderungen
mydb.commit()

print(mycursor.rowcount, "Datensätze eingefügt.")

Dieses Skript:

  1. Verbindet sich mit deiner MySQL-Datenbank.
  2. Erstellt ein Cursor-Objekt, um mit der Datenbank zu interagieren.
  3. Definiert unser INSERT INTO SELECT Query.
  4. Führt den Query aus.
  5. Bestätigt die Änderungen (sehr wichtig!).
  6. Gibt die Anzahl der eingefügten Datensätze aus.

Es ist, als hättest du einen Roboter-Assistenten, der deine Bücherregale für dich umorganisieren kann!

Schlussfolgerung

Und das war's, Leute! Wir haben die Reise durch das Land von "Insert Into Select" in MySQL unternommen. Von grundlegenden Konzepten bis hin zu praktischen Anwendungen haben wir alles abgedeckt. Denke daran, Übung macht den Meister, also habe keine Angst, diese Queries auszuprobieren.

Hier ist eine schnelle Referenztabelle der Methoden, die wir besprochen haben:

Methode Beschreibung Beispiel
Basic Insert Into Select Kopiert Daten von einer Tabelle in eine andere INSERT INTO ziel SELECT * FROM quelle
Einfügen spezifischer Spalten Kopiert nur bestimmte Spalten INSERT INTO ziel (spalte1, spalte2) SELECT spalte1, spalte2 FROM quelle
Einfügen mit Bedingung Kopiert Daten, die bestimmten Kriterien entsprechen INSERT INTO ziel SELECT * FROM quelle WHERE bedingung
Einfügen mit LIMIT Kopiert eine begrenzte Anzahl von Zeilen INSERT INTO ziel SELECT * FROM quelle LIMIT 10
Einfügen aller Spalten Kopiert alle Spalten ohne Angabe INSERT INTO ziel SELECT * FROM quelle
Verwendung eines Client-Programms Führt Insert Into Select außerhalb von MySQL aus Siehe Python-Beispiel oben

Frohes Abfragen und möge deine Datenbanken stets organisiert und effizient sein!

Credits: Image by storyset