Sql
Links
Zielsetzung
Einführung in die Datenbanksprache Structured Query Language. Damit kann man Datenbanktabellen erstellen, Daten eintragen, ändern, löschen und abfragen.
Es gibt Standards für SQL, der Kurs formuliert die Beispiele im Dialekt von MariaDB (oder MySql).
Relationen (Tabellen)
Eine Relation, auch Datenbanktabelle genannt, ist ein Menge von Datensätzen (auch Zeilen genannt).
Jeder Datensatz besteht aus (für jeden Datensatz gleichen) Menge von Attributen, auch Spalten genannt.
Mit Relationen werden Entitäten (materielle und ideelle Dinge, Sachen oder Ideen) mittels Attributen beschrieben. In Relationen können beliebig viele Entitäten gespeichert werden.
Attribute werden oft auch Spalten der Tabellen genannt.
Beispiel
Eine Adresse ist eine Entität, die aus den Attributen Name, Vorname, Ort, Postleitzahl, Straße und Hausnummer besteht.
Name | Vorname | Ort | PLZ | Straße | Nr |
---|---|---|---|---|---|
Müller | Hans | Berlin | 10122 | Hauptgasse | 10 |
Maier | Ulricke | Augsburg | 80123 | Siemensalee | 3 |
Diese Relation hat 2 Datensätze (Zeilen).
Erstellen einer Relation
create table users (
id integer primary key auto_increment;
name varchar(64),
email varchar(255),
password varchar(255),
last_login timestamp
);
- Konvention: Wir vergeben immer eine "technische Id" als Identifikation. Weil alle anderen Attribute können sich evt. ändern.
- Konvention: Tabellennamen sind immer in Mehrzahl.
id integer primary key auto_increment
: Das Attribut "id" ist eine Zahl, die den Benutzer identifiziert, das wird Primärschlüssel genannt. Die Zahl wird automatisch generiert (auto_increment)name varchar(64)
: Das Attribut heißt name, der Datentyp ist eine Zeichenkette mit maximaler Länge 64.last_login timestamp
: Mit diesem Attribut wird der Zeitpunkt (Datum + Uhrzeit) des letzten Logins festgehalten.
Datentypen
- Texttypen:
- char(<length>) Zeichenkette mit fester Länge. Beispiel deutsche Postleitzahl:
plz char(5)
- text: Variable Zeichenkette bis 65535 Zeichen.
- longtext Variable Zeichenkette bis 4 GByte
- char(<length>): Zeichenkette mit variabler Länge. Beispiel
name varchar(64)
- char(<length>) Zeichenkette mit fester Länge. Beispiel deutsche Postleitzahl:
- Zahltypen:
- decimal(<length>) oder decimal(<length>, <precisision>): Dezimalzahl mit maximaler Länge von <length> und maximal <precisision> Nachkommastellen. Beispiel:
price decimal(13,2)
- float : Gleitpunktzahlen Beispiel:
article_weight float
- integer oder int: eine ganze Zahl. Beispiel:
birth_year int
- decimal(<length>) oder decimal(<length>, <precisision>): Dezimalzahl mit maximaler Länge von <length> und maximal <precisision> Nachkommastellen. Beispiel:
- Datumstypen:
- date: nur Datum. Beispiel:
birthday date
- datetime: Datum und Uhrzeit. Beispiel:
term datetime
- timestamp: Zeitpunkt mit Genauigkeit 1 Sekunde, gilt nur ab 1.1.1970. Beispiel:
created_at timestamp
- date: nur Datum. Beispiel:
- Sonstiges:
- bool: ein Wahrheitswert. Beispiel:
active bool
- bool: ein Wahrheitswert. Beispiel:
Daten einfügen
insert into users (name, email, last_login) values
('Adam', 'a@gmx.com', '2023-09-27 07:44'),
('Bob', 'b@gmx.de', '2023-09-27 07:44'),
('Charly', 'c@gmx.com', '2023-09-27 07:44'),
('Eve', 'e@gmx.net', '2023-09-28 13:44'),
('Diana', 'd@gmx.de', '2023-09-28 13:44');
- Es muss spezifiziert werden, welche Attribute (Spalten) belegt werden sollen: hier sind es 3 Spalten
- Dann folgt eine Liste von Einträgen.
- Zeichenketten werden in einfache Anführungszeichen gesetzt.
- Ein Datum/Zeitpunkt wird mit der amerikanischen Schreibweise angegeben: <year>-<month>-<day> <hour>:<minute>
Daten ändern
update users set
last_login = NOW(),
password = 'PleaseChange'
where password is null;
- Wir ändern in Tabelle users.
- die Spalte last_login wird mit dem aktuellen Datum belegt.
- das Passwort wird auf 'PleaseChange' gesetzt
- aber nur die Datensätze, in denen noch kein Passwort gesetzt ist.
Daten anzeigen
select * from users;
select id, name, email from users where id in (2, 3);
select count(*) from users;
select id, name, email from users where email like '%gmx.de';
select name || ': ' || email from users;
select min(last_login) from users;
- Es wird alles in der Tabelle users angezeigt.
- Es werden nur die Spalten id, name, und email von den Datensätzen angezeigt, bei denen id den Wert 2 oder 3 hat
- Es wird die Anzahl Datensätze von users angezeigt
- Es werden id, name, und email von den Datensätzen angezeigt, deren email gmx.de enthält. '%' ist der universelle Platzhalter (beliebiger String)
- Es können Zeichenketten mit dem Operator || zusammengesetzt werden: Eine Ausgabe wäre "Adam: a@gmx.com"
- Es wird der jüngste Eintrag der Spalte last_login angezeigt