sql >> Databasteknik >  >> RDS >> Database

Grundläggande SQL-frågor

Den här artikeln innehåller exempel på grundläggande SQL-frågor som nybörjare kan använda för att hämta data från sina databaser.

Grundläggande SELECT Fråga

Här är ett exempel på den kanske mest använda frågan i SQL:

SELECT * 
FROM Pets;

Resultat:

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

Den här frågan väljer alla rader och alla kolumner från Pets tabell. Detta beror på att asterisken (* ) jokertecken väljer alla kolumner.

Välj kolumnnamn

Av prestandaskäl är det vanligtvis bäst att undvika att välja alla kolumner om du inte verkligen behöver dem. Det är vanligtvis bättre att välja just de kolumner du behöver.

Här är ett exempel.

SELECT PetId, PetName
FROM Pets;

Resultat:

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

Filtrera resultaten

Du kan lägga till en WHERE för att filtrera resultaten till just de rader du behöver.

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

Resultat:

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

Här är ett annat exempel på filtrering av resultaten. Den här gången använder vi operatorn större än (> ) för att filtrera den efter datum.

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

Resultat:

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

Du kan byta ut operatorn större än till andra operatorer, till exempel operatorn större än eller lika med operatorn (>= ), mindre än operatorn (< ), eller mindre än eller lika med operatorn (<= ).

Du kan också använda BETWEEN operatorn för att filtrera resultaten till ett specifikt intervall (t.ex. mellan två datum).

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

Resultat:

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

Sortera resultaten

Du kan lägga till en ORDER BY sats för att sortera raderna som returneras av frågan.

Stigande ordning

Använd ASC nyckelord för att sortera resultaten i stigande ordning. Detta är standardvärdet, så du kan också utelämna detta nyckelord om du vill ha resultaten i stigande ordning.

SELECT PetId, PetName
FROM Pets
ORDER BY PetName ASC;

Eller:

SELECT PetId, PetName
FROM Pets
ORDER BY PetName;

Resultat:

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

Fallande ordning

Använd DESC nyckelord för att sortera resultaten i fallande ordning.

SELECT PetId, PetName
FROM Pets
ORDER BY PetName DESC;

Resultat:

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

Sortera efter flera kolumner

Du kan sortera efter flera kolumner genom att lista varje kolumn, separerade med kommatecken.

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

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

Resultat:

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

Vi kan se att de två Fluffys har olika ordning i varje resultat (vi kan se genom att titta på deras PetId värden). Detta beror på att PetName kolumnen sorterades först, sedan PetId sorterade eventuella dubbletter från den första sorteringen.

Sortera efter dolda kolumner

Du kan sortera efter kolumner som inte ingår i SELECT lista.

SELECT PetId, PetName
FROM Pets
ORDER BY DOB DESC;

Resultat:

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

I det här fallet kan vi från dessa resultat dra slutsatsen att Tweet är det yngsta husdjuret och Meow är den äldsta. Detta beror på att vi sorterade efter deras födelsedatum (DOB ) kolumn i fallande ordning.

Bara för att vara säker, här är den igen med DOB kolumnen som ingår i SELECT lista.

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

Resultat:

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

Faktiskt kan vi nu se att Meow och Bark har NULL värden i DOB kolumn. Därför vet vi inte om de faktiskt är äldre eller yngre.

Men detta visar att NULL värden behandlas som lägsta möjliga värden. Var uppmärksam på NULL värden när du kör frågor.

Mönstermatchning

Du kan använda LIKE operatör för att använda mönstermatchning.

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

Resultat:

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

I det här exemplet söker vi efter alla husdjur vars namn börjar med bokstaven F . Procenttecknet (% ) är ett jokertecken som matchar en sträng med noll eller fler tecken. Det kan användas som antingen ett prefix eller ett suffix, och det kan också användas i mitten av en sträng.

Här är ett annat exempel.

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

Resultat:

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

Välj från en lista

IN operatorn bestämmer om ett angivet värde matchar något värde i en underfråga eller en lista.

Här är ett exempel.

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

Resultat:

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

Undersökningar

Du kan använda IN operatorn när du utför en underfråga (en fråga kapslad i en annan fråga).

Här är ett exempel.

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

Resultat:

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

Detta returnerade kolumner från en tabell (PetTypes ), men bara när det fanns minst en motsvarande rad i en annan tabell (Pets ) som hade ett matchande PetTypeId kolumn.

För att demonstrera detta ytterligare visas det relevanta innehållet i dessa två tabeller nedan.

PetTypes tabell:

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

Pets tabell:

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

Vi kan se att PetTypes Tabellen innehåller en husdjurstyp av Rabbit , men inget av husdjuren i Pets tabellen har tilldelats den typen (dvs. det finns inget värde på 4 i Pets.PetTypeId kolumn).

Se 12 vanliga SQL-operatorer och den här listan över SQL-operatorer för mer information om operatorer i SQL.

Gå med

Det kan diskuteras om SQL-kopplingar anses vara "grundläggande SQL-frågor", men jag kommer att inkludera en koppling här ändå.

Så för att avsluta den här artikeln, här är ett exempel på en inre koppling.

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

Resultat:

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

I det här fallet använde vi en INNER JOIN att returnera alla husdjursnamn med sina respektive husdjurstyper. Vi använde ON sats för att specificera predikatet som ska utvärderas för varje par av sammanfogade rader. I det här fallet, p.PetTypeId kolumnen är en främmande nyckel för pt.PetTypeId kolumn, som är den primära nyckeln för PetTypes bord.

I det här exemplet använde jag även alias på tabellerna, vilket hjälpte till att hålla koden snygg och koncis.

Se min självstudie för SQL Joins för fler exempel på joins.


  1. Infoga flera rader med sekvens i Oracle

  2. Ny spårningsflagga för att fixa tabellvariabel prestanda

  3. AWS RDS:"SQLSTATE[22001] – Data för lång för kolumn" med MariaDB 10.2

  4. SQL - Fråga för att få serverns IP-adress