sql >> Database >  >> RDS >> Database

SQL SELECT voor beginners

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.


  1. Afronden (OMHOOG/OMLAAG) in SQL Server – 5 handige tips

  2. Postgresql Genereer_serie van maanden

  3. Oracle:DDL en transactie terugdraaien

  4. Hoe u de huidige tijd in PostgreSQL kunt krijgen