In MySQL können verschiedene Arten von Konstanten verwendet werden:
-- Zahlen
SELECT 42; -- Integer
SELECT 3.14; -- Dezimalzahl
SELECT -17; -- Negative Zahl
-- Zeichenketten
SELECT 'Hallo Welt'; -- String in Anführungszeichen
SELECT "Auch möglich"; -- Alternative Schreibweise
-- Datum und Zeit
SELECT DATE '2024-01-15'; -- Datum
SELECT TIME '14:30:00'; -- ZeitMySQL bietet umfangreiche mathematische Funktionen:
-- Grundrechenarten
SELECT 10 + 5; -- Addition
SELECT 10 - 5; -- Subtraktion
SELECT 10 * 5; -- Multiplikation
SELECT 10 / 5; -- Division
SELECT 10 % 3; -- Modulo (Rest)
-- Mit Spalten rechnen
SELECT
produktname,
preis,
menge,
preis * menge as gesamtpreis
FROM bestellungen;
-- Mathematische Funktionen
SELECT ROUND(3.14159, 2); -- Runden auf 2 Stellen
SELECT CEIL(3.14); -- Aufrunden
SELECT FLOOR(3.14); -- Abrunden
SELECT ABS(-17); -- Betrag
SELECT POWER(2, 3); -- PotenzDie RAND()-Funktion erzeugt Zufallszahlen:
-- Zufallszahl zwischen 0 und 1
SELECT RAND();
-- Zufallszahl in bestimmtem Bereich
SELECT FLOOR(RAND() * 100); -- 0 bis 99
SELECT 1 + FLOOR(RAND() * 6); -- Würfel (1-6)
-- Zufällige Datensätze
SELECT * FROM produkte
ORDER BY RAND()
LIMIT 5;MySQL-Variablen können Berechnungsergebnisse speichern:
-- Benutzervariable setzen
SET @preis = 99.99;
-- Wert aus Abfrage
SET @max_preis = (
SELECT MAX(preis)
FROM produkte
);
-- Mehrere Variablen
SET @min_preis = 10, @max_preis = 100;
-- Variablen in Abfragen verwenden
SELECT * FROM produkte
WHERE preis BETWEEN @min_preis AND @max_preis;Die Auswahl bestimmter Spalten und Zeilen ist grundlegend für Abfragen:
-- Bestimmte Spalten
SELECT vorname, nachname, email
FROM mitarbeiter;
-- Alle Spalten
SELECT * FROM mitarbeiter;
-- Mit Bedingung
SELECT vorname, nachname
FROM mitarbeiter
WHERE abteilung = 'Vertrieb';
-- Mit Alias
SELECT
vorname as vorname_mitarbeiter,
nachname as nachname_mitarbeiter
FROM mitarbeiter;
-- Mit Berechnung
SELECT
produktname,
preis,
menge,
preis * menge as gesamtpreis
FROM bestellungen;Die Sortierung von Ergebnissen erfolgt mit ORDER BY:
-- Aufsteigende Sortierung
SELECT * FROM produkte
ORDER BY preis ASC;
-- Absteigende Sortierung
SELECT * FROM produkte
ORDER BY preis DESC;
-- Mehrere Sortierkriterien
SELECT * FROM mitarbeiter
ORDER BY nachname ASC, vorname ASC;
-- Mit Berechnung
SELECT
produktname,
preis * menge as gesamtpreis
FROM bestellungen
ORDER BY gesamtpreis DESC;Bei der Sortierung von Texten spielen Zeichensatz und Collation eine wichtige Rolle:
-- Standard-Sortierung
SELECT * FROM mitarbeiter
ORDER BY nachname;
-- Mit bestimmter Collation
SELECT * FROM mitarbeiter
ORDER BY nachname COLLATE utf8mb4_german2_ci;
-- Akzente ignorieren
SELECT * FROM mitarbeiter
ORDER BY nachname COLLATE utf8mb4_unicode_ci;Standardmäßig wird nicht zwischen Groß- und Kleinschreibung unterschieden:
-- Case-insensitive (Standard)
SELECT * FROM produkte
ORDER BY name;
-- Case-sensitive
SELECT * FROM produkte
ORDER BY BINARY name;Datums- und Zeitwerte werden chronologisch sortiert:
-- Datum sortieren
SELECT * FROM bestellungen
ORDER BY bestelldatum;
-- Komplexere Datumssortierung
SELECT *,
YEAR(bestelldatum) as jahr,
MONTH(bestelldatum) as monat
FROM bestellungen
ORDER BY jahr DESC, monat DESC;
-- Mit Zeitanteil
SELECT * FROM protokoll
ORDER BY zeitstempel DESC;Indizes können die Sortierung beschleunigen:
-- Index für häufige Sortierung
CREATE INDEX idx_nachname
ON mitarbeiter(nachname, vorname);
-- Index für berechnete Sortierung
CREATE INDEX idx_gesamtpreis
ON bestellungen((preis * menge));Mit DISTINCT werden Duplikate entfernt:
-- Eindeutige Werte
SELECT DISTINCT abteilung
FROM mitarbeiter;
-- Mehrere Spalten
SELECT DISTINCT
stadt,
land
FROM kunden;-- Vor dem Import: Duplikate finden
SELECT blz, COUNT(*) as anzahl
FROM bankimport
GROUP BY blz
HAVING COUNT(*) > 1;
-- Beim Import: Duplikate vermeiden
INSERT IGNORE INTO banken
SELECT DISTINCT * FROM bankimport;DISTINCT kann die Performance beeinträchtigen:
-- Besser: WHERE statt DISTINCT
SELECT firma
FROM kunden
WHERE land = 'DE';
-- Statt
SELECT DISTINCT firma
FROM kunden;LIMIT beschränkt die Anzahl der Ergebnisse:
-- Erste 10 Datensätze
SELECT * FROM produkte
ORDER BY preis DESC
LIMIT 10;
-- Alternative Schreibweise
SELECT * FROM produkte
ORDER BY preis DESC
LIMIT 0, 10;Für Pagination wird LIMIT mit OFFSET kombiniert:
-- Seite 1 (Datensätze 1-10)
SELECT * FROM produkte LIMIT 0, 10;
-- Seite 2 (Datensätze 11-20)
SELECT * FROM produkte LIMIT 10, 10;
-- Alternativ mit OFFSET
SELECT * FROM produkte
LIMIT 10 OFFSET 10;Ergebnisse können in eine Datei exportiert werden:
-- In CSV exportieren
SELECT *
INTO OUTFILE '/pfad/export.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM mitarbeiter;Der Client kann Ergebnisse lokal speichern:
-- Mit MySQL-Client
mysql -e "SELECT * FROM mitarbeiter" > export.txt
-- Mit mysqldump
mysqldump -u user -p --no-create-info
meine_db mitarbeiter > export.sqlTipps für effiziente Abfragen:
-- Index für häufige Abfragen
CREATE INDEX idx_datum
ON bestellungen(bestelldatum);-- Besser: Nur benötigte Spalten
SELECT vorname, nachname
FROM mitarbeiter;-- Abfrage analysieren
EXPLAIN SELECT * FROM produkte
WHERE preis > 100;-- Mit LIMIT arbeiten
SELECT * FROM protokoll
ORDER BY datum DESC
LIMIT 1000;