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

SQL SELECT per principianti

Il SELECT istruzione è quasi senza dubbio l'istruzione più comunemente usata in SQL.

Il SELECT istruzione viene utilizzata per recuperare i dati dal database. Puoi specificare quali righe desideri vengano restituite e quali colonne.

Esempio

Ecco un esempio per dimostrare il SELECT dichiarazione.

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

In questo esempio abbiamo utilizzato l'asterisco (* ) carattere jolly per restituire tutte le colonne. Abbiamo anche usato il FROM clausola per specificare da quale tabella ottenere i dati.

Quindi questa query restituisce tutte le righe e tutte le colonne da Pets tabella.

Specifica le colonne

Puoi specificare le colonne che vorresti fossero restituite.

A tale scopo, sostituisci il carattere jolly asterisco con i nomi delle colonne, ciascuno separato da una virgola, nell'ordine in cui desideri che vengano restituiti.

SELECT PetId, PetName, DOB 
FROM Pets;

Risultato:

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

È generalmente considerata una buona pratica farlo in questo modo e restituire solo le colonne di cui hai effettivamente bisogno. L'utilizzo del carattere jolly asterisco per restituire tutte le colonne può avere un impatto negativo sulle prestazioni, soprattutto nei database più grandi.

Specifica le righe

Esistono molti modi per filtrare i risultati solo nelle righe che ti interessano. Il modo più comune è utilizzare WHERE clausola. Questa clausola consente di specificare una condizione che una riga deve soddisfare per essere qualificata.

Ecco un esempio da dimostrare.

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

Risultato:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 6       | Fluffy    | 2020-09-17 |
+---------+-----------+------------+

Nel nostro caso, c'erano due righe che soddisfacevano la nostra condizione di ricerca.

La nostra condizione di ricerca utilizza l'operatore uguale (= ) per specificare che il valore del PetName la colonna deve corrispondere al valore specificato (Fluffy ) esattamente.

Ci sono molti altri operatori che puoi utilizzare nelle tue condizioni di ricerca. Ad esempio, potresti usare il LIKE operatore di restituire animali domestici il cui nome inizia con F o Fluff o altro.

Puoi aggiungere più condizioni a WHERE clausola utilizzando operatori come AND e OR operatori.

Ecco un esempio.

SELECT PetId, PetName, DOB 
FROM Pets
WHERE PetName = 'Fluffy'
OR DOB < '2020-01-01';

Risultato:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 2       | Fetch     | 2019-08-16 |
| 3       | Scratch   | 2018-10-01 |
| 6       | Fluffy    | 2020-09-17 |
+---------+-----------+------------+

In questo esempio abbiamo restituito tutte le righe in cui il nome dell'animale domestico è Fluffy o dove la data di nascita dell'animale domestico (specificata nel DOB colonna) è inferiore a una certa data. Abbiamo utilizzato l'operatore less than (< ) per specificarlo.

Restituzione di dati non di tabella

Il SELECT L'istruzione può essere utilizzata anche per restituire dati che non sono archiviati in una tabella. Ad esempio, è perfettamente legale farlo:

SELECT 'Hey there!';

Risultato:

+--------------------+
| (No column name)   |
|--------------------|
| Hey there!         |
+--------------------+

Si noti che quando lo facciamo, la colonna non ha nome. Potremmo usare un alias per dare un nome al campo risultante.

Di seguito sono riportati alcuni altri esempi di selezione di dati non di tabella e fornitura di un alias a ciascun campo restituito:

SELECT 
    2 + 3 AS "2 + 3",
    'Fluffy' + ' ' + 'Smith' AS FullName,
    SYSDATETIME() AS "Date/time";

Risultato:

+---------+--------------+-----------------------------+
| 2 + 3   | FullName     | Date/time                   |
|---------+--------------+-----------------------------|
| 5       | Fluffy Smith | 2020-12-04 23:58:55.8483734 |
+---------+--------------+-----------------------------+

Ecco una rapida carrellata:

  • La prima colonna ha semplicemente aggiunto due numeri.
  • La seconda colonna concatenava tre stringhe (incluso uno spazio). Se necessario, puoi anche concatenare stringhe con numeri.
  • La terza colonna utilizzava SYSDATETIME() funzione per restituire la data e l'ora correnti. Questa funzione è disponibile in SQL Server. Altri DBMS hanno le proprie funzioni di data e ora. Vedere Funzioni di data/ora di SQLite, Funzioni di data/ora di SQL Server e Funzioni di data/ora di PostgreSQL per un elenco delle funzioni di data e ora disponibili in quei DBMS.

Subquery

È possibile avere più SELECT dichiarazioni in un'unica query. Possiamo farlo usando una sottoquery.

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

Risultato:

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

In questo esempio, abbiamo utilizzato IN operatore per specificare una sottoquery. Quella sottoquery ha selezionato i dati da un'altra tabella e il IN l'operatore lo ha ricollegato alla query esterna.

Ordinare i risultati

Puoi utilizzare il ORDER BY clausola per ordinare i risultati.

Ad esempio, potremmo ordinare i risultati precedenti in base a PetTypeId colonna in ordine decrescente:

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

Risultato:

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

Vedi SQL ORDER BY Clausola per principianti per ulteriori esempi e una spiegazione dettagliata.

Più avanzato SELECT Dichiarazioni

Il SELECT statement è un'istruzione molto semplice, ma può essere utilizzata per creare query molto complesse.

Ecco una query leggermente più complessa delle precedenti.

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;

Risultato:

+-----------+---------+
| PetType   | Count   |
|-----------+---------|
| Dog       | 4       |
| Cat       | 3       |
| Bird      | 1       |
+-----------+---------+

Nel mondo delle query SQL, questo è ancora piuttosto semplice, tuttavia contiene molti degli elementi spesso visti nelle query più complesse.

Ad esempio, questa query utilizza un join per recuperare i dati da più tabelle. Utilizza anche il GROUP BY clausola per dividere le righe in gruppi.

Vedi SQL GROUP BY Clausola per principianti per ulteriori esempi di GROUP BY clausola.

Consulta l'esercitazione sui join SQL per vedere come recuperare i dati da più tabelle e restituirli come un unico set di risultati.

Il SELECT INTO Dichiarazione

Alcuni DBMS supportano il SELECT INTO dichiarazione. Questo è leggermente diverso dagli esempi precedenti, in quanto influisce sui dati nel database.

Il SELECT INTO istruzione crea una nuova tabella e inserisce i dati in essa da un'altra tabella.

Fondamentalmente, funziona così:

SELECT * INTO Table2
FROM Table1;

In questo esempio, creiamo una nuova tabella chiamata Table2 e inserisci tutti i dati da Table1 dentro. Table2 avrà la stessa definizione di Table1 .

Vedi SQL SELECT INTO Dichiarazione per ulteriori esempi.

Come ho accennato, non tutti i DBMS supportano questa affermazione. Se il tuo DBMS non supporta il SELECT INTO istruzione, prova a utilizzare CREATE TABLE ... AS SELECT affermazione invece.

Tali istruzioni creano una nuova tabella come parte della loro operazione. Per inserire dati in una tabella già esistente, prova a utilizzare INSERT INTO ... SELECT affermazione invece.