Lektion 1: Erstellen und Abfragen von Datenbankobjekten
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Analytics Platform System (PDW) SQL-Datenbank in Microsoft Fabric
Hinweis
Der Lernpfad Erste Schritte für Abfragen mit Transact-SQL bietet ausführlichere Inhalte sowie praktische Beispiele.
In dieser Lektion erfahren Sie, wie Sie eine Datenbank erstellen, eine Tabelle in der Datenbank erstellen und dann auf die Daten in der Tabelle zugreifen und diese ändern können. Da es sich bei dieser Lektion um eine Einführung in die Verwendung von Transact-SQL handelt, werden viele der für diese Anweisungen verfügbaren Optionen nicht verwendet oder beschrieben.
Transact-SQL-Anweisungen können wie folgt geschrieben und an die Datenbank-Engine übertragen werden:
Mithilfe von SQL Server Management Studio. In diesem Lernprogramm wird vorausgesetzt, dass Sie Management Studioverwenden. Sie können jedoch auch Management Studio Express verwenden, das als kostenloser Download im Microsoft Download Centerzur Verfügung steht.
Über das Hilfsprogramm sqlcmd.
Durch Herstellen der Verbindung über eine von Ihnen erstellte Anwendung.
Der Code wird in der Datenbank-Engine immer auf gleiche Weise und mit denselben Berechtigungen ausgeführt, unabhängig davon, wie Sie die Codeanweisungen übermitteln.
Damit Sie Transact-SQL-Anweisungen in Management Studio ausführen können, öffnen Sie Management Studio und stellen eine Verbindung mit einer Instanz von SQL Server-Datenbank-Engine her.
Voraussetzungen
Zur Durchführung dieses Tutorials benötigen Sie SQL Server Management Studio und Zugriff auf eine SQL Server-Instanz.
- Installieren Sie SQL Server Management Studio.
Wenn Sie keine SQL Server-Instanz haben, erstellen Sie eine. Wählen Sie dazu aus den folgenden Links Ihre Plattform aus. Wenn Sie die SQL-Authentifizierung wählen, verwenden Sie Ihre SQL Server-Anmeldeinformationen.
- Windows: Laden Sie die SQL Server 2022 Developer Edition herunter.
- Linux: Laden Sie SQL Server 2022 in einen Container herunter.
Erstellen einer Datenbank
Wie viele Transact-SQL-Anweisungen umfasst auch die CREATE DATABASE-Anweisung einen erforderlichen Parameter: den Namen der Datenbank. CREATE DATABASE
umfasst zudem viele optionale Parameter wie z. B. den Speicherort auf dem Datenträger, an dem Sie die Datenbankdateien ablegen möchten. Wenn Sie CREATE DATABASE
ohne optionale Parameter ausführen, werden von SQL Server Standardwerte für viele dieser Parameter verwendet.
Geben Sie in einem Fenster des Abfrage-Editors den folgenden Code ein, aber führen Sie ihn nicht aus:
CREATE DATABASE TestData GO
Verwenden Sie den Zeiger, um die Wörter
CREATE DATABASE
auszuwählen, und drücken Sie dann F1. DerCREATE DATABASE
-Artikel wird geöffnet. Sie können dieses Verfahren verwenden, um die vollständige Syntax fürCREATE DATABASE
und für die anderen in diesem Tutorial verwendeten Anweisungen zu finden.Drücken Sie im Abfrage-Editor F5 , um die Anweisung auszuführen und eine Datenbank mit Namen
TestData
zu erstellen.
Wenn Sie eine Datenbank erstellen, wird von SQL Server eine Kopie der model
-Datenbank erstellt und die Kopie in den Namen der Datenbank umbenannt. Dieser Vorgang dauert nur einige Sekunden, es sei denn, Sie geben eine große Anfangsgröße der Datenbank als optionalen Parameter an.
Hinweis
Das GO-Schlüsselwort trennt Anweisungen, wenn mehrere Anweisungen in einem einzelnen Batch gesendet werden. GO ist optional, wenn der Batch nur eine Anweisung enthält.
Erstellen einer Tabelle
Gilt für: SQL Server Azure SQL-Datenbank Azure Synapse Analytics Analytics Platform System (PDW)
Zum Erstellen einer Tabelle müssen Sie einen Tabellennamen sowie die Namen und Datentypen jeder Spalte in der Tabelle angeben. Außerdem empfiehlt es sich, anzugeben, ob NULL-Werte in den einzelnen Spalten zulässig sind. Zum Erstellen der Tabelle müssen Sie über die Berechtigung CREATE TABLE
verfügen sowie über die Berechtigung ALTER SCHEMA
für das Schema, das die Tabelle enthalten wird. Die feste Datenbankrolle db_ddladmin umfasst die folgenden Berechtigungen.
Die meisten Tabellen verfügen über einen Primärschlüssel, der sich aus einer oder mehreren Spalten der Tabelle zusammensetzt. Ein Primärschlüssel ist immer eindeutig. Die Datenbank-Engine erzwingt die Einschränkung, dass ein Primärschlüsselwert in der Tabelle nicht wiederholt werden kann.
Eine Liste der Datentypen sowie Links zu Beschreibungen der einzelnen Datentypen finden Sie unter Datentypen (Transact-SQL).
Hinweis
Datenbank-Engine kann mit oder ohne Beachtung der Groß-/Kleinschreibung installiert werden. Wurde Datenbank-Engine so installiert, dass die Groß-/Kleinschreibung beachtet wird, müssen Objektnamen immer die gleiche Groß-/Kleinschreibung aufweisen. Beispielsweise unterscheidet sich eine Tabelle namens OrderData von einer Tabelle namens ORDERDATA. Wurde Datenbank-Engine so installiert, dass die Groß-/Kleinschreibung nicht beachtet wird, bezeichnen diese beiden Tabellennamen die gleiche Tabelle, und der Name kann nur einmal verwendet werden.
Ändern der Verbindung des Abfrage-Editors in die Datenbank TestData
Geben Sie in einem Abfrage-Editorfenster den folgenden Code ein, und führen Sie ihn aus, um die Verbindung in die TestData
-Datenbank zu ändern.
USE TestData
GO
Erstellen der Tabelle
Geben Sie in einem Abfrage-Editorfenster den folgenden Code ein, und führen Sie ihn aus, um eine Tabelle namens Products
zu erstellen. Die Spalten in der Tabelle heißen ProductID
, ProductName
, Price
und ProductDescription
. Die ProductID
-Spalte ist der Primärschlüssel der Tabelle. int
, varchar(25)
, money
und varchar(max)
sind Datentypen. Nur die Spalten Price
und ProductionDescription
dürfen keine Daten enthalten, wenn eine Zeile eingefügt oder geändert wird. Diese Anweisung enthält ein optionales Element (dbo.
), das als Schema bezeichnet wird. Das Schema ist das Datenbankobjekt, das die Tabelle besitzt. Wenn Sie Administrator sind, ist dbo
das Standardschema. dbo
steht für Datenbankbesitzer (database owner, dbo).
CREATE TABLE dbo.Products
(ProductID int PRIMARY KEY NOT NULL,
ProductName varchar(25) NOT NULL,
Price money NULL,
ProductDescription varchar(max) NULL)
GO
Einfügen und Aktualisieren von Daten in einer Tabelle
Nachdem Sie nun die Products
-Tabelle erstellt haben, können Sie Daten mithilfe der INSERT-Anweisung in die Tabelle einfügen. Nach dem Einfügen der Daten ändern Sie den Inhalt einer Zeile mithilfe einer UPDATE-Anweisung. Mithilfe der WHERE-Klausel der UPDATE-Anweisung schränken Sie das Update auf eine einzelne Zeile ein. Durch die vier Anweisungen werden die folgenden Daten eingegeben.
ProductID | ProductName | Preis | ProductDescription |
---|---|---|---|
1 | Clamp | 12.48 | Workbench clamp |
50 | Screwdriver | 3,17 | Flat head |
75 | Tire Bar | Tool for changing tires. | |
3000 | 3 mm Bracket | 0,52 |
Die grundlegende Syntax lautet: INSERT, Tabellenname, Spaltenliste, VALUES und dann eine Liste der einzufügenden Werte. Die beiden Bindestriche vor einer Zeile geben an, dass es sich bei der Zeile um einen Kommentar handelt, der vom Compiler ignoriert wird. In diesem Fall wird im Kommentar eine zulässige Variante der Syntax beschrieben.
Einfügen von Daten in eine Tabelle
Führen Sie die folgende Anweisung aus, um eine Zeile in die in der vorhergehenden Aufgabe erstellte
Products
-Tabelle einzufügen.-- Standard syntax INSERT dbo.Products (ProductID, ProductName, Price, ProductDescription) VALUES (1, 'Clamp', 12.48, 'Workbench clamp') GO
Wenn der Einfügevorgang erfolgreich ist, fahren Sie mit dem nächsten Schritt fort.
Wenn der Einfügevorgang fehlschlägt, kann das daran liegen, dass die
Product
-Tabelle bereits über eine Zeile verfügt, in der sich diese Produkt-ID befindet. Löschen Sie alle Zeilen in der Tabelle, und wiederholen Sie den vorherigen Schritt, um fortfahren zu können. Mit TRUNCATE TABLE werden alle Zeilen in der Tabelle gelöscht.Führen Sie den folgenden Befehl aus, um alle Zeilen in der Tabelle zu löschen:
TRUNCATE TABLE TestData.dbo.Products; GO
Nachdem Sie die Zeilen aus der Tabelle entfernt haben, führen Sie den
INSERT
-Befehl dieses Schritts noch mal aus.In der folgenden Anweisung sehen Sie, wie die Reihenfolge, in der die Parameter bereitgestellt werden, durch Wechseln der Position von
ProductID
undProductName
sowohl in der Liste der Felder (in Klammern) als auch in der Liste der Werte geändert werden kann.-- Changing the order of the columns INSERT dbo.Products (ProductName, ProductID, Price, ProductDescription) VALUES ('Screwdriver', 50, 3.17, 'Flat head') GO
Die folgende Anweisung veranschaulicht, dass die Namen der Spalten optional sind, solange die Werte in der richtigen Reihenfolge aufgelistet werden. Diese Syntax ist üblich, wird aber nicht empfohlen, da sie das Verständnis des Codes durch Dritte erschweren könnte. Für die Spalte
Price
wirdNULL
angegeben, da der Preis für dieses Produkt noch nicht bekannt ist.-- Skipping the column list, but keeping the values in order INSERT dbo.Products VALUES (75, 'Tire Bar', NULL, 'Tool for changing tires.') GO
Der Schemaname ist optional, solange Sie auf eine Tabelle im Standardschema zugreifen und diese ändern. Da die
ProductDescription
-Spalte NULL-Werte zulässt und kein Wert bereitgestellt wird, können Name und Wert derProductDescription
-Spalte vollständig aus der Anweisung gelöscht werden.-- Dropping the optional dbo and dropping the ProductDescription column INSERT Products (ProductID, ProductName, Price) VALUES (3000, '3 mm Bracket', 0.52) GO
Aktualisieren der Products-Tabelle
Geben Sie die folgende UPDATE
-Anweisung zum Ändern von ProductName
des zweiten Produkts von Screwdriver
in Flat Head Screwdriver
ein, und führen Sie sie aus.
UPDATE dbo.Products
SET ProductName = 'Flat Head Screwdriver'
WHERE ProductID = 50
GO
Lesen von Daten aus einer Tabelle
Daten in einer Tabelle können mithilfe der SELECT-Anweisung gelesen werden. Die SELECT-Anweisung gehört zu den wichtigsten Transact-SQL-Anweisungen. Ihre Syntax zeichnet sich durch unzählige Variationen aus. In diesem Tutorial arbeiten Sie mit fünf einfachen Versionen.
Lesen der Daten in einer Tabelle
Geben Sie die folgenden Anweisungen zum Lesen der Daten in der
Products
-Tabelle ein, und führen Sie sie aus.-- The basic syntax for reading data from a single table SELECT ProductID, ProductName, Price, ProductDescription FROM dbo.Products GO
Sie können alle Spalten in der Tabelle mithilfe eines Sternchens (
*
) auswählen. Das Sternchen eignet sich für Ad-hoc-Abfragen. Sie sollten die Spaltenliste im dauerhaften Code bereitstellen, sodass die Anweisung die vorhergesagten Spalten zurückgibt, selbst wenn der Tabelle später eine neue Spalte hinzugefügt wird.-- Returns all columns in the table -- Does not use the optional schema, dbo SELECT * FROM Products GO
Sie können Spalten auslassen, die nicht zurückgegeben werden sollen. Die Spalten werden in der Reihenfolge zurückgegeben, in der sie aufgelistet sind.
-- Returns only two of the columns from the table SELECT ProductName, Price FROM dbo.Products GO
Mithilfe einer
WHERE
-Klausel können Sie die an den Benutzer zurückgegebenen Zeilen beschränken.-- Returns only two of the records in the table SELECT ProductID, ProductName, Price, ProductDescription FROM dbo.Products WHERE ProductID < 60 GO
Sie können die Werte in den Spalten direkt nach ihrer Rückgabe bearbeiten. Im folgenden Beispiel wird eine mathematische Operation für die
Price
-Spalte ausgeführt. In dieser Art geänderte Spalten weisen keinen Namen auf, sofern Sie nicht mithilfe des SchlüsselwortsAS
einen Namen angeben.-- Returns ProductName and the Price including a 7% tax -- Provides the name CustomerPays for the calculated column SELECT ProductName, Price * 1.07 AS CustomerPays FROM dbo.Products GO
Nützliche Funktionen in einer SELECT-Anweisung
Weitere Informationen zu einigen Funktionen, die zum Bearbeiten von Daten in SELECT-Anweisungen verwendet werden können, finden Sie in den folgenden Artikeln:
Erstellen von Ansichten und gespeicherten Prozeduren
Bei einer Sicht handelt es sich um eine gespeicherte SELECT-Anweisung, und eine gespeicherte Prozedur setzt sich aus einer oder mehreren Transact-SQL-Anweisungen zusammen, die als Batch ausgeführt werden.
Sichten werden wie Tabellen abgefragt und akzeptieren keine Parameter. Gespeicherte Prozeduren sind komplexer als Sichten. Gespeicherte Prozeduren können sowohl Eingabe- als auch Ausgabeparameter aufweisen und Anweisungen enthalten, die den Ablauf des Codes steuern, wie z. B. IF- und WHILE-Anweisungen. Als eine der Grundregeln guter Programmierung gilt die Verwendung gespeicherter Prozeduren für alle Aktionen, die sich in der Datenbank wiederholen.
In diesem Beispiel erstellen Sie mithilfe von CREATE VIEW eine Sicht, die nur zwei der Spalten in der Products
-Tabelle auswählt. Sie erstellen dann mithilfe von CREATE PROCEDURE eine gespeicherte Prozedur, die einen Parameter für den Preis akzeptiert und nur die Produkte zurückgibt, deren Preis unter dem angegebenen Parameterwert liegt.
Erstellen einer Ansicht
Führen Sie die folgende Anweisung aus, um eine Sicht zu erstellen, die eine SELECT-Anweisung ausführt und die Namen und Preise der Produkte an den Benutzer zurückgibt.
CREATE VIEW vw_Names
AS
SELECT ProductName, Price FROM Products;
GO
Testen der Sicht
Sichten werden genau wie Tabellen behandelt. Greifen Sie mithilfe einer SELECT
-Anweisung auf eine Sicht zu.
SELECT * FROM vw_Names;
GO
Erstellen einer gespeicherten Prozedur
Die folgende Anweisung erstellt eine gespeicherte Prozedur namens pr_Names
, die einen Eingabeparameter mit der Bezeichnung @VarPrice
vom Datentyp money
akzeptiert. Die gespeicherte Prozedur druckt die mit dem Eingabeparameter verkettete Products less than
-Anweisung. Dieser Parameter wird vom money
-Datentyp in den varchar(10)
-Zeichendatentyp geändert. Dann führt die Prozedur eine SELECT
-Anweisung für die Sicht aus und übergibt dabei den Eingabeparameter als Teil der WHERE
-Klausel. Dadurch werden alle Produkte zurückgegeben, deren Preis unter dem Wert des Eingabeparameters liegt.
CREATE PROCEDURE pr_Names @VarPrice money
AS
BEGIN
-- The print statement returns text to the user
PRINT 'Products less than ' + CAST(@VarPrice AS varchar(10));
-- A second statement starts here
SELECT ProductName, Price FROM vw_Names
WHERE Price < @VarPrice;
END
GO
Testen der gespeicherten Prozedur.
Wenn Sie die gespeicherte Prozedur testen möchten, geben Sie die folgende Anweisung ein, und führen Sie sie aus. Die Prozedur sollte die Namen der beiden Produkte zurückgeben, die Sie in Lektion 1 mit einem Preis unter Products
in die 10.00
-Tabelle eingegeben haben.
EXECUTE pr_Names 10.00;
GO
Nächste Schritte
Im nächsten Artikel erfahren Sie, wie Sie Berechtigungen für Datenbankobjekte konfigurieren. Die Objekte, die in Lektion 1 erstellt wurden, werden in Lektion 2 ebenfalls verwendet.
Zum nächsten Artikel wechseln, um mehr zu erfahren: