Database
 sql >> Database >  >> RDS >> Database

Query SQL di base

Questo articolo contiene esempi di query SQL di base che i principianti possono utilizzare per recuperare i dati dai propri database.

Base SELECT Interroga

Ecco un esempio della query forse più comunemente usata in SQL:

SELECT * 
FROM Pets;

Risultato:

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

Questa query seleziona tutte le righe e tutte le colonne da Pets tavolo. Questo perché l'asterisco (* ) il carattere jolly seleziona tutte le colonne.

Seleziona i nomi delle colonne

Per motivi di prestazioni, di solito è meglio evitare di selezionare tutte le colonne a meno che non siano realmente necessarie. Di solito è meglio selezionare solo le colonne che ti servono.

Ecco un esempio.

SELECT PetId, PetName
FROM Pets;

Risultato:

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

Filtra i risultati

Puoi aggiungere un WHERE clausola per filtrare i risultati solo nelle righe che ti servono.

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

Risultato:

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

Ecco un altro esempio di filtraggio dei risultati. Questa volta utilizziamo l'operatore maggiore di (> ) per filtrarlo per data.

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

Risultato:

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

Puoi scambiare l'operatore maggiore di con altri operatori, come l'operatore maggiore o uguale a (>= ), minore di operatore (< ), o minore o uguale all'operatore (<= ).

Puoi anche usare il BETWEEN per filtrare i risultati in un intervallo specifico (ad es. tra due date).

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

Risultato:

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

Ordina i risultati

Puoi aggiungere un ORDER BY clausola per ordinare le righe restituite dalla query.

Ordine Crescente

Usa il ASC parola chiave per ordinare i risultati in ordine crescente. Questo è il valore predefinito, quindi puoi anche omettere questa parola chiave se desideri che i risultati siano in ordine crescente.

SELECT PetId, PetName
FROM Pets
ORDER BY PetName ASC;

Oppure:

SELECT PetId, PetName
FROM Pets
ORDER BY PetName;

Risultato:

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

Ordine decrescente

Usa il DESC parola chiave per ordinare i risultati in ordine decrescente.

SELECT PetId, PetName
FROM Pets
ORDER BY PetName DESC;

Risultato:

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

Ordina per più colonne

Puoi ordinare in base a più colonne elencando ciascuna colonna, separata da una virgola.

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

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

Risultato:

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

Possiamo vedere che i due Fluffy sono un ordine diverso in ogni risultato (lo possiamo dire guardando il loro PetId valori). Questo perché il PetName prima è stata ordinata la colonna, quindi PetId ordinato eventuali duplicati dal primo ordinamento.

Ordina per colonne nascoste

Puoi ordinare per colonne che non sono incluse in SELECT elenco.

SELECT PetId, PetName
FROM Pets
ORDER BY DOB DESC;

Risultato:

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

In questo caso, possiamo dedurre da questi risultati che Tweet è l'animale più giovane e Meow è il più vecchio. Questo perché abbiamo ordinato la loro data di nascita (DOB ) colonna in ordine decrescente.

Per sicurezza, eccolo di nuovo con il DOB colonna inclusa in SELECT elenco.

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

Risultato:

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

In realtà, ora possiamo vedere che Meow e Bark hanno NULL valori nel DOB colonna. Pertanto, non sappiamo se siano effettivamente più grandi o più giovani.

Ma questo dimostra che NULL i valori sono trattati come i valori più bassi possibili. Fai attenzione a NULL valori durante l'esecuzione di query.

Corrispondenza del modello

Puoi usare il LIKE operatore per utilizzare la corrispondenza del modello.

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

Risultato:

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

In questo esempio, cerchiamo tutti gli animali domestici i cui nomi iniziano con la lettera F . Il segno di percentuale (% ) è un carattere jolly che corrisponde a qualsiasi stringa di zero o più caratteri. Può essere utilizzato sia come prefisso che come suffisso e può essere utilizzato anche nel mezzo di una stringa.

Ecco un altro esempio.

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

Risultato:

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

Seleziona da un elenco

Il IN determina se un valore specificato corrisponde a qualsiasi valore in una sottoquery o in un elenco.

Ecco un esempio.

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

Risultato:

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

Subquery

Puoi usare il IN operatore durante l'esecuzione di una sottoquery (una query annidata all'interno di un'altra query).

Ecco un esempio.

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

Risultato:

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

Questo ha restituito colonne da una tabella (PetTypes ), ma solo quando c'era almeno una riga corrispondente in un'altra tabella (Pets ) che aveva una corrispondenza con PetTypeId colonna.

Per dimostrarlo ulteriormente, il contenuto rilevante di queste due tabelle è mostrato di seguito.

I PetTypes tabella:

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

Gli Pets tabella:

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

Possiamo vedere che i PetTypes la tabella contiene un tipo di animale domestico di Rabbit , ma nessuno degli animali domestici in Pets alla tabella è stato assegnato quel tipo (ovvero non esiste un valore di 4 nel Pets.PetTypeId colonna).

Vedere 12 operatori SQL comunemente usati e questo elenco di operatori SQL per ulteriori informazioni sugli operatori in SQL.

Unisciti

È discutibile se i join SQL siano considerati "query SQL di base", ma includerò comunque un join qui.

Quindi, per completare questo articolo, ecco un esempio di inner join.

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

Risultato:

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

In questo caso, abbiamo utilizzato un INNER JOIN per restituire tutti i nomi di animali domestici con i rispettivi tipi di animali domestici. Abbiamo usato ON clausola per specificare il predicato da valutare per ogni coppia di righe unite. In questo caso, il p.PetTypeId column è una chiave esterna di pt.PetTypeId colonna, che è la chiave primaria per i PetTypes tabella.

In questo esempio, ho anche usato gli alias sulle tabelle, il che ha aiutato a mantenere il codice piacevole e conciso.

Vedi il mio tutorial sui join SQL per altri esempi di join.