sql >> Database >  >> RDS >> Database

Basis SQL-query's

Dit artikel bevat voorbeelden van standaard SQL-query's die beginners kunnen gebruiken om gegevens uit hun databases op te halen.

Basis SELECT Zoekopdracht

Hier is een voorbeeld van mogelijk de meest gebruikte query in SQL:

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       |
+---------+-------------+-----------+-----------+------------+

Deze zoekopdracht selecteert alle rijen en alle kolommen uit de Pets tafel. Dit komt omdat het sterretje (* ) jokerteken selecteert alle kolommen.

Kolomnamen selecteren

Om prestatieredenen is het meestal het beste om te voorkomen dat u alle kolommen selecteert, tenzij u ze echt nodig hebt. Het is meestal beter om alleen de kolommen te selecteren die u nodig heeft.

Hier is een voorbeeld.

SELECT PetId, PetName
FROM Pets;

Resultaat:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 1       | Fluffy    |
| 2       | Fetch     |
| 3       | Scratch   |
| 4       | Wag       |
| 5       | Tweet     |
| 6       | Fluffy    |
| 7       | Bark      |
| 8       | Meow      |
+---------+-----------+

Filter de resultaten

U kunt een WHERE . toevoegen clausule om de resultaten te filteren naar alleen de rijen die u nodig hebt.

SELECT PetId, PetName
FROM Pets
WHERE PetName = 'Fluffy';

Resultaat:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 1       | Fluffy    |
| 6       | Fluffy    |
+---------+-----------+

Hier is nog een voorbeeld van het filteren van de resultaten. Deze keer gebruiken we de operator groter dan (> ) om het op datum te filteren.

SELECT PetName, DOB 
FROM Pets
WHERE DOB > '2020-01-01';

Resultaat:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fluffy    | 2020-11-20 |
| Wag       | 2020-03-15 |
| Tweet     | 2020-11-28 |
| Fluffy    | 2020-09-17 |
+-----------+------------+

U kunt de operator groter dan verwisselen voor andere operators, zoals de operator groter dan of gelijk aan (>= ), kleiner dan operator (< ), of kleiner dan of gelijk aan operator (<= ).

U kunt ook de BETWEEN . gebruiken operator om de resultaten te filteren op een specifiek bereik (bijvoorbeeld tussen twee datums).

SELECT
    PetName,
    DOB
FROM Pets
WHERE DOB BETWEEN '2018-01-01' AND '2020-01-01';

Resultaat:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fetch     | 2019-08-16 |
| Scratch   | 2018-10-01 |
+-----------+------------+

Sorteer de resultaten

U kunt een ORDER BY . toevoegen om de rijen te sorteren die door de query worden geretourneerd.

Oplopende volgorde

Gebruik de ASC trefwoord om de resultaten in oplopende volgorde te sorteren. Dit is de standaardwaarde, dus u kunt dit zoekwoord ook weglaten als u de resultaten in oplopende volgorde wilt weergeven.

SELECT PetId, PetName
FROM Pets
ORDER BY PetName ASC;

Of:

SELECT PetId, PetName
FROM Pets
ORDER BY PetName;

Resultaat:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 7       | Bark      |
| 2       | Fetch     |
| 1       | Fluffy    |
| 6       | Fluffy    |
| 8       | Meow      |
| 3       | Scratch   |
| 5       | Tweet     |
| 4       | Wag       |
+---------+-----------+

Aflopende volgorde

Gebruik de DESC trefwoord om de resultaten in aflopende volgorde te sorteren.

SELECT PetId, PetName
FROM Pets
ORDER BY PetName DESC;

Resultaat:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 4       | Wag       |
| 5       | Tweet     |
| 3       | Scratch   |
| 8       | Meow      |
| 1       | Fluffy    |
| 6       | Fluffy    |
| 2       | Fetch     |
| 7       | Bark      |
+---------+-----------+

Sorteren op meerdere kolommen

