Dieser Artikel konzentriert sich auf das Schreiben von SQL-Abfragen für die Datenbank-Referenztabelle mit einer recht einfach zu verstehenden und zu implementierenden Struktur.
Darüber hinaus werden wir die Konzepte hinter dem Schreiben effektiver SQL-Abfragen zusammen mit einigen Tipps für das Berufsleben verdeutlichen.
Vor dem Abfragen der Datenbanktabellen
Da es in diesem Artikel um das Abfragen von Datenbanktabellen mit Hilfe von SQL-Skripten geht, sollten die Leser über ein gewisses Hintergrundwissen verfügen, um die Konzepte und Beispiele vollständig zu verstehen. Wir müssen einen Eindruck davon haben, wie man eine Tabelle referenziert. Außerdem muss die notwendige Ausrüstung vorhanden sein:
Sie benötigen:
- Die Grundkenntnisse von relationalen Datenbanken und SQL.
- Ein SQL-Datenbankserver, der lokal oder remote installiert ist.
- Datenbankverwaltungstools wie SQL Server Management Studio oder dbForge Studio für SQL Server.
Sie sollten in der Lage sein, eine Beispieldatenbank (mit Hilfe der bereitgestellten Skripts) zu erstellen, sich mit dem SQL Server zu verbinden und diese Beispieldatenbank auszuführen.
Bevor wir mit der Ausführung von Abfragen für eine leere Datenbank fortfahren, müssen Sie möglicherweise den vorherigen Artikel zu diesem Thema lesen, um Ihr Wissen aufzufrischen:
So schreiben Sie einfache SQL-Abfragen aus einer leeren Datenbank
Schreiben von SQL-Abfragen ausgehend von Referenztabellen
Wir müssen SQL-Abfragen für eine Beispieldatenbank schreiben, die zwei Tabellen enthält. Der Plan besteht darin, die Daten aus einer der als SQL-Referenztabelle bekannten Tabellen anzuzeigen. Hinweis:Die Referenztabelle kann jede Tabelle sein, die keine Daten aus einer anderen Tabelle benötigt.
Zuerst müssen wir die Struktur der Beispieldatenbank verstehen, um sie genau abzufragen.
Beispiel einer Datenbankreferenztabelle
Wir verwenden ein Beispiel BookSimple2 Datenbank, die aus zwei Tabellen besteht, BookType und Buchen .
Der Buchtyp Die Tabelle enthält die Bucharten, die einem Buch zugeordnet werden sollen. Das Buch Tabelle enthält Namen, Typen und Bestand (Anzahl verfügbarer Exemplare) von Büchern.
Es ist leicht zu erraten, dass beide Tabellen über Schlüssel verknüpft sind. Der im Buch gespeicherte Buchtyp Tabelle ist ursprünglich in BookType definiert Tisch. Es ermöglicht, die Daten konsistent und zuverlässig zu halten.
Daher ist der BookType table ist eine Referenztabelle – sie liefert ihre Referenz (Buchtyp) zum Haupt-Buch Tabelle.
Sehen Sie sich die folgende Abbildung an:
Wenn wir das Buch nicht verlinken Tabelle mit BookType Um den Buchtyp zu erhalten, müssen wir den erforderlichen Typ jedes Mal definieren, wenn ein neues Buch gespeichert wird. Dadurch kommt es schnell zu Fehlern, weil wir immer wieder den gleichen Typ einlagern. Darüber hinaus können wir aufgrund von Rechtschreibfehlern am Ende viel mehr Typen erstellen.
Nehmen wir an, wenn wir die Verwendung von Referenztabellen ignorieren und nur eine Haupttabelle erstellen, können wir verschiedene Arten verwenden, um einen Typ darzustellen, wie z. B. Design , Entwerfen und Designs . Es verwirrt, besonders beim Abfragen und Verstehen der Daten.
Sie können sich auch auf den vorherigen Artikel beziehen, um weitere Informationen darüber zu erhalten, wie Tabellen in SQL miteinander in Beziehung stehen:
Datenbankdesign mit SQL Server Management Studio (SSMS) lernen – Teil 2
Nachdem Sie nun den Hintergrund der Verwendung der Referenztabellen und der Haupttabellen gesehen haben, können wir mit den Beispielen fortfahren.
So erstellen Sie eine Referenztabelle in SQL
Öffnen Sie das Datenbankentwicklungstool (es könnte SQL Server Management Studio oder dbForge Studio für SQL Server sein) und stellen Sie eine Verbindung zur installierten SQL Server-Instanz her.
Schreiben Sie das folgende Skript für die Master-Datenbank, um eine Beispieldatenbank BookSimple2 einzurichten mit zwei Tabellen:
-- Create sample database BookSimple2
USE MASTER
GO
CREATE DATABASE BookSimple2
GO
USE BookSimple2
-- Creating a reference table BookType
CREATE TABLE dbo.BookType
(
BookTypeId INT IDENTITY(1,1),
Name VARCHAR(50)NOT NULL,
Detail VARCHAR(200)NULL
CONSTRAINT PK_BookType_BookTypeId PRIMARY KEY (BookTypeId)
)
GO
-- Populating (adding rows to the) table BookType
SET IDENTITY_INSERT dbo.BookType ON
GO
INSERT INTO dbo.BookType
(
BookTypeId
,Name
,Detail
)
VALUES
(
1 -- ID - INT Primary Key
,'Designing' -- Name - varchar(50) NOT NULL
,'This is Designing' -- Detail - varchar(200)
),
(
2 -- ID - INT Primary Key
,'Testing' -- Name - varchar(50) NOT NULL
,'This is Testing' -- Detail - varchar(200)
),
(
3 -- ID - INT Primary Key
,'Coding' -- Name - varchar(50) NOT NULL
,'This is Coding' -- Detail - varchar(200)
);
GO
SET IDENTITY_INSERT dbo.BookType OFF
GO
-- Creating a table Book
CREATE TABLE dbo.Book
(
BookId INT IDENTITY(1,1),
Name VARCHAR(50),
BookTypeId INT,
Stock INT,
CONSTRAINT PK_Book_BookId PRIMARY KEY (BookId)
)
GO
Nachdem Sie das Skript ausgeführt haben, können Sie die neu erstellte Datenbank im SSMS-Objekt-Explorer oder im Abschnitt „Datenbank-Explorer“ von dbForge Studio for SQL Server anzeigen:
So referenzieren Sie zwei Tabellen mit einem SQL-Fremdschlüssel
Ich habe bewusst den Teil des Skripts weggelassen, der die Beziehung zwischen der Referenztabelle (BookType ) und die Haupttabelle (Buch ) in Form von Schlüsseln.
Führen Sie das folgende Skript für die Beispieldatenbank aus, um die Referenztabelle mit der Haupttabelle zu verknüpfen:
-- Creating foreign key constraint on Book table to get BookTypeId values from BookType table
ALTER TABLE dbo.Book
ADD CONSTRAINT [FK_Book_BookType_BookTypeId]
FOREIGN KEY ([BookTypeId]) REFERENCES dbo.[BookType] ([BookTypeId]);
Erweitern Sie BookSimple2 Datenbank> Buch Tabelle> Schlüssel Ordner:
Wir können sehen, dass die beiden Tabellen erfolgreich verknüpft wurden.
Das Obige ist der Screenshot von SQL Server Management Studio. Die Ansicht ist jedoch genau dieselbe, wenn Sie die Datenbank im Datenbank-Explorer von dbForge Studio for SQL Server anzeigen.
Wichtiger Tipp zur Auswahl der gewünschten Datenbank: Sie müssen sicherstellen, dass Sie Abfragen für die richtige Datenbank ausführen – die Beispieldatenbank. Wählen Sie sie daher aus der Liste der verfügbaren Datenbanken aus oder führen Sie das folgende Skript aus:
-- Select the sample SQL database to query it
USE BookSimple2
Wichtig! Die Verwendung eines Skripts zum Auswählen der Datenbank ist nicht anwendbar, wenn Sie mit einer Cloud-Version der SQL-Datenbank arbeiten, die als Azure SQL-Datenbank bekannt ist.
Erste Abfrage schreiben
Um die Datenbanktabellen abzufragen, müssen wir uns nur das SELECT-Statement in folgender Form merken:
SELECT * FROM <TableName>
Ersetzen Sie
Die SELECT-Anweisung ist viel flexibler, aber im Moment konzentrieren wir uns nur darauf, alle Datensätze (Zeilen) einer Tabelle zu sehen.
Ein wichtiger Tipp zu SQL :Denken Sie daran, dass SQL (insbesondere in Bezug auf T-SQL) nicht zwischen Groß- und Kleinschreibung unterscheidet . Es bezieht sich sowohl auf das SQL-reservierte Wort (SELECT ist dasselbe wie Auswählen ) oder benutzerdefinierte Namen (BookType ist dasselbe wie booktype ) .
Alle Zeilen aus der BookType-Referenztabelle anzeigen
Schreiben Sie das folgende Skript für die Beispieldatenbank:
-- View all data from the BookType table
SELECT * FROM dbo.BookType
Die Ausgabe ist:
Wir können alle Spalten und Zeilen der Tabelle sehen. Es ist bei weitem die schnellste Methode, um alle Daten aus einer Tabelle zu bekommen.
Wichtiger Tipp zu SELECT *: Sie sollten SELECT * verwenden um alle Zeilen und Spalten aus einer Tabelle zu erhalten, nur wenn Sie eine kleine Tabelle (z. B. eine Referenztabelle) überprüfen. Andernfalls kann es viel Zeit in Anspruch nehmen, während wir möglicherweise die Daten für einige Spalten und Zeilen aus einer größeren Tabelle benötigen.
Suchen Sie alle Zeilen aus der BookType-Tabelle anhand des Tabellennamens
Es gibt eine bessere Möglichkeit, die Tabelle abzufragen. Wir benennen eine Tabelle und binden sie mit allen Spalten wie unten gezeigt:
-- View all data from the BookType table using bt alias
SELECT bt.* FROM dbo.BookType bt
Ausgewählte Spalten aus Referenztabelle anzeigen
Die Verwendung von Tabellennamen bringt weitere Vorteile. Zunächst können wir schnell die gewünschte Spalte aus der Tabelle auswählen. Dann macht es die Verwendung von Tabellen und begrenzten Spalten übersichtlicher, da wir in den meisten Fällen nur einige Spalten benötigen.
Hier ist ein Beispiel für das Abrufen von IDs und Namen nur aus BookType Tabelle:
-- View book type id and name columns from the reference table
SELECT bt.BookTypeId,bt.Name FROM dbo.BookType bt
Das Ergebnis ist:
Verbesserung der SELECT-Syntax
Daher können wir basierend auf den oben genannten Informationen die SELECT-Syntax wie folgt verbessern:
SELECT t.<column1>,t.<column2> FROM <TableName> t
Sortieren Sie Daten nach Namensspalte mit der Order By-Klausel
Sie können die Ergebnismenge basierend auf einer bestimmten Spalte oder einer Gruppe von Spalten sortieren. Das Sortieren der Daten ergibt einen anderen Blickwinkel.
Die Verwendung von Order By Klausel ist in diesem Fall:
SELECT t.<column1>,t.<column2> FROM <TableName> t order by t.<column1>
Beispielsweise möchten wir die Buchtypen nach Typnamen sortiert sehen (alphabetische Reihenfolge). In diesem Fall verwenden wir die Order By-Klausel im SELECT-Anweisungsskript wie folgt:
-- View book types (name) sorted by type name
SELECT bt.Name FROM dbo.BookType bt ORDER BY bt.Name
Die Ausgabe ist:
Daten nach Namensspalte in absteigender Reihenfolge sortieren
Wir können die Daten auch nach Bedarf in absteigender Reihenfolge sortieren. Beispielsweise möchten wir die Liste aller Buchtypen basierend auf der Spalte Name in absteigender Reihenfolge (Z bis A) anzeigen. Die Syntax lautet:
SELECT t.<column1>,t.<column2> FROM <TableName> t order by t.<column1> desc
Das T-SQL-Skript lautet wie folgt:
-- View book types (name) sorted by a type name in descending order (from Z to A)
SELECT bt.Name FROM dbo.BookType bt ORDER BY bt.Name desc
Die Ergebnismenge ist unten:
TOP N Datensätze aus einer Tabelle anzeigen
Schließlich können wir die gewünschte Anzahl von Zeilen auswählen, die aus einer Datenbank gezogen werden sollen, indem wir die TOP-Klausel verwenden. Nach dieser Klausel müssen wir die erforderliche Nummer angeben:
SELECT Top N t.<column1>,t.<column2> FROM <TableName> t
Die TOP-Klausel ohne Auftrag ist jedoch nicht die beste Option. Wir müssen die Reihenfolge der zu berücksichtigenden Spalten angeben, wenn wir die obersten n-Zeilen auswählen.
Hier können wir die obige Syntax wie folgt verbessern:
SELECT Top N t.<column1>,t.<column2> FROM <TableName> t order by <column> Desc/Asc
Denken Sie daran, dass wir die absteigende Reihenfolge angeben müssen, indem Sie DESC verwenden Am Ende. Die aufsteigende Reihenfolge muss jedoch nicht zwingend angegeben werden – sie ist die Standardoption.
Sehen wir uns die zwei wichtigsten Arten von Büchern in absteigender Reihenfolge nach Namen an:
--View Top 2 types of the books ordered by name in descending order (from Z to A)
SELECT TOP 2 bt.Name FROM dbo.BookType bt
ORDER BY bt.Name DESC
Die Ausgabe ist:
Wichtiger Tipp zu TOP N: Verwenden Sie die TOP N-Klausel (mit einem order by), um eine Tabelle anzuzeigen, anstatt alle Zeilen der Tabelle anzuzeigen, wenn Sie die als "Sneak Peek" bezeichneten Daten schnell überprüfen möchten.
In Berufslebensszenarien dient die Top-N-Klausel dazu, große Datenmengen aus einer großen Tabelle schrittweise zu aktualisieren.
Jetzt haben wir die Tabelle einer SQL-Datenbank erfolgreich abgefragt. Außerdem haben wir uns mit einigen Tipps zum Ausführen von Abfragen wie ein Profi vertraut gemacht und einige Best Practices für das Schreiben von SQL-Abfragen kennengelernt.
DB-Referenztabellenpraxis
Jetzt können Sie SQL-Abfragen für jede Tabelle schreiben, ausführen und deren Effektivität steigern. Probieren Sie die folgenden Übungen aus, um die neuen Fähigkeiten zu verbessern:
- Versuchen Sie, ein Skript zu schreiben, um die Buchtyp-ID anzuzeigen (BookTypeId ) mit den Details (Detail ) nur Spalten.
- Versuchen Sie, die Referenz BookType zu sortieren Tabelle nach IDs (BookTypeId ) in absteigender Reihenfolge (von 3 bis 1).
- Versuchen Sie, die obersten 2 Zeilen von BookType abzurufen Tabelle, die nur die ID enthält (BookTypeId ) und Details (Detail ) des Buchtyps sortiert nach Detail Spalte.