Kuonen SQL

Beispielkatalog

Jedes Beispiel ist zugleich ein Test: der Katalog läuft im Testlauf gegen einen echten Server und muss sein hinterlegtes Ergebnis liefern — was hier steht, ist genau das, was ausgeführt wird.

Tabellen

Eine Tabelle anlegen

CREATE TABLE legt eine dauerhafte Tabelle an; INSERT füllt eine Zeile, SELECT liest sie zurück.

CREATE TABLE Pruefstand_Tabellen (Id int PRIMARY KEY, Name nvarchar(50));
INSERT INTO Pruefstand_Tabellen VALUES (1, 'Erste Zeile');
SELECT Id, Name FROM Pruefstand_Tabellen;
DROP TABLE Pruefstand_Tabellen;
Erwartetes Ergebnis
Id | Name
1 | Erste Zeile

CRUD

Anlegen, Ändern, Löschen, Lesen

INSERT, UPDATE, DELETE und SELECT auf derselben Tabelle — die vier Grundoperationen.

CREATE TABLE Pruefstand_Kontakte (Id int IDENTITY(1,1) PRIMARY KEY, Name nvarchar(50), Ort nvarchar(50));
INSERT INTO Pruefstand_Kontakte (Name, Ort) VALUES ('Anna Mueller', 'Bern'), ('Beat Meier', 'Zuerich');
UPDATE Pruefstand_Kontakte SET Ort = 'Basel' WHERE Name = 'Anna Mueller';
DELETE FROM Pruefstand_Kontakte WHERE Name = 'Beat Meier';
SELECT Id, Name, Ort FROM Pruefstand_Kontakte ORDER BY Id;
DROP TABLE Pruefstand_Kontakte;
Erwartetes Ergebnis
Id | Name | Ort
1 | Anna Mueller | Basel

Joins

Kunden mit ihren Bestellungen

JOIN verbindet zwei Tabellen über einen Fremdschlüssel; GROUP BY fasst zusammen.

CREATE TABLE Pruefstand_Kunden (Id int PRIMARY KEY, Name nvarchar(50));
CREATE TABLE Pruefstand_Bestellungen (Id int PRIMARY KEY, KundeId int, Betrag decimal(9,2));
INSERT INTO Pruefstand_Kunden VALUES (1, 'Anna'), (2, 'Beat');
INSERT INTO Pruefstand_Bestellungen VALUES (1, 1, 19.90), (2, 1, 5.00), (3, 2, 42.00);
SELECT k.Name, SUM(b.Betrag) AS Summe
FROM Pruefstand_Kunden k JOIN Pruefstand_Bestellungen b ON b.KundeId = k.Id
GROUP BY k.Name ORDER BY k.Name;
DROP TABLE Pruefstand_Bestellungen;
DROP TABLE Pruefstand_Kunden;
Erwartetes Ergebnis
Name | Summe
Anna | 24.90
Beat | 42.00

Transaktionen

Eine Überweisung als Transaktion

BEGIN TRANSACTION/COMMIT fasst zwei UPDATEs zu einer Einheit zusammen — entweder beide oder keines.

CREATE TABLE Pruefstand_Konto (Id int PRIMARY KEY, Saldo decimal(9,2));
INSERT INTO Pruefstand_Konto VALUES (1, 100.00), (2, 50.00);
BEGIN TRANSACTION;
UPDATE Pruefstand_Konto SET Saldo = Saldo - 30 WHERE Id = 1;
UPDATE Pruefstand_Konto SET Saldo = Saldo + 30 WHERE Id = 2;
COMMIT TRANSACTION;
SELECT Id, Saldo FROM Pruefstand_Konto ORDER BY Id;
DROP TABLE Pruefstand_Konto;
Erwartetes Ergebnis
Id | Saldo
1 | 70.00
2 | 80.00

JSON

Einen Datensatz als JSON bauen und wieder lesen

FOR JSON PATH baut ein JSON-Dokument aus einer Zeile, JSON_VALUE liest einen Wert daraus zurück.

DECLARE @j nvarchar(max) = (SELECT 1 AS Id, 'Anna' AS Name FOR JSON PATH, WITHOUT_ARRAY_WRAPPER);
SELECT JSON_VALUE(@j, '$.Id') AS Id, JSON_VALUE(@j, '$.Name') AS Name;
Erwartetes Ergebnis
Id | Name
1 | Anna

Vektoren

Kosinusabstand zweier Vektoren

vector(n) aus SQL Server 2025: VECTOR_DISTANCE misst, wie unähnlich zwei Vektoren sind — 1.0 heißt orthogonal.

SELECT VECTOR_DISTANCE('cosine', CAST('[1,0]' AS vector(2)), CAST('[0,1]' AS vector(2))) AS Kosinusabstand;
Erwartetes Ergebnis
Kosinusabstand
1

Sicherheit

Rechte vergeben und verweigern

GRANT gewährt ein Recht, DENY verweigert es ausdrücklich — beides steht danach in sys.database_permissions.

CREATE TABLE Pruefstand_Kunden2 (Id int PRIMARY KEY, Name nvarchar(50));
GRANT SELECT ON Pruefstand_Kunden2 TO PruefstandLeser;
DENY DELETE ON Pruefstand_Kunden2 TO PruefstandLeser;
SELECT permission_name, state_desc FROM sys.database_permissions
WHERE major_id = OBJECT_ID('Pruefstand_Kunden2') ORDER BY permission_name ASC;
DROP TABLE Pruefstand_Kunden2;
Erwartetes Ergebnis
permission_name | state_desc
DELETE | DENY
SELECT | GRANT