SQL Flashcards
SELECT
SELECT Spalte1, Spalte2 FROM Table;
WHERE
SELECT name FROM benutzer WHERE age > 18;
NULL/NOT NULL
SELECT name FROM benutzer WHERE email IS (NOT) NULL
INSERT INTO
INSERT INTO table(name, age) VALUES (‘Pedro’, 49);
INSERT ohne Spaltennamen
INSERT INTO benutzer VALUES (…);
DELETE
DELETE FROM Table WHERE id = 1;
update
UPDATE benutzer SET age = 50 WHERE name = ‘Pedro’;
create table
CREATE TABLE benutzer (id INT, name VARCHAR(50));
drop table
drop table benutzer;
Beschreibung: Löscht eine Tabelle und alle darin gespeicherten Daten dauerhaft
TO_CHAR
SELECT TO_CHAR(geburtsdatum, ‘DD/MM/YYYY’) FROM benutzer;
TO_CHAR aciklama
DD = Tag zweistellig
MM = Monat zweistellig
YY = Jahr zweistellig
YYYY = Jahr vierstellig
Day = Wochentag
Dy = Kurzname des Wochentags
Mon = Kurzname des Monats
Month = Monatsname vollständig
HH24 = Stunde (0 bis 23)
HH12 = Stunde (0 bis 12)
HH = Stunde (0 bis 12)
MI = Minute
SS = Sekunde
SSSSS = Sekunden seit Mitternacht
insert datumswert
insert into benutzer (geburtsdatum) values (date ‘2000-01-01’);
pflichtfelder mit not null
create table benutzer (name varchar(50) not null);
default
create table benutzer ( status varchar(10) DEFAULT ‘aktiv’);
check
create table benutzer (age int CHECK (age > 0));
check in
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
department VARCHAR(30) CHECK (department IN (‘HR’, ‘IT’, ‘Finance’, ‘Marketing’)),
status VARCHAR(10) CHECK (status IN (‘Active’, ‘Inactive’))
);
unique
CREATE TABLE benutzer (email VARCHAR(50) UNIQUE);
Beschreibung: stellt sicher, dass alle Werte in einer Spalte eindeutig sind
unique über mehrere Spalten
CREATE TABLE bestellungen (
benutzer_id INT,
produkt_id INT,
UNIQUE (benutzer_id, produkt_id));
alter table
ALTER TABLE benutzer ADD telefonnummer VARCHAR(15);
group by
SELECT abteilung COUNT (*) FROM mitarbeiter GROUP BY abteilung;
aciklama: count() her departmandaki toplam satir sayisini (calisan sayisini) sayar.
GROUP BY, abteilung sütunundaki benzersiz değerler için gruplar oluşturur.
Her departman (abteilung) bir grup olur ve COUNT() her grup için satırları (çalışanları) sayar.
coalesce
SELECT COALESCE (email, ‘kein_email@example.com’) FROM benutzer;
Beschreibung: ersetzt Nullwerte durch einen angegebenen Wert
views
syntax: CREATE VIEW Ansicht AS SELECT Spalten FROM Tabelle WHERE Bedingung;
BSP:
CREATE VIEW aktive_benutzer AS SELECT * FROM benutzer WHERE status = ‘aktiv’;
Beschreibung: Erstellt eine virtuelle Tabelle basierend auf einer Abfrage
update + join güncelleme
- aktualisieren basierend auf mehreren Tabellen
Bsp:
UPDATE employees SET salary = departments.budget * 0.1
FROM departments
WHERE employees.department_id = departments.id;
changing data v´with view
BSP:
CREATE OR REPLACE VIEW aktive_benutzer AS
SELECT id, name, status FROM benutzer WHERE status = ‘aktiv’;
UPDATE aktive_benutzer SET status = ‘inaktiv’ WHERE id = 1;
Beschreibung: Änderungen an einer View wirken sich direkt auf die zugrunde liegende Tabelle aus, solange die View basierend auf einfachen Abfragen definiert ist.
PRIMARY KEY
syntax:
CREATE TABLE Tabelle (
id INT PRIMARY KEY ,
name VARCHAR(50) NOT NULL);
Beschreibung:
-identifiziert eindeutig jede Zeile in einer Tabelle.
-Jeder Wert in der Primary-Key-Spalte muss eindeutig und nicht null sein.
FOREIGN KEY
syntax:
CREATE TABLE Tabelle (
idINT PRIMARY KEY,
andere_id INT,
FOREIGN KEY (andere_id) REFERENCES andere_tabelle(id));
Beschreibung:
- Verbindet zwei Tabellen, indem sie Beziehungen zwischen Spalten definiert.
- Sicherstellt, dass der Wert in der Fremdschlüssel-Spalte in der referenzierten Tabelle existiert.
OLD STYLE JOINS
SELECT t1.spalte, t2spalte
FROM Tabelle t1, Tabelle2 t2 WHERE t1.id = t2.id;
Beschreibung: Alte Syntax, bei der Tabellen mit WHERE-Bedingungen verknüpft werden. Modernere Alternativen sind JOIN-Anweisungen.
NEW STYLE JOINS
SELECT t1.spalte, t2.spalte FROM Tabelle1 t1
INNER JOIN Tabelle2 t2 ON t1.id = t2.id;
Bsp:
SELECT benutzer.name, bestellungen.id
FROM benutzer
INNER JOIN bestellungen
ON benutzer.id = bestellungen.kunde_id;
Beschreibung: modernere und lesbarere Form von Joins. Trennung von Verknüpfungskriterien (ON) und Filterbedingungen (WHERE).
LEFT AND RIGHT JOINS
SELECT t1.spalte, t2.spalte FROM Tabelle1 t1
LEFT JOIN Tabelle2 t2 ON t1.id = t1.id;
SELECT t1.spalte, t2.spalte FROM Tabelle1 t1
RIGHT JOIN Tabelle2 t2 ON t1.id = t2.id;
BSP: – LEFT JOIN
SELECT kunden.name, bestellungen.id
FROM kunden
LEFT JOIN bestellungen ON kunden.id = bestellungen.kunde_id;
– RIGHT JOIN
SELECT kunden.name, bestellungen.id
FROM kunden
RIGHT JOIN bestellungen ON kunden.id = bestellungen.kunde_id;
Beschreibung:
- LEFT JOIN: Alle Zeilen aus der linken Tabelle und die passenden aus der rechten. Fehlende Werte werden als NULL angezeigt.
- RIGHT JOIN: Umgekehrte Logik - alle Zeilen der rechten Tabelle werden beibehalten.
Left: erste tabelle nach FROM
Right: erste tabelle nach JOIN
JOIN WITH MORE THAN TWO TABLES
SELECT t1.Spalte, t2.Spalte, t3.Spalte FROM Tabelle t1
JOIN Tabelle2 t2 ON t1.id = t2.id
JOIN Tabelle t3 ON t2.id = t3.id;
Beschreibung: Ermöglicht das Verknüpfen mehrerer Tabellen in einer Abfrage.
ALIAS FOR TABLE NAMES
SELECT t1.Spalte, t2.Spalte FROM Tabelle t1 AS t1
JOIN Tavelle2 AS t2 ON t1.id = t2.id;
BSP:
SELECT k.name, b.id FROM kunden AS k
JOIN bestellungen AS b ON k.id = b.kunde_id;
Beschreibung: Kürzt Tabellennamen und macht Abfragen kompakter und lesbarer.
TEMPORALE DATENHALTUNG
CREATE TABLE Tabelle (
id INT,
wert INT,
gueltig_von DATE,
gueltig_bis DATE);
BSP:
INSERT INTO preise (id, wert, gueltig_von, gueltig_bis)
VALUES (1, 100, ‘2024-01-01’, ‘2024-12-31’);
Beschreibung:
- Speichert Daten mit Zeitgültigkeit (z. B. für Preisänderungen).
- Wird oft in historischen oder zeitbasierten Abfragen verwendet.
TRANSAKTIONEN UND SPERREN
Beschreibung:
- Transaktionen stellen sicher, dass eine Gruppe von SQL-Befehlen als Einheit ausgeführt wird.
- Sperren verhindern Konflikte bei parallelen Änderungen.
TRANSAKTIONEN UND SPERREN BEISPIELE
Syntax:
BEGIN TRANSACTION;
UPDATE Tabelle SET Spalte = Wert WHERE Bedingung;
COMMIT;
– Rollback für Fehler
ROLLBACK;
BSP:
BEGIN TRANSACTION;
UPDATE konten SET saldo = saldo - 100 WHERE id = 1;
UPDATE konten SET saldo = saldo + 100 WHERE id = 2;
COMMIT;
INDEXIERUNG
CREATE INDEX index_name ON Tabelle(Spalte);
BSP: CREATE INDEX idx_name ON benutzer(name);
BESCHREIBUNG:
- Verbessert die Abfragegeschwindigkeit, indem ein schneller Zugriff auf die Daten ermöglicht wird.
- Hinweis: Indizes beschleunigen Lesevorgänge, können jedoch Schreibvorgänge verlangsamen.
DISTINCT - Vermeidung Mehrfachselektion
SELECT DISTINCT rabatt FROM artikel;
SELECT über mehrere Tabellen
- In Select angegeben Tabellen werden in WHERE mit mindestens einer Bedingung verknüpft.
SELECT a.name, b.name, a.preis FROM artikel a, artikeltyp b WHERE a.typ = b.typ
Gruppenfunktionen
AVG(x) = Mittelwert
COUNT(*) = Anzahl selektierter Zeilen
MAX(x) = Maximalwert
MIN(x) = Minimalwert
SUM(x) = Summe
Bsp.: SELECT MAX(idaeur) FROM teldat;
WHERE - KONSTANTEN-BEREICH-UNGEWISSHEIT-NULL
- Konstanten: attribut = Konstante
◦ Bsp.: DELETE FROM lieferung WHERE kdnr = 2; - Bereich: artikel.preis BETWEEN 5.00 AND 10.00
◦ Bsp.: DELETE FROM lieferung WHERE artikel.preis BETWEEN 5.00 AND 10.00; - Ungewissheit: artikel.typ LIKE ‘%H%’
◦ “%” = beliebig viele Zeichen
◦ “_” = einzelnes Zeichen
◦ Bsp.: DELETE FROM mp3music WHERE interpret LIKE ‘%DJÖtzi%’; - Null: artikel.rabatt IS NULL
◦ Bsp.: DELETE FROM studium WHERE semester = ‘SS08’ AND note IS NULL;
verknüpfung
AND, OR, NOT
WERTEVERGLEICH MIT MENGEN
1) WHERE stg = “MIB” OR stg = “MI7” OR stg = “MMB”
2) WHERE stg IN(“MIB”, “MI7”, “MMB”)
3) WHERE stg IN(SELECT name FROM studiengänge)
NOT EXISTS
In verschachtelten Anfrage kann geprüft werden, ob eine innere Anfrage Ergebnisse liefert:
BSP:
alle Artikel zu denen es keine Aufträge gibt:
SELECT * FROM artikeltyp WHERE NOT EXISTS (SELECT * FROM artikel WHERE artikel.typ = artikeltyp.typ);
Bu sorgu, artikeltyp tablosundaki, artikel tablosunda karşılığı olmayan kayıtları bulur.
ÄNDERN VON TABELLEN
ALTER TABLE objektname
ADD (spaltendefinition [, spaltendefinition])
MODIFY (spaltenname änderungen
[,spaltenname änderungen])
DROP (spaltenname [,spaltenname])
ADD CONSTRAINT [constraintname]
constraintdefinition
MODIFY CONSTRAINT [constraintname]
constraintänderung
DROP CONSTRAINT [constraintname]