Zurück zur Artikelliste Artikel
9 Leseminuten

Welchen Datentyp soll man für eine Spalte beim Erstellen einer Tabelle in SQL wählen?

In Datenbanken werden verschiedene Arten von Datenwerten gespeichert. Sie können zum Beispiel den Namen eines Produkts als Textstring, den Preis eines Produkts als Zahl oder das Verkaufsdatum eines Produkts als Datumswert speichern. Diese Werte - der Produktname, der Preis und das Verkaufsdatum - werden als unterschiedliche Datentypen gespeichert. In diesem Artikel werden verschiedene SQL-Datentypen anhand von Beispielen erläutert.

Erstellen einer Tabelle in SQL

SQL ist eine Sprache für die Bearbeitung von Daten in Datenbanken. Sie wurde in den frühen 1970er Jahren entwickelt und wird auch nach 50 Jahren noch in fast allen relationalen Datenbanken verwendet. Das Erlernen von SQL erfreut sich nach wie vor großer Beliebtheit.

SQL wird als Standard-Datensprache für die Bearbeitung und Abfrage von Daten in den gängigsten Datenbanken verwendet. Ich glaube nicht, dass ich falsch liege, wenn ich behaupte, dass wir alle mehrmals täglich auf unseren Handys oder Computern Anwendungen benutzen, die SQL-Abfragen verwenden, ohne dass wir uns dessen überhaupt bewusst sind.

SQL ist außerdem eine leicht zu erlernende Sprache, die dem Englischen sehr ähnlich ist und nur eine geringe Lernkurve aufweist. Nehmen Sie zum Beispiel die folgende SQL-Abfrage:

SELECT employee_id, employee_name FROM employees WHERE salary > 75000

Sie können sich wahrscheinlich denken, welche Daten diese Abfrage zurückgibt: die Mitarbeiter-ID und den Namen der Mitarbeiter, die mehr als 75.000 Dollar verdienen. Einfach, nicht wahr?

Bevor wir jedoch die Daten in einer Datenbank abfragen können, müssen wir die Daten in der Datenbank speichern. Datenbanken verwenden Tabellen, um Datensätze zu speichern. Eine Tabelle besteht aus einer Reihe von Feldern (auch als Spalten bezeichnet).

Um mehr über Tabellen zu erfahren, empfehle ich den Kurs Creating Tables in SQL. Es handelt sich um einen praktischen Kurs mit etwa 80 Übungen, der Ihnen alles vermittelt, was Sie brauchen, um mit der Erstellung von Tabellen in SQL-Datenbanken zu beginnen.

Eine typische Tabelle zum Speichern von Daten über Mitarbeiter kann Felder wie employee_id, employee_name und salary enthalten. Sie können jedes beliebige Feld in die Tabelle aufnehmen; je nach Bedarf können Sie auch andere Felder einfügen, z. B. die Abteilung, zu der der Mitarbeiter gehört, oder seinen Geburtstag.

Wenn Sie jedoch ein neues Feld in einer Tabelle definieren, müssen Sie unbedingt seinen Datentyp angeben. Der Hauptzweck dieses Artikels besteht darin, zu untersuchen, welchen Datentyp man für ein Feld wählen sollte, wenn man eine Tabelle in SQL erstellt.

Beginnen wir mit der Erstellung einer einfachen Tabelle namens foods für ein Unternehmen, das Lebensmittel transportiert. Sie hat nur zwei Spalten oder Felder: food_name und food_category. Da in diesen beiden Spalten Textwerte gespeichert werden, verwenden wir den Datentyp VARCHAR, der für die Speicherung von Textstrings beliebiger Länge verwendet wird. Schauen wir uns dazu die Anweisung CREATE TABLE an:

CREATE TABLE foods (
	food_name 		VARCHAR(50),
	food_category	VARCHAR(20)
);

Beide Spalten (food_name und food_category) akzeptieren Text-String-Werte. food_name akzeptiert jedoch Werte, die nicht länger als 50 Zeichen sind. Diese Beschränkung ist in VARCHAR(50) angegeben; ebenso akzeptiert food_category nicht mehr als 20 Zeichen.

