De SELECT
statement is bijna zonder twijfel de meest gebruikte instructie in SQL.
De SELECT
statement wordt gebruikt voor het ophalen van gegevens uit de database. U kunt aangeven welke rijen u wilt retourneren en welke kolommen.
Voorbeeld
Hier is een voorbeeld om de SELECT
. te demonstreren verklaring.
SELECT *
FROM Pets;
Resultaat:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+------------+
In dit voorbeeld gebruikten we de asterisk (*
) jokerteken om alle kolommen te retourneren. We gebruikten ook de FROM
clausule om aan te geven uit welke tabel gegevens moeten worden gehaald.
Dus deze zoekopdracht retourneert alle rijen en alle kolommen van de Pets
tafel.
Geef de kolommen op
U kunt de kolommen specificeren die u wilt hebben geretourneerd.
Vervang hiervoor het asterisk-jokerteken door de kolomnamen, elk gescheiden door een komma, in de volgorde waarin u ze wilt retourneren.
SELECT PetId, PetName, DOB
FROM Pets;
Resultaat:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 2 | Fetch | 2019-08-16 | | 3 | Scratch | 2018-10-01 | | 4 | Wag | 2020-03-15 | | 5 | Tweet | 2020-11-28 | | 6 | Fluffy | 2020-09-17 | | 7 | Bark | NULL | | 8 | Meow | NULL | +---------+-----------+------------+
Het wordt over het algemeen als een goede gewoonte beschouwd om het op deze manier te doen en alleen die kolommen terug te geven die u echt nodig hebt. Het gebruik van het asterisk-jokerteken om alle kolommen te retourneren kan een nadelige invloed hebben op de prestaties, vooral in grotere databases.
Geef de rijen op
Er zijn veel manieren om de resultaten te filteren op alleen die rijen waarin u geïnteresseerd bent. De meest gebruikelijke manier is om de WHERE
te gebruiken clausule. Met deze clausule kunt u een voorwaarde specificeren waaraan een rij moet voldoen om in aanmerking te komen.
Hier is een voorbeeld om te demonstreren.
SELECT PetId, PetName, DOB
FROM Pets
WHERE PetName = 'Fluffy';
Resultaat:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 6 | Fluffy | 2020-09-17 | +---------+-----------+------------+
In ons geval waren er twee rijen die voldeden aan onze zoekvoorwaarde.
Onze zoekvoorwaarde gebruikt de operator is gelijk aan (=
) om aan te geven dat de waarde van de PetName
kolom moet overeenkomen met de opgegeven waarde (Fluffy
) precies.
Er zijn veel andere operators die u kunt gebruiken in uw zoekvoorwaarden. U kunt bijvoorbeeld de LIKE
. gebruiken operator om huisdieren terug te sturen waarvan de naam begint met F
of Fluff
of wat dan ook.
U kunt meer voorwaarden toevoegen aan de WHERE
clausule met behulp van operators zoals de AND
en OR
operators.
Hier is een voorbeeld.
SELECT PetId, PetName, DOB
FROM Pets
WHERE PetName = 'Fluffy'
OR DOB < '2020-01-01';
Resultaat:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 2 | Fetch | 2019-08-16 | | 3 | Scratch | 2018-10-01 | | 6 | Fluffy | 2020-09-17 | +---------+-----------+------------+
In dit voorbeeld hebben we alle rijen geretourneerd waarin de naam van het huisdier Fluffy of . is waar de geboortedatum van het huisdier (opgegeven in de DOB
kolom) kleiner is dan een bepaalde datum. We gebruikten de operator minder dan (<
) om dat te specificeren.
Niet-tabelgegevens retourneren
De SELECT
statement kan ook worden gebruikt om gegevens te retourneren die niet in een tabel zijn opgeslagen. Het is bijvoorbeeld volkomen legaal om dit te doen:
SELECT 'Hey there!';
Resultaat:
+--------------------+ | (No column name) | |--------------------| | Hey there! | +--------------------+
Merk op dat wanneer we dat doen, de kolom geen naam heeft. We zouden een alias kunnen gebruiken om een naam te geven aan het resulterende veld.
Hier zijn nog een paar voorbeelden van het selecteren van niet-tabelgegevens en het geven van een alias aan elk geretourneerd veld:
SELECT
2 + 3 AS "2 + 3",
'Fluffy' + ' ' + 'Smith' AS FullName,
SYSDATETIME() AS "Date/time";
Resultaat:
+---------+--------------+-----------------------------+ | 2 + 3 | FullName | Date/time | |---------+--------------+-----------------------------| | 5 | Fluffy Smith | 2020-12-04 23:58:55.8483734 | +---------+--------------+-----------------------------+
Hier is een kort overzicht:
- De eerste kolom heeft simpelweg twee getallen toegevoegd.
- De tweede kolom heeft drie strings aaneengeschakeld (inclusief een spatie). U kunt indien nodig ook tekenreeksen samenvoegen met cijfers.
- De derde kolom gebruikte de
SYSDATETIME()
functie om de huidige datum en tijd te retourneren. Deze functie is beschikbaar in SQL Server. Andere DBMS'en hebben hun eigen datum- en tijdfuncties. Zie SQLite Date/Time Functions, SQL Server Date/Time Functions en PostgreSQL Date/Time Functions voor een lijst met datum- en tijdfuncties die beschikbaar zijn in die DBMS'en.
Subquery's
Het is mogelijk om meerdere SELECT
. te hebben uitspraken in een enkele query. We kunnen dit doen met behulp van een subquery.
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );
Resultaat:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 1 | Bird | | 2 | Cat | | 3 | Dog | +-------------+-----------+
In dit voorbeeld gebruikten we de IN
operator om een subquery op te geven. Die subquery selecteerde gegevens uit een andere tabel en de IN
operator relateerde het terug aan de buitenste vraag.
De resultaten bestellen
U kunt de ORDER BY
. gebruiken clausule om de resultaten te sorteren.
We kunnen bijvoorbeeld de vorige resultaten sorteren op de PetTypeId
kolom in aflopende volgorde:
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets )
ORDER BY PetTypeId DESC;
Resultaat:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 3 | Dog | | 2 | Cat | | 1 | Bird | +-------------+-----------+
Zie SQL ORDER BY
Clausule voor beginners voor meer voorbeelden en een gedetailleerde uitleg.
Meer Geavanceerd SELECT
Verklaringen
De SELECT
instructie is een zeer eenvoudige instructie, maar kan worden gebruikt om zeer complexe query's te maken.
Hier is een vraag die iets ingewikkelder is dan de vorige.
SELECT
PetTypes.PetType,
COUNT(Pets.PetTypeId) AS Count
FROM Pets
LEFT JOIN PetTypes
ON Pets.PetTypeId = PetTypes.PetTypeId
GROUP BY PetTypes.PetType
ORDER BY Count DESC;
Resultaat:
+-----------+---------+ | PetType | Count | |-----------+---------| | Dog | 4 | | Cat | 3 | | Bird | 1 | +-----------+---------+
In de wereld van SQL-query's is dit nog steeds vrij eenvoudig, maar het bevat veel van de elementen die vaak worden gezien in complexere query's.
Deze query gebruikt bijvoorbeeld een join om gegevens uit meerdere tabellen op te halen. Het gebruikt ook de GROUP BY
clausule om de rijen in groepen te verdelen.
Zie SQL GROUP BY
Clausule voor beginners voor meer voorbeelden van de GROUP BY
clausule.
Zie SQL Joins-zelfstudie om te zien hoe u gegevens uit meerdere tabellen kunt ophalen en deze als één resultaatset kunt retourneren.
De SELECT INTO
Verklaring
Sommige DBMS'en ondersteunen de SELECT INTO
uitspraak. Dit is iets anders dan de vorige voorbeelden, omdat het de gegevens in de database beïnvloedt.
De SELECT INTO
statement maakt een nieuwe tabel aan en voegt er gegevens in uit een andere tabel.
In principe gaat het als volgt:
SELECT * INTO Table2
FROM Table1;
In dit voorbeeld maken we een nieuwe tabel met de naam Table2
, en voeg alle gegevens in van Table1
erin. Table2
zal dezelfde definitie hebben als Table1
.
Zie SQL SELECT INTO
Verklaring voor meer voorbeelden.
Zoals ik al zei, ondersteunen niet alle DBMS'en deze verklaring. Als uw DBMS de SELECT INTO
. niet ondersteunt instructie, probeer dan de CREATE TABLE ... AS SELECT
verklaring in plaats daarvan.
Die instructies maken een nieuwe tabel als onderdeel van hun bewerking. Om gegevens in een reeds bestaande tabel in te voegen, probeert u de INSERT INTO ... SELECT
verklaring in plaats daarvan.