SQL-Befehle
SQL (oder Structured Query Language) ist eine Sprache für den Umgang mit Relationalen Datenbanken,
wie bspw. MySQL. Hierbei unterscheidet man prinzipiell
zwischen
- Data Definition Language (DDL)
- Data Retrieval Language (DRL)
- Data Manipulation Language (DML)
- Data Security Language
- SQL Datentypen
- Feldverhalten
- Tabellen ändern
- Index
- SELECT auf eine Tabelle
- Aggregation
- Join
- Subselect
- UNION
- Views
- Trigger
- Materialized Views
- Stored Procedures
- User anlegen
- Rechte zuordnen
Das CREATE TABLE Statement ist Grundvoraussetzung für die Untersuchung von Datentypen. Hierbei gehen wir durch die
wichtigsten Datentypen und greifen uns einige besondere heraus, um den Unterschied im Verhalten zu verstehen:
- Erzeugen von Datenbanken und Tabellen
- Datentypen für Zeichenketten
- Datentypen für Zahlen
- Datentypen für Datum und Zeit
- CHAR vs. VARCHAR
- DECIMAL vs. DOUBLE
- DATETIME vs. TIMESTAMP
Neben den Datentypen beeinfussen noch weitere Eigenschaften das Verhalten von Tabellenspalten. Hierbei betrachten wir:
- Nullable
- Primary und Foreign Keys
- AUTO_INCREMENT
- UPDATE / DELETE Cascade
Für die nachträgliche Anpassung von Tabellen gibt es das ALTER TABLE Statement. Hierbei gilt es vor allem zu
verstehen, wie sich die Veränderung von existiereden Spalten auf die bereits eingetragenen Daten auswirkt.
- Spalten hinzufügen
- Ändern von Spalteneigenschaften
- Umbenennen von Spalten
Die Erstellung eines Index ist die erste und auch einfachste Möglichkeit, die Performance von SELECT Statements,
vor allem im Zusmmenhang mit Joins zu erhöhen. Ich erkläre, wie Indizes erstellt werden und warum die Performance
sich so massiv verbessert.
- Erklärung, warum der JOIN ein Performanceproblem hat
- Erzeugung von Indizes
- Einzelne vs. kombinierte Indizes
Der am häufigsten genutzte Befehl bei Datenbanken ist das SELECT Statement, um Daten aus der Datenbank auszulesen.
Im ersten Video zum Thema SELECT behandlet lediglich die grundlegenden Elemente des Statements:
- Grundaufbau des SELECT Statements
- Selektion mittels WHERE
- Verknüpfung mittels AND und OR
- Optionen von LIKE
- Funktion von DISTINCT
- Sortieren der Ausgabe
- Limitieren der Ausgabe
- Umstellung auf Case Sensitive
- SELECT Ergebnisse in File umleiten
- SLECT Ergebnisse in Tabelle eintragen
Neben dem Selektieren von einzelnen Datensätzen können Ergebnisse noch zusammenaggergiert werden - bspw. Zählen oder Summieren.
In diesem Zusammenhang sehen wir uns auch die Optionen der Gruppierung an:
- Zählen mittels COUNT
- Summieren mittels SUM
- Weitere Aggregatsfunktionen wie AVG, MIN, MAX
- Sinnvolle Spaltenauswahl bei Aggregation (vor allem bei MIN/MAX)
- GROUP BY
- HAVING vs. WHERE
Erst die Möglichkeit, Daten mittels JOIN zu verknüpfen, gibt uns die Möglichkeit mit relationelen Datenbanken sinnvoll
zu arbeiten. Hierbei gehen wir auch über die OUTER JOIN Optionen ein und wie man sie sinnvoll nutzt:
- INNER und OUTER JOIN
- JOIN über mehrere Tabellen
- Crossjoin
Mit Hilfe von Unterabfragen können wir sehr tief in die Analyse von Daten eintauchen. Beim Verständnis für dieses
Thema ist es wichtig, das Grundverhalten von SELECT Statements bezüglich ihrer Ergebnisstruktur zu verstehen.
Basierend darauf bauen wir die drei Grundtypen von Unterabfragen auf. Zusätzlich sehen wir uns noch die Option an,
das Subselect in die Spaltenauswahl einzusetzen:
- SUBSELECT mit einem Wert als Ergebnis
- SUBSELECT mit einer Liste als Ergebnis
- SUBSELECT mit einer Matrix als Ergebnis
- SUBSELECT auf Zeilenebene
- SUBSELECT als Basis für ein UPDATE
UNION ist die Möglichkeit, Daten von verschiedenen Tabellen untereinander zu schreiben. Darüberhinaus ist
der UNION eine oft genutzte Möglichkeit für den Angriff mittels SQL Injection. Auch hierauf gehen wir ein:
- Grundverhalten von UNION
- Nutzung von UNION für einen FULL OUTER JOIN in MySQL
- SQL Injection mittels UNION
Views sind eine Möglichkeit, SELECT Statements zu speichern. Dadurch wird die View zu einem elementaren
Archtiekturelement zur Entkoppelung von Applikation und Datenhaltung.
- Syntax der Viewerstellung
- Anzeigen von Viewdefinitionen
- Löschen von Views
- Viewschicht als Architekturebene
Für die automatisierte Ausführung von SQL Code bei INSERT, UPDATE oder DELETE bieten sich Trigger an.
Wir klären, welches Statement welchen Trigger auslöst und wie man sie erstellt. Weiterhin klären wir, wann ein
Trigger überhaupt sinnvoll einsetzbar ist.
- Syntax zur Erstellung von Triggern
- Löschen von Triggern
- Auslösende Events von Triggern
- NEW und OLD Daten
- BEVORE vs. AFTER
- Austausch DELIMITER
Bei massiven Performanceproblemen von Views ist es möglich, die Viewergebnisse in einer eigenen Tabelle zu cachen.
Kostenpflichtige RDBMS bieten oftmals solche Konstrukte "out of the box" an, wohingegen man dies bei MySQL selbst erstellen muss.
In diesem Video klären wir, wie man solch eine Funktionalität umsetzen kann.
- Erstellung der Cache-Tabelle
- Definition der Trigger
- Erzeugung der initialen Befüllung der Tabelle
Imperative Programme sind in MySQL über Stored Procedures/Functions möglich. Wir klären die Erstellung anhand von
mehreren Usecases - Quersummenberechnung, JSON Erstellung und Performanceoptimierung von Views:
- Erzeugung von Stored Procedures und Functions
- Unterschiedliche Parametertypen
- Unterschiedliche Variablentypen
- Kontrollstrukturen
- CURSOR
Das Anlegen von Usern - vor allem in MySQL - geht einher mit der Frage, von wo sich der User mit dem System verbindet.
Neben dem Syntax des Anlegens klären wir eben diese Angabe des Servers des Users:
- Syntax zum Anlegen eines Users
- Verbindung vom gleichen Server
- Verbindung von bekannter IP Adresse
- Verbindung von beliebiger IP Adresse
- Anzeigen aller User
- Löschen von Usern