Der SQL-Befehl SELECT INTO erstellt eine neue Tabelle durch das Kopieren von Zeilen aus einer vorhandenen Tabelle, wenn er in folgender Weise eingesetzt wird:
Diese Anweisung kopiert die Tabelle jedoch nicht ganz exakt. So werden der Primärschlüssel, Indexe oder Spalten- und Tabelleneigenschaften (die über die Standardeinstellungen hinausgehen) der ursprünglichen Tabelle nicht kopiert. Außerdem werden die Beschriftungseinstellungen ignoriert und die ursprünglichen Spaltennamen verwendet.
Wer eine SELECT INTO-Anweisung einfügt, sollte immer daran denken, dass diese Anweisung eine vorhandene Tabelle ersetzt, wenn eine Tabelle mit dem gleichen Namen (newtable) in ihrem Geltungsbereich enthalten ist. Glücklicherweise warnt SQL den Benutzer aber vorher. In manchen Fällen löscht die Engine aber die vorhandene Tabelle, bevor sie die neue Tabelle tatsächlich erstellt. Damit kann man bei Problemen nicht mehr auf die ursprüngliche Tabelle zurückgreifen, weil diese verschwunden ist. Vor der Verwendung von SELECT INTO empfiehlt es sich daher, eine Kopie der bestehenden newtable, sofern vorhanden, zu machen. Außerdem gibt SQL bei geöffneter newtable einen Fehler aus.
Es ist nicht notwendig Daten in die neue Tabelle zu kopieren. Man kann eine neue leere Tabelle erstellen, indem man eine WHERE-Klausel wie folgt hinzufügt:
SQL erstellt newtable, kopiert aber keine Daten hinein, da keiner der Einträge die FALSE-Bedingung erfüllen kann.
11. Der Unterschied zwischen WHERE und HAVING
Die Klauseln WHERE und HAVING führen ähnliche Funktionen aus, sind jedoch nicht austauschbar. WHERE schränkt die durch die SELECT-Klausel ausgegebenen Daten ein; daher wäre ein GROUP BY irrelevant. Die Engine vergleicht Daten und beseitigt Einträge, welche die WHERE-Klausel nicht erfüllen, bevor sie die Einträge gruppiert. Die HAVING-Klausel entfernt dagegen Daten, die den Gruppierungskriterien nicht entsprechen.
Wer sich nicht sicher ist, welche Klausel er benutzen soll, sollte sich in Erinnerung rufen, dass die WHERE-Klausel vor der GROUP BY-Klausel platziert ist und die Engine die WHERE-Klausel vor der Gruppierung der Einträge anwendet.
12. Zusammenfassen mit UNION
Mit dem in SQL enthaltenen UNION-Operator kann man Einträge aus verschiedenen Quellen in folgender Weise kombinieren:
Wichtig dabei ist, dass die Spaltenreihenfolge in beiden SELECT-Anweisungen übereinstimmen muss. Die Spaltennamen müssen nicht übereinstimmen, aber jede Liste muss die gleiche Anzahl an Spalten enthalten und deren Datentypen müssen kompatibel sein. Wenn die Datentypen nicht zusammenpassen, wählt die Engine mitunter den am ehesten kompatiblen Typ aus. Das kann funktionieren oder auch nicht.
Standardmäßig sortiert UNION die Einträge nach den Werten in der ersten Spalte, da UNION ein implizites DISTINCT-Prädikat zur Auslassung doppelter Einträge anwendet. Will man alle Einträge einbeziehen, auch die doppelten, sollte man UNION ALL verwenden, bei dem die implizierte Sortierung entfällt. Wenn man weiß, dass keine doppelten Einträge vorhanden sind, aber viele Einträge vorliegen, kann man mithilfe von UNION ALL die Performance verbessern, da die Engine den für die Sortierung erforderlichen Vergleich (zum Auffinden doppelter Einträge) überspringt.
Neueste Kommentare
1 Kommentar zu Top Kniffe für ein besseres Arbeiten mit SQL
Kommentar hinzufügenVielen Dank für Ihren Kommentar.
Ihr Kommentar wurde gespeichert und wartet auf Moderation.
falsche Überschrift
„Top Kniffe für ein besseres Arbeiten mit SQL“
sollte eher heißen
SQL-Grundlagen
So am Thema für mich vorbei