In deze artikel, zal ik de basis van het gebruik van de SQL SELECT-instructie behandelen om gegevens op te vragen uit één of meerdere SQL Server tabellen. Ik zal ook uitleggen hoe u geselecteerde kolommen kunt opvragen, evenals hoe u de SQL WHERE en HAVING-clausules kunt gebruiken om rijen te filteren.
De voorbeelden in dit artikel maken allemaal gebruik van de AdventureWorksLT2019 voorbeelddatabase. In het vorige artikel uit deze serie legde ik uit hoe u SQL Server-tabellen kunt vullen met behulp van de INSERT, UPDATE en DELETE-instructies. Deze Structured Query Language (SQL)-instructies wijzigen de inhoud van een tabel, maar de SQL SELECT-instructie heeft een ander doel.
Hoe een eenvoudige SQL SELECT-instructie te gebruiken
De SQL SELECT instructie wordt gebruikt om gegevens op te vragen uit een tabel. Het volgende codevoorbeeld illustreert de meest basale syntaxis van de SELECT-instructie.
SELECT columns FROM schema_name.table_name;
Zoals u zou moeten weten, zijn tabelgegevens georganiseerd in een rij-en-kolomformaat. Elke rij vertegenwoordigt een uniek record in een tabel, en elke kolom vertegenwoordigt een veld in de dataset.
De eerste overeenkomst van de SELECT-instructie is een lijst van de kolomnamen die zullen worden opgehaald. Hier geeft u een lijst op van door komma’s gescheiden kolommen waaruit u gegevens wilt ophalen.
Vervolgens specificeert de FROM-clausule de brontabel en de schemanaam indien nodig. SQL Server gebruikt schema’s om tabellen en andere databaseobjecten logisch te groeperen. Het standaardschema voor elke database is dbo, en omdat het schema dat hier wordt gebruikt, kan worden weggelaten.
De volgende lijst toont een voorbeeld van een eenvoudige SELECT-instructie:
- Het eerste USE commando stelt de huidige database in op AdventureWorksLT2019.
- De SELECT-instructie levert een kolommenlijst voor de resultaatset die zal worden opgehaald uit de SalesLT.Customer tabel.
- In dit geval gebruikt de AdventureWorksLT2019 voorbeelddatabase de schemanaam ‘SalesLT’ (onder andere), dus moet je de schemanaam, een punt en vervolgens de tabelnaam, die ‘Customers’ is, opnemen.
- De ‘FirstName’ en ‘LastName’ kolommen halen de voornaam en de achternaam van de klant op.
USE AdventureWorksLT2019 SELECT FirstName, LastName from SalesLT.Customer

Als verkorte notatie kunt u een asterisk (*) gebruiken om alle kolommen in de tabel op te halen, ongeacht het aantal kolommen. U kunt hieronder een voorbeeld daarvan zien:
USE AdventureWorksLT2019 SELECT * from SalesLT.Customer

De SELECT * -instructie is handig voor ad-hoc query’s of voor het bekijken van de kolommen en gegevens van een tabel waar u niet bekend mee bent. U moet deze instructie echter niet gebruiken voor productiecode – het haalt meestal meer gegevens op dan uw toepassing nodig heeft, en u wilt uw SQL Server-werklast niet verhogen.
Hoe filter je rijen met de SQL WHERE-clausule
Het echte kracht van de SELECT-instructie ligt in zijn filter- en joinmogelijkheden. De SELECT-query kan optioneel een WHERE-clausule gebruiken om de gegevens te filteren die zullen worden geretourneerd.
De WHERE-clausule gebruikt één of meer Booleaanse voorwaarden om de gewenste tabelgegevens te selecteren. De WHERE-clausule komt altijd na de FROM-clausule en voor de GROUP BY, HAVING, en ORDER BY-clausules.
U kunt hieronder een voorbeeld zien van het gebruik van de SQL WHERE-clausule. Hier wordt de WHERE-clausule gebruikt om een selectielijst te filteren die de kolommen ‘Voornaam’, ‘Achternaam’, ‘Telefoon’ en ‘Bedrijfsnaam’ bevat uit de rijen die de waarde ‘Sharp Bikes’ bevatten in de kolom ‘Bedrijfsnaam’.
USE AdventureWorksLT2019 SELECT FirstName, LastName, Phone, CompanyName FROM SalesLT.Customer WHERE CompanyName = 'Sharp Bikes';

Filteren rijen die een waarde bevatten als onderdeel van een string
De kracht van het gebruik van de WHERE-clausule met het SELECT-statement ligt in zijn flexibiliteit. De WHERE-clausule gaat veel verder dan de eenvoudige gelijkheid, “groter dan” en “kleiner dan” vergelijkingsoperatoren. Laten we eens wat dieper ingaan op enkele dingen die u kunt doen met de WHERE-clausule, te beginnen met het gebruik van de SQL LIKE-operator.
De LIKE-operator wordt gebruikt om te bepalen of een specifieke tekenreeks overeenkomt met een gespecificeerd patroon. In het onderstaande voorbeeld halen we alle rijen op uit de klantentabel die het woord ‘Bike’ ergens in de kolom ‘Bedrijfsnaam’ bevatten. Hier moeten we het % jokerteken zowel voor als na het woord ‘Bike’ gebruiken.
USE AdventureWorksLT2019 SELECT SalesPerson, CompanyName FROM SalesLT.Customer WHERE CompanyName LIKE('%Bike%');

Filteren van rijen die voldoen aan een van drie voorwaarden
U kunt ook de WHERE-clausule gebruiken om rijen te filteren op basis van meerdere verschillende waarden. De volgende codelijst toont hoe u de SELECT-instructie met een WHERE-clausule kunt gebruiken om drie verschillende waarden uit de producttabel te selecteren. In dit voorbeeld wordt de WHERE-clausule gebruikt met de OF-operator om rijen te selecteren waar de ‘ProductID’ gelijk is aan 680, 711 of 722.
USE AdventureWorksLT2019 SELECT Name, ProductID, ProductNumber FROM SalesLT.Product WHERE ProductID = 680 OR ProductID = 711 OR ProductID = 722;

Filteren van rijen die in een lijst van waarden staan
Op dezelfde manier kunt u de WHERE-clausule gebruiken om rijen te selecteren die zijn opgenomen in een lijst die is gedefinieerd met behulp van de IN-operator. In het volgende voorbeeld zal het SELECT-statement de rijen retourneren die de waarden ‘Bothell’, ‘Bellevue’ of ‘Renton’ bevatten in de kolom ‘City’ van de tabel SalesLT.Address.
USE AdventureWorksLT2019 SELECT AddressID, AddressLine1, City FROM SalesLT.Address WHERE City IN ('Bothell', 'Bellevue', 'Renton');

Filteren van rijen met een waarde tussen twee waarden
U kunt ook de WHERE-clausule van het SELECT-statement gebruiken met de BETWEEN-operator om rijwaarden te selecteren die vallen binnen een bepaald vooraf gedefinieerd bereik in een specifieke kolom. Het volgende voorbeeld toont hoe u BETWEEN kunt gebruiken om alleen de rijen in de Product-tabel terug te krijgen die een waarde in de kolom ‘ListPrice’ hebben die groter is dan 10 en kleiner dan 50.
USE AdventureWorksLT2019 SELECT ProductID, Name FROM SalesLT.Product WHERE ListPrice Between 10 AND 50;

Rijen filteren met de HAVING-clausule
Je kunt ook rijen filteren in een resultaatset door de HAVING-clausule te gebruiken. De HAVING-clausule is toegevoegd aan SQL Server omdat het WHERE-trefwoord niet kan worden gebruikt met aggregaatfuncties zoals GROUP BY. Het wordt gebruikt om een zoekvoorwaarde op te geven voor een groep of een aggregaat die één of meer voorwaarden bevat die waar zijn voor verschillende groepen records.
De HAVING-clausule komt altijd na de GROUP BY-clausule en voor de ORDER BY-clausule, zoals je kunt zien in de volgende SQL-instructie. In dit voorbeeld bestaat de resultaatset uit de ‘SalesOrderID’ en de kolomalias ‘SubTotal’. De volgorde is oplopend (ascending) en de rijen zijn gegroepeerd door de ‘SalesOrderID’.
USE AdventureWorksLT2019 ; SELECT SalesOrderID, SUM(LineTotal) AS SubTotal FROM SalesLT.SalesOrderDetail GROUP BY SalesOrderID HAVING SUM(LineTotal) > 5000.00 ORDER BY SalesOrderID ;

Samenvatting
In deze tutorial heb ik de basisprincipes uitgelegd van het gebruik van de T-SQL SELECT-instructie om rijen op verschillende manieren te filteren. De WHERE-clausule biedt een uiterst flexibele reeks operators waarmee u rijen kunt selecteren op basis van verschillende voorwaarden. Op dezelfde manier stelt de HAVING-clausule u in staat groepen rijen te selecteren die aan een bepaalde voorwaarde voldoen. Bedankt voor het lezen en blijf op de hoogte voor mijn volgende artikel in deze SQL Server Essential-serie.
Gerelateerd artikel: