Sql

Aus Vokabulabor
Zur Navigation springen Zur Suche springen

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).

Tabellen

Eine Relation, auch Datenbanktabelle genannt, ist ein Menge von Zeilen, die in **gleich viel Spalten** je Zeile unterteilt ist.

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.

Beispiel

Eine Adresse ist eine Entität, die aus den Attributen Name, Vorname, Ort, Postleitzahl, Straße und Hausnummer besteht.

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)
  • 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
  • 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
  • Sonstiges:
    • bool: ein Wahrheitswert. Beispiel: active bool

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