Angenommen, wir wollen eine neue Version der Tabelle mit einer zusätzlichen Spalte erstellen. Wir wollen das Datum speichern, an dem das Lebensmittel gekocht oder zubereitet wurde. Nennen wir diese zusätzliche Spalte prepared_on und verwenden wir den Datentyp DATE dafür. Die Anweisung CREATE TABLE für die neue Version der Tabelle lautet:

CREATE TABLE foods (
	food_name 		VARCHAR(50),
	food_category	VARCHAR(20),
	prepared_on		DATE
);

Gültige Werte für die Spalte prepared_on sind '2022-11-03' und '2022-11-02'. Das genaue Format der Datumsangaben kann variieren; andere gültige Formate sind 'mm/dd/yyyy' und 'yyyymmdd'. Die folgende INSERT zeigt, wie man einen Datensatz in der Tabelle erstellt foods:

INSERT INTO foods
VALUES ('Chicken with mashed potatoes','Main Dish','11/08/2022');

Weitere Informationen über INSERT finden Sie in diesem Artikel.

Die folgende SQL-Anweisung SELECT zeigt, wie wir Datensätze in der Tabelle lesen und wie die Datensätze aussehen:

SELECT food_name, food_category, prepared_on FROM foods;

In der folgenden Abbildung sehen Sie, wie der SQL-Client die Spaltennamen und die Datentypen für jede Spalte anzeigt, die von der Anweisung SELECT zurückgegeben wird:

Welcher Datentyp für eine Spalte beim Erstellen einer Tabelle in SQL zu wählen ist

Weitere Informationen über die SELECT-Anweisung finden Sie hier.

Wenn Sie sich noch nie mit Datenbanken beschäftigt haben, empfehle ich Ihnen den Kurs Datentypen in SQL. In diesem Kurs lernen Sie die gängigen Datentypen in SQL Server, MySQL, Oracle und PostgreSQL kennen. Wenn Sie auf der Suche nach Informationen über die Erstellung von Tabellen hierher gekommen sind, lernen Sie in dem sehr umfassenden Kurs The Basics of Creating Tables in SQL die grundlegenden Bausteine der Erstellung von Tabellen in MySQL, SQL Server, Oracle und PostgreSQL. Abschließend möchten Sie vielleicht noch etwas über den KursSQL für Anfänger im Artikel Why Take the "SQL für Anfänger" Course lesen - der Grund, warum dieser Online-Kurs ins Leben gerufen wurde, die Philosophie, die dahinter steckt, und der Inhalt.

Numerische Datentypen

Da nun das Zubereitungsdatum für jedes Lebensmittel in der Tabelle steht, nehmen wir an, dass wir eine Spalte einfügen wollen, in der gespeichert wird, wie viele Tage ein Lebensmittel vor seinem Verfallsdatum verkauft werden kann. Dies ist eine Zahl; bisher haben wir keine numerischen Spalten in die Tabelle aufgenommen foods.

In SQL-Datenbanken gibt es mehrere Datentypen für numerische Daten. Um zu wissen, wie wir vorgehen müssen, müssen wir analysieren, um welche Art von Zahl es sich handelt.

Wenn die Werte, die Sie in der Spalte speichern möchten, Zahlen ohne Dezimalstellen sind, ist der zu verwendende Datentyp INTEGER. Beispiele für ganzzahlige Werte sind 10, 1, 1234, 302123, 0 und sogar negative Zahlen wie -10 und -90. Die Regel ist einfach: Jede Zahl ohne Dezimalstellen ist ein gültiger Wert, der als Datentyp INTEGER gespeichert werden kann. Nehmen wir die Spalte valid_days als Datentyp INTEGER auf:

CREATE TABLE foods (
	food_name 		VARCHAR(50),
	food_category	VARCHAR(20),
	prepared_on		DATE,
	valid_days		INTEGER
);

Nehmen wir an, wir möchten nun eine Spalte in die Tabelle aufnehmen, in der der Preis jedes Lebensmittels gespeichert wird. Wir erstellen eine Spalte namens price. Diese Spalte wird numerische Werte mit Dezimalstellen enthalten, weshalb wir den Datentyp NUMERIC verwenden. Dieser Datentyp akzeptiert Dezimalzahlen mit einer beliebigen Anzahl von Stellen nach dem Dezimalpunkt. Dann sieht das Erstellen der Tabelle foods sieht dann wie folgt aus:

CREATE TABLE foods (
	food_name 		VARCHAR(50),
	food_category	VARCHAR(20),
	prepared_on		DATE,
	valid_days		INTEGER,
	price			NUMERIC(6,2)
);

In der obigen Anweisung CREATE TABLE verwenden wir den Datentyp NUMERIC(6,2), um Preise mit einer maximalen Länge von 6 Ziffern zu speichern, von denen 2 hinter dem Dezimalpunkt stehen. Zum Beispiel sind 10.25, 1.3 und 1234.56 gültige Werte für NUMERIC(6,2).

Der boolesche Datentyp

Ein weiterer wichtiger Datentyp ist BOOLEAN. Dieser Datentyp wird verwendet, um in einer Tabelle einen von nur zwei möglichen Werten darzustellen oder zu speichern: TRUE oder FALSE.

Nehmen wir an, wir wollen feststellen, welche Lebensmittel als biologisch zertifiziert sind. Wir können eine Spalte mit dem Namen is_organic_certified mit dem Datentyp BOOLEAN einfügen. Wie Sie sich vorstellen können, zeigt der Wert TRUE in der Spalte is_organic_certified an, dass das Lebensmittel biologisch zertifiziert ist. Die neue Version der Anweisung CREATE TABLE lautet:

CREATE TABLE foods (
	food_name 			VARCHAR(50),
	food_category		VARCHAR(20),
	prepared_on			DATE,
	valid_days			INTEGER,
	price				NUMERIC(6,2),
	is_organic_certified	BOOLEAN
);

Jetzt haben wir eine Tabelle mit verschiedenen Spalten. Lassen Sie uns einen neuen Datensatz mit INSERT erstellen, wie wir es zuvor getan haben:

INSERT INTO foods VALUES ('Apple Pie','Dessert','11/07/2022',3,3.78, True);

Und wieder machen wir eine SELECT, um die Daten in der Tabelle zu sehen.

SELECT food_name, food_category, prepared_on,
       valid_days, price, is_organic_certified
FROM foods;
Welcher Datentyp für eine Spalte beim Erstellen einer Tabelle in SQL zu wählen ist

Bevor ich diesen Abschnitt abschließe, möchte ich noch zwei Artikel über numerische Datentypen empfehlen. Der erste ist "Understanding Numerical Data Types in SQL" über die verschiedenen numerischen Datentypen, die in SQL-Datenbanken verfügbar sind. Der zweite ist "Numeric vs. Decimal Data Types in SQL" mit einer interessanten Erklärung der Unterschiede zwischen NUMERIC und DECIMAL SQL-Datentypen.

Datentypen im Zusammenhang mit Datum und Uhrzeit

Wir haben bereits den Datentyp DATE für die Speicherung eines einzelnen Datumswertes in einer SQL-Tabelle vorgestellt. In diesem Abschnitt stellen wir zwei weitere Datentypen vor, die sich auf Datums- und Zeitwerte beziehen.

Der erste ist TIMESTAMP für die Speicherung eines Zeitpunkts mit Datum und Uhrzeit. Zum Beispiel können wir das Geburtsdatum und die Uhrzeit einer Person wie '1998-03-03 11:23:15' in einer Spalte des Datentyps TIMESTAMP speichern.

Versuchen wir dies mit unserer Tabelle foods. Nehmen wir an, wir wollen nicht nur das Zubereitungsdatum, sondern auch die Uhrzeit speichern, da die genaue Uhrzeit in manchen Fällen für das Verfallsdatum von Lebensmitteln von Bedeutung sein kann. Dann wird die Anweisung CREATE TABLE:

CREATE TABLE foods (
	food_name 			VARCHAR(50),
	food_category		VARCHAR(20),
	prepared_at			TIMESTAMP,
	valid_days			INTEGER,
	price				NUMERIC(6,2),
	is_organic_certified	BOOLEAN
);

Wenn wir einen neuen Datensatz in der Tabelle foodsgespeichert wird, muss der Wert für prepared_at ein Format wie "2022-11-03 11:30:45" haben. Allerdings müssen wir die Sekunden nicht speichern, da diese Detailgenauigkeit für das Verfallsdatum von Lebensmitteln nicht erforderlich ist. Wir können also die Sekunden weglassen und Werte verwenden, die wie "2022-11-03 11:30" aussehen. Die Spalte TIMESTAMP akzeptiert diesen Wert und speichert '2022-11-03 11:30:00' in der Datenbank.

Ein weiterer Datentyp, der mit Datum und Uhrzeit zusammenhängt, ist INTERVAL, der zur Darstellung eines Zeitraums verwendet wird. Der Wert '11:30' vom Typ INTERVAL steht beispielsweise für einen Zeitraum von 11 Stunden und 30 Minuten, und der Wert '1:20:35.145' steht für 1 Stunde, 20 Minuten, 35 Sekunden und 145 Millisekunden.

Dies sind nicht die einzigen gültigen Formate für INTERVAL Werte. Es gibt viele verschiedene Formate für die Angabe eines Wertes vom Typ INTERVAL, je nachdem, welche Zeiteinheiten (Tage, Stunden, Minuten oder Sekunden) wir einbeziehen möchten.

Wenden wir diesen Datentyp auf unsere Tabelle an foods. Angenommen, wir haben für jedes Lebensmittel eine Verfallszeit: 8 Stunden für einen Salat, 24 Stunden für Kartoffelpüree, usw. Um diese Informationen zu speichern, fügen wir die Spalte expiration_period des Datentyps INTERVAL ein. Die geänderte Anweisung CREATE TABLE sieht wie folgt aus:

CREATE TABLE foods (
	food_name 			VARCHAR(50),
	food_category		VARCHAR(20),
	prepared_at			TIMESTAMP,
	valid_days			INTEGER,
	price				NUMERIC(6,2),
	is_organic_certified	BOOLEAN,
	expiration_period		INTERVAL
);

Ich empfehle den Artikel "Wozu dient SQL?", in dem erörtert wird, warum Datenkenntnisse wie SQL so wichtig sind. Es gibt auch einen interessanten Artikel mit dem Titel "Ein Überblick über die MySQL-Datentypen", der die wichtigsten in MySQL verfügbaren Datentypen erklärt.

Lernen Sie SQL-Datentypen und erstellen Sie Ihre eigenen Tabellen

In diesem Artikel haben wir die wichtigsten SQL-Datentypen behandelt. Wir begannen mit Textdatentypen, besprachen dann numerische Datentypen und schlossen mit spezifischeren Datentypen wie BOOLEAN, INTERVAL und TIMESTAMP.

Ich möchte Ihnen noch ein paar weitere Artikel empfehlen. Der erste ist "Was ist SQL?", in dem Sie Antworten auf allgemeine Fragen wie "Was ist SQL?" oder "Warum sollte ich es lernen?" finden. Der zweite ist "SQL-Syntax" für diejenigen, die mit dem Lernen von SQL beginnen. In der Informatik ist die Sprachsyntax einer der Hauptgründe für eine frustrierende Lernerfahrung, daher ist ein guter Start mit der SQL-Syntax wichtig.

Es gibt weitere wichtige Themen im Zusammenhang mit Datentypen, die wir im Rahmen dieses Artikels nicht behandelt haben. So gibt es beispielsweise eine Technik namens Casting, bei der es darum geht, den Datentyp eines bestimmten Datensatzes in einen anderen gültigen Datentyp zu ändern.

SQL ist eine leicht zu erlernende Sprache. Es gibt jedoch viele Konzepte und Techniken - wie das Casting -, die Sie beherrschen müssen, um die Möglichkeiten der Sprache voll ausschöpfen zu können. Lernen Sie weiter SQL, üben Sie SQL, investieren Sie in Ihre Fähigkeiten und investieren Sie in sich selbst!