Kompatibilität von Spaltenanzahl und Datentypen
Die Regeln für kombinierbare Ergebnismengen und häufige Fehler durch inkompatible Typen
Kompatibilität von Spaltenanzahl und Datentypen ist eine kostenlose Coding Interview Prep-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Coding Interview Prep-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.
Die Kompatibilitätsregeln, nach denen Interviewer fragen
Jede Mengenoperation (UNION, INTERSECT, EXCEPT) erfordert, dass die beiden Ergebnismengen union-kompatibel sind. Interviewer fragen danach, um zu sehen, ob Sie die weniger offensichtlichen Arten kennen, auf die diese Abfragen fehlschlagen können.
Zwei Regeln bestimmen die Kompatibilität: eine übereinstimmende Spaltenanzahl und kompatible Datentypen an jeder Position. Wenn eine der beiden Regeln verletzt wird, erhalten Sie entweder einen Fehler oder ein überraschendes Ergebnis.
Regel 1: Gleiche Anzahl von Spalten
Beide Abfragen müssen die gleiche Anzahl von Spalten liefern. Gibt die erste Abfrage drei Spalten und die zweite zwei zurück, weist die Datenbank die Anweisung zurück.
Das ist der häufigste Fehler bei Mengenoperationen in Vorstellungsgesprächen, insbesondere wenn jemand einen Zweig bearbeitet und den anderen vergisst.
SELECT id, name, city FROM a
UNION
SELECT id, name FROM b;
-- ERROR: each UNION query must have the same number of columnsRegel 2: Nach Position kompatible Datentypen
Spalten werden nach Position, nicht nach Namen zugeordnet. Die erste Spalte der ersten Abfrage wird mit der ersten Spalte der zweiten Abfrage gepaart und so weiter. Jedes Paar muss kompatible Datentypen besitzen.
Kompatibel bedeutet meist implizit konvertierbar: INT und BIGINT sind unproblematisch, INT und DATE dagegen im Allgemeinen nicht.
SELECT id, signup_date FROM a
UNION
SELECT id, signup_date FROM b;
-- positions: (int,date) vs (int,date) -> OKDie Position, nicht der Name, ist entscheidend
Eine subtile Falle: Die Spalten können unterschiedliche Namen haben und trotzdem zusammengeführt werden, solange ihre Positionen und Datentypen übereinstimmen. Umgekehrt führen übereinstimmende Namen in der falschen Reihenfolge zu einer falschen Zuordnung der Daten.
Lesen Sie Mengenoperationen immer spaltenweise nach Position. Interviewer vertauschen Spalten, um genau das zu prüfen.
SELECT name, id FROM a
UNION ALL
SELECT id, name FROM b;
-- name<->id swapped: types may clash or data lands in wrong columnDie Ausgabespaltennamen
Die Ergebnismenge übernimmt ihre Spaltennamen aus der ersten Abfrage. Die Bezeichnungen der zweiten Abfrage werden verworfen. Um die Überschriften festzulegen, vergeben Sie im ersten Zweig Aliase für die Spalten.
Deshalb muss ein nachfolgendes ORDER BY auf die Namen der ersten Abfrage oder auf Ordinalpositionen verweisen.
SELECT id AS user_id, city AS location FROM a
UNION ALL
SELECT id, town FROM b;
-- output headers: user_id, locationImplizite Typkonvertierung
Wenn zwei positionsweise gepaarte Spalten unterschiedliche, aber kompatible Datentypen haben, wählt die Engine einen Ergebnistyp, der breit genug ist, um beide aufzunehmen. Eine Kombination aus INT und DECIMAL ergibt normalerweise DECIMAL.
Wenn Sie in einem Vorstellungsgespräch diese Konvertierung erwähnen, zeigen Sie fachliche Tiefe: Sie wissen, dass die Spalte keinen Fehler verursacht, sondern zum umfassenderen Typ hochgestuft wird.
SELECT amount FROM int_table -- INT
UNION ALL
SELECT amount FROM dec_table; -- DECIMAL
-- result column is DECIMALFehlende Spalten mit NULL auffüllen
Wenn sich zwei Abfragen in ihrer Struktur naturgemäß unterscheiden, gleichen Sie sie an, indem Sie Platzhalterspalten hinzufügen. Eine gängige Technik besteht darin, NULL auszuwählen (oft in einen bestimmten Datentyp umgewandelt), um einen Spaltenplatz zu füllen, den der andere Zweig besitzt.
Durch die Umwandlung von NULL verhindern Sie, dass die Engine einen Datentyp erraten muss, und stellen die Kompatibilität der Spalten sicher.
SELECT id, phone, CAST(NULL AS VARCHAR) AS email FROM a
UNION ALL
SELECT id, CAST(NULL AS VARCHAR), email FROM b;Ein konkreter Fehler durch nicht übereinstimmende Datentypen
Hier ist die zweite Spalte in einem Zweig ein Datum und im anderen eine Zeichenkette. Strenge Engines weisen dies zurück; tolerantere können die Werte unvorhersehbar konvertieren. Die sichere Lösung ist ein explizites CAST, damit beide Seiten denselben Datentyp verwenden.
Schlagen Sie in Vorstellungsgesprächen die Umwandlung mit CAST vor, anstatt sich auf eine implizite Konvertierung zu verlassen.
SELECT id, CAST(event_date AS VARCHAR) FROM a
UNION ALL
SELECT id, label FROM b;
-- both second columns now VARCHAR -> compatibleDiese Regeln gelten für alle Mengenoperatoren
Die Regeln für Spaltenanzahl und Datentypkompatibilität sind für UNION, UNION ALL, INTERSECT und EXCEPT identisch. Alle führen Ergebnismengen vertikal zusammen und erfordern union-kompatible Eingaben.
Eine einzige gedankliche Checkliste deckt daher jede Mengenoperation ab: Spalten zählen, Datentypen nach Position prüfen und die Namen über die erste Abfrage festlegen.
SELECT id, city FROM a
INTERSECT
SELECT id, city FROM b;
-- same compatibility rules as UNIONDie Checkliste vor dem Start
Prüfen Sie vor dem Zusammenführen von Ergebnismengen Folgendes:
- In jedem Zweig gibt es dieselbe Anzahl von Spalten.
- Jedes positionsweise gepaarte Spaltenpaar ist typkompatibel (wandeln Sie es im Zweifel um).
- Die Spalten stehen in derselben logischen Reihenfolge.
- Im ersten Zweig sind Aliase für saubere Ausgabespaltennamen gesetzt.
Wenn Sie diese Checkliste in einem Vorstellungsgespräch laut durchgehen, vermeiden Sie schwer erkennbare Fehler durch falsche Zuordnungen.
Alles zusammenführen
Fehler bei der Kompatibilität lassen sich meist vermeiden. Bei unterschiedlicher Spaltenanzahl sind die Fehler offensichtlich, während vertauschte oder unerwartet konvertierte Spalten unbemerkt bleiben können. Wenn Sie Abfragen spaltenweise nach Position lesen und Umwandlungen bewusst einsetzen, bleiben Mengenoperationen korrekt.
Eine überzeugende Antwort nennt beide Regeln, erwähnt die Zuordnung nach Position und weist darauf hin, dass die Ausgabespaltennamen aus der ersten Abfrage stammen.
Schnelltest
Wie entscheidet SQL, welche Spalten zweier UNION-Zweige einander entsprechen?
Zusammenfassung
Wichtigste Punkte:
- Alle Mengenoperatoren erfordern in jedem Zweig die gleiche Spaltenanzahl.
- Spalten werden nach Position zugeordnet, und jedes Paar muss typkompatibel sein.
- Kompatible Datentypen können in einen breiteren gemeinsamen Datentyp konvertiert werden.
- Verwenden Sie
CAST(NULL AS type), um unterschiedlich aufgebaute Ergebnismengen aufzufüllen. - Die Ausgabespaltennamen stammen aus der ersten Abfrage.
Häufig gestellte Fragen
Ist die Lektion „Kompatibilität von Spaltenanzahl und Datentypen“ kostenlos?
Ja — der vollständige Text von „Kompatibilität von Spaltenanzahl und Datentypen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Coding Interview Prep-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Kompatibilität von Spaltenanzahl und Datentypen“?
Die Regeln für kombinierbare Ergebnismengen und häufige Fehler durch inkompatible Typen Du übst Coding Interview Prep mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Coding Interview Prep zu starten?
Keine Vorkenntnisse erforderlich. Coding Interview Prep auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Kompatibilität von Spaltenanzahl und Datentypen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Coding Interview Prep-Lektion Code schreiben und ausführen?
Ja. Jede Coding Interview Prep-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- UNION oder UNION ALL
- Kompatibilität von Spaltenanzahl und Datentypen
- INTERSECT und EXCEPT zum Vergleichen
- Mengenvorgänge mit JOINs nachbilden