Dit artikel richt zich op het schrijven van SQL-query's op basis van de databasereferentietabel met een vrij eenvoudige structuur om te begrijpen en te implementeren.
Daarnaast gaan we de concepten achter het schrijven van effectieve SQL-query's verduidelijken, samen met enkele professionele levenstips.
Voordat u de databasetabellen opvraagt
Aangezien dit artikel gaat over het doorzoeken van databasetabellen met behulp van SQL-scripts, moeten lezers een bepaalde achtergrond hebben om de concepten en voorbeelden volledig te begrijpen. We moeten de indruk hebben hoe we naar een tabel kunnen verwijzen. Ook moet de benodigde apparatuur aanwezig zijn:
Je hebt nodig:
- De basiskennis van relationele databases en SQL.
- Een SQL-databaseserver die lokaal of op afstand is geïnstalleerd.
- Hulpprogramma's voor databasebeheer, zoals SQL Server Management Studio of dbForge Studio voor SQL Server.
U zou in staat moeten zijn om een voorbeelddatabase te maken (met behulp van de meegeleverde scripts), verbinding te maken met de SQL Server en met die voorbeelddatabase te werken.
Voordat we verder gaan met het uitvoeren van query's op een lege database, moet u wellicht het vorige artikel over dit onderwerp raadplegen om de kennis op te frissen:
Eenvoudige SQL-query's schrijven vanuit een lege database
SQL-query's schrijven beginnend met referentietabellen
We moeten SQL-query's schrijven voor een voorbeelddatabase die twee tabellen bevat. Het plan is om de gegevens te bekijken uit een van de tabellen die bekend staat als een SQL-referentietabel. Opmerking:de referentietabel kan elke tabel zijn waarvoor geen gegevens uit een andere tabel nodig zijn.
Eerst moeten we de structuur van de voorbeelddatabase begrijpen om deze nauwkeurig te kunnen doorzoeken.
Voorbeeld van databasereferentietabel
We gebruiken een voorbeeld BookSimple2 database die uit twee tabellen bestaat, BookType en Boek .
Het BoekType tabel bevat de soorten boeken die aan een boek moeten worden toegewezen. Het Boek tabel bevat namen, typen en voorraad (aantal beschikbare exemplaren) van boeken.
Het is gemakkelijk te raden dat beide tabellen via sleutels aan elkaar zijn gekoppeld. Het type boek dat is opgeslagen in het Boek tabel is oorspronkelijk gedefinieerd in het BookType tafel. Het maakt het mogelijk om de gegevens consistent en betrouwbaar te houden.
Daarom is het BookType tabel is een referentietabel – het geeft zijn referentie (boektype) aan het hoofd Boek tafel.
Bekijk de onderstaande illustratie:
Als we het Boek niet koppelen tabel met BookType om het type boek te krijgen, moeten we het benodigde type definiëren telkens wanneer een nieuw boek wordt opgeslagen. Als gevolg hiervan zullen er snel fouten optreden omdat we hetzelfde type steeds opnieuw opslaan. Bovendien kunnen we door spelfouten nog veel meer typen maken.
Laten we zeggen dat als we het gebruik van referentietabellen negeren en slechts één hoofdtabel maken, we verschillende manieren kunnen gebruiken om één type weer te geven, zoals Ontwerp , Ontwerpen , en Ontwerpen . Het is verwarrend, vooral bij het opvragen en begrijpen van de gegevens.
U kunt ook het vorige artikel raadplegen voor meer informatie over hoe tabellen zich tot elkaar verhouden in SQL:
Leer databaseontwerp met SQL Server Management Studio (SSMS) – deel 2
Nu u de achtergrond ziet van het gebruik van de referentietabellen en de hoofdtabellen, kunnen we doorgaan met voorbeelden.
Een referentietabel maken in SQL
Open de database-ontwikkelingstool (dit kan SQL Server Management Studio of dbForge Studio voor SQL Server zijn) en maak verbinding met de geïnstalleerde SQL-serverinstantie.
Schrijf het volgende script tegen de hoofddatabase om een voorbeelddatabase op te zetten BookSimple2 met twee 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
Nadat u het script heeft uitgevoerd, kunt u de nieuw gemaakte database bekijken in de SSMS Object Explorer of de Database Explorer-sectie van dbForge Studio voor SQL Server:
Hoe te verwijzen naar twee tabellen met een externe SQL-sleutel
Ik heb bewust het deel van het script weggelaten dat de relatie tussen de referentietabel creëert (BookType ) en de hoofdtafel (Boek ) in de vorm van sleutels.
Voer het volgende script uit op de voorbeelddatabase om de referentietabel te koppelen aan de hoofdtabel:
-- 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]);
Vouw de BookSimple2 . uit database> Boek tabel> Sleutels map:
We kunnen zien dat de twee tabellen succesvol zijn gekoppeld.
Het bovenstaande is de schermafbeelding van SQL Server Management Studio. De weergave is echter precies hetzelfde als u de database bekijkt in Database Explorer van dbForge Studio voor SQL Server.
Een belangrijke tip over het selecteren van de gewenste database: U moet ervoor zorgen dat u query's uitvoert op de juiste database - de voorbeelddatabase. Selecteer het daarom uit de lijst met beschikbare databases of voer het volgende script uit:
-- Select the sample SQL database to query it
USE BookSimple2
Belangrijk! Het gebruik van een script om de database te selecteren is niet van toepassing als u werkt met een cloudversie van de SQL-database die bekend staat als Azure SQL Database.
Eerste zoekopdracht schrijven
Om de databasetabellen te doorzoeken, hoeven we alleen de SELECT-instructie in de volgende vorm in gedachten te houden:
SELECT * FROM <TableName>
Vervang de
De SELECT-instructie is een stuk flexibeler, maar voorlopig zullen we ons alleen concentreren op het zien van alle records (rijen) van een tabel.
Een belangrijke tip over SQL :onthoud dat SQL (met name verwijzend naar T-SQL) niet hoofdlettergevoelig is . Het heeft betrekking op zowel het SQL-gereserveerde woord (SELECT is hetzelfde als Selecteer ) of door de gebruiker gedefinieerde namen (BookType is hetzelfde als booktype ) .
Bekijk alle rijen uit de BookType-referentietabel
Schrijf het volgende script voor de voorbeelddatabase:
-- View all data from the BookType table
SELECT * FROM dbo.BookType
De uitvoer is:
We kunnen alle kolommen en rijen uit de tabel zien. Het is verreweg de snelste methode om alle gegevens uit een tabel te halen.
Belangrijke tip over SELECT *: Gebruik SELECT * om alle rijen en kolommen alleen uit een tabel te halen wanneer u een kleine tabel (zoals een referentietabel) aanvinkt. Anders kan het veel tijd kosten, terwijl we de gegevens van een paar kolommen en rijen uit een grotere tabel misschien nodig hebben.
Zoek alle rijen in de BookType-tabel met behulp van de tabelnaam
Er is een betere manier om de tabel te doorzoeken. We noemen een tabel en binden deze met alle kolommen zoals hieronder getoond:
-- View all data from the BookType table using bt alias
SELECT bt.* FROM dbo.BookType bt
Bekijk geselecteerde kolommen uit referentietabel
Het gebruik van tabelnamen biedt meer voordelen. Ten eerste kunnen we snel de gewenste kolom uit de tabel selecteren. Dan wordt het gebruik van tabellen en beperkte kolommen duidelijker omdat we in de meeste gevallen slechts enkele kolommen nodig hebben.
Hier is een voorbeeld van het verkrijgen van alleen ID's en namen van het BookType tafel:
-- View book type id and name columns from the reference table
SELECT bt.BookTypeId,bt.Name FROM dbo.BookType bt
Het resultaat is:
De SELECT-syntaxis verbeteren
Op basis van de hierboven genoemde informatie kunnen we de SELECT-syntaxis dus als volgt verbeteren:
SELECT t.<column1>,t.<column2> FROM <TableName> t
Sorteer gegevens op naamkolom met behulp van de Order By-clausule
U kunt de resultatenset sorteren op basis van een specifieke kolom of reeks kolommen. Het sorteren van de gegevens geeft een ander gezichtspunt.
Het gebruik van de Bestel op clausule in dit geval is:
SELECT t.<column1>,t.<column2> FROM <TableName> t order by t.<column1>
We willen bijvoorbeeld de soorten boeken zien die zijn gerangschikt op typenaam (alfabetische volgorde). In dit geval gebruiken we de Order By-clausule in het SELECT-instructiescript als volgt:
-- View book types (name) sorted by type name
SELECT bt.Name FROM dbo.BookType bt ORDER BY bt.Name
De uitvoer is:
Sorteer gegevens op naamkolom in aflopende volgorde
We kunnen de gegevens ook in aflopende volgorde sorteren volgens de vereisten. We willen bijvoorbeeld de lijst met alle boektypen zien op basis van de kolom Naam in aflopende volgorde (Z naar A). De syntaxis is:
SELECT t.<column1>,t.<column2> FROM <TableName> t order by t.<column1> desc
Het T-SQL-script is als volgt:
-- 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
De resultatenset staat hieronder:
Bekijk TOP N-records van een tabel
Ten slotte kunnen we het gewenste aantal rijen selecteren dat uit een database moet worden gehaald met behulp van de TOP-clausule. Na die clausule moeten we het vereiste aantal opgeven:
SELECT Top N t.<column1>,t.<column2> FROM <TableName> t
De TOP-clausule zonder enige volgorde is echter niet de beste optie. We moeten de volgorde van kolommen specificeren waarmee rekening moet worden gehouden bij het kiezen van de bovenste rijen.
Hier kunnen we de bovenstaande syntaxis als volgt verbeteren:
SELECT Top N t.<column1>,t.<column2> FROM <TableName> t order by <column> Desc/Asc
Onthoud dat we de aflopende volgorde moeten vermelden met behulp van DESC aan het einde. De oplopende volgorde is echter niet verplicht om te vermelden - het is de standaardoptie.
Laten we de top 2 soorten boeken bekijken die op naam zijn geordend in aflopende volgorde:
--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
De uitvoer is:
Belangrijke tip over TOP N: gebruik de TOP N-clausule (met een volgorde op) om een tabel te bekijken in plaats van alle rijen van de tabel te bekijken als u snel de gegevens wilt bekijken die bekend staan als een sneak peek.
In professionele scenario's dient de Top N-clausule om grote hoeveelheden gegevens uit een grote tabel stapsgewijs bij te werken.
Nu hebben we met succes de tabel van een SQL-database opgevraagd. Bovendien zijn we bekend geraakt met enkele tips om zoekopdrachten uit te voeren als een professional en hebben we enkele praktische tips geleerd voor het schrijven van SQL-query's.
DB-referentietabel oefenen
Nu kunt u de effectiviteit van SQL-query's voor elke tabel schrijven, uitvoeren en vergroten. Probeer de volgende oefeningen om de nieuwe vaardigheden te verbeteren:
- Probeer een script te schrijven om de boektype-ID te bekijken (BookTypeId ) met de details (Detail ) alleen kolommen.
- Probeer de referentie BookType te sorteren tabel op id's (BookTypeId ) in aflopende volgorde (van 3 naar 1).
- Probeer de bovenste 2 rijen uit het BookType . te halen tabel met alleen id (BookTypeId ) en details (Detail ) van het boektype gesorteerd op Detail kolom.