U kunt sorteren op meerdere kolommen door elke kolom op te sommen, gescheiden door een komma.

SELECT PetId, PetName
FROM Pets
ORDER BY PetName ASC, PetId ASC;

SELECT PetId, PetName
FROM Pets
ORDER BY PetName ASC, PetId DESC;

Resultaat:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 7       | Bark      |
| 2       | Fetch     |
| 1       | Fluffy    |
| 6       | Fluffy    |
| 8       | Meow      |
| 3       | Scratch   |
| 5       | Tweet     |
| 4       | Wag       |
+---------+-----------+
(8 rows affected)
+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 7       | Bark      |
| 2       | Fetch     |
| 6       | Fluffy    |
| 1       | Fluffy    |
| 8       | Meow      |
| 3       | Scratch   |
| 5       | Tweet     |
| 4       | Wag       |
+---------+-----------+
(8 rows affected)

We kunnen zien dat de twee Fluffy's in elk resultaat een andere volgorde hebben (we kunnen zien door te kijken naar hun PetId waarden). Dit komt omdat de PetName kolom werd eerst gesorteerd, daarna de PetId sorteerde eventuele duplicaten van de eerste sortering.

Sorteren op verborgen kolommen

U kunt sorteren op kolommen die niet zijn opgenomen in de SELECT lijst.

SELECT PetId, PetName
FROM Pets
ORDER BY DOB DESC;

Resultaat:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 5       | Tweet     |
| 1       | Fluffy    |
| 6       | Fluffy    |
| 4       | Wag       |
| 2       | Fetch     |
| 3       | Scratch   |
| 7       | Bark      |
| 8       | Meow      |
+---------+-----------+

In dit geval kunnen we uit deze resultaten afleiden dat Tweet is het jongste huisdier, en Meow is de oudste. Dit komt omdat we hebben gesorteerd op hun geboortedatum (DOB ) kolom in aflopende volgorde.

Voor de zekerheid, hier is het weer met de DOB kolom opgenomen in de SELECT lijst.

SELECT PetId, PetName, DOB
FROM Pets
ORDER BY DOB DESC;

Resultaat:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 5       | Tweet     | 2020-11-28 |
| 1       | Fluffy    | 2020-11-20 |
| 6       | Fluffy    | 2020-09-17 |
| 4       | Wag       | 2020-03-15 |
| 2       | Fetch     | 2019-08-16 |
| 3       | Scratch   | 2018-10-01 |
| 7       | Bark      | NULL       |
| 8       | Meow      | NULL       |
+---------+-----------+------------+

Eigenlijk kunnen we nu zien dat Meow en Bark NULL . hebben waarden in de DOB kolom. Daarom weten we niet of ze echt ouder of jonger zijn.

Maar dit toont aan dat NULL waarden worden behandeld als de laagst mogelijke waarden. Houd rekening met NULL waarden bij het uitvoeren van zoekopdrachten.

Patroonovereenkomst

U kunt de LIKE . gebruiken operator om patroonherkenning te gebruiken.

SELECT PetId, PetName
FROM Pets
WHERE PetName LIKE 'F%';

Resultaat:

+---------+-----------+
| PetId   | PetName   |
|---------+-----------|
| 1       | Fluffy    |
| 2       | Fetch     |
| 6       | Fluffy    |
+---------+-----------+

In dit voorbeeld zoeken we naar alle huisdieren waarvan de naam begint met de letter F . Het procentteken (% ) is een jokerteken dat overeenkomt met een reeks van nul of meer tekens. Het kan worden gebruikt als voorvoegsel of achtervoegsel, en het kan ook in het midden van een tekenreeks worden gebruikt.

Hier is nog een voorbeeld.

SELECT FirstName, LastName, Email
FROM Owners
WHERE Email LIKE '%@example.%';

Resultaat:

+-------------+------------+-------------------+
| FirstName   | LastName   | Email             |
|-------------+------------+-------------------|
| Homer       | Connery    | [email protected] |
| Bart        | Pitt       | [email protected]  |
+-------------+------------+-------------------+

Selecteer uit een lijst

De IN operator bepaalt of een opgegeven waarde overeenkomt met een waarde in een subquery of een lijst.

Hier is een voorbeeld.

SELECT 
    PetId, 
    PetName, 
    DOB 
FROM Pets
WHERE PetName IN ('Fluffy', 'Bark', 'Wag');

Resultaat:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 4       | Wag       | 2020-03-15 |
| 6       | Fluffy    | 2020-09-17 |
| 7       | Bark      | NULL       |
+---------+-----------+------------+

Subquery's

U kunt de IN . gebruiken operator bij het uitvoeren van een subquery (een query die in een andere query is genest).

Hier is een voorbeeld.

SELECT 
    PetTypeId,
    PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );

Resultaat:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 1           | Bird      |
| 2           | Cat       |
| 3           | Dog       |
+-------------+-----------+

Dit leverde kolommen op uit één tabel (PetTypes ), maar alleen als er minstens één corresponderende rij in een andere tabel was (Pets ) die een overeenkomst had met de PetTypeId kolom.

Om dit verder aan te tonen, wordt hieronder de relevante inhoud van deze twee tabellen weergegeven.

De PetTypes tafel:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 1           | Bird      |
| 2           | Cat       |
| 3           | Dog       |
| 4           | Rabbit    |
+-------------+-----------+

De Pets tafel:

+-------------+-----------+
| PetTypeId   | PetName   |
|-------------+-----------|
| 2           | Fluffy    |
| 3           | Fetch     |
| 2           | Scratch   |
| 3           | Wag       |
| 1           | Tweet     |
| 3           | Fluffy    |
| 3           | Bark      |
| 2           | Meow      |
+-------------+-----------+

We kunnen zien dat de PetTypes tabel bevat een huisdiertype van Rabbit , maar geen van de huisdieren in de Pets tabel is dat type toegewezen (d.w.z. er is geen waarde van 4 in de Pets.PetTypeId kolom).

Zie 12 veelgebruikte SQL-operators en deze lijst met SQL-operators voor meer informatie over operators in SQL.

Doe mee

Het is discutabel of SQL-joins worden beschouwd als "basis SQL-query's", maar ik zal hier toch een join opnemen.

Dus om dit artikel af te ronden, hier is een voorbeeld van een inner join.

SELECT 
    p.PetName,
    pt.PetType
FROM Pets p
INNER JOIN PetTypes pt
ON p.PetTypeId = pt.PetTypeId;

Resultaat:

+-----------+-----------+
| PetName   | PetType   |
|-----------+-----------|
| Fluffy    | Cat       |
| Fetch     | Dog       |
| Scratch   | Cat       |
| Wag       | Dog       |
| Tweet     | Bird      |
| Fluffy    | Dog       |
| Bark      | Dog       |
| Meow      | Cat       |
+-----------+-----------+

In dit geval gebruikten we een INNER JOIN om alle namen van huisdieren te retourneren met hun respectieve huisdiertypes. We gebruikten de ON om het predikaat op te geven dat moet worden geëvalueerd voor elk paar samengevoegde rijen. In dit geval is de p.PetTypeId kolom is een externe sleutel van de pt.PetTypeId kolom, de primaire sleutel voor de PetTypes tafel.

In dit voorbeeld heb ik ook aliassen op de tabellen gebruikt, wat hielp om de code mooi en beknopt te houden.

Zie mijn SQL Joins-zelfstudie voor meer voorbeelden van joins.


  1. Hoe ik een installatieprogramma voor de website kan maken. PHP mysql

  2. Stopwoorden en Stoplist gebruiken om SQL Server Full-Text Search (FTS) te verbeteren

  3. Heterogene databasereplicatie configureren – SQL Server naar Oracle

  4. TNSPING OK maar sqlplus geeft ORA-12154?