Finora abbiamo creato un database, aggiunto due tabelle e inserito dati in entrambe le tabelle. Ora vedremo come recuperare quei dati. Ma non solo recupera i dati, ma per interrogare il database per esso.
SQL sta per Linguaggio di query strutturato . È la Query bit che rende SQL così potente. SQL è un linguaggio che consente di eseguire query contro il tuo database. Ti permette di interrogare il database per i dati desiderati.
L'SQL SELECT
Dichiarazione
Quando si tratta di interrogare il tuo database MySQL, SQL SELECT
dichiarazione rende tutto possibile. È probabile che questa sia l'istruzione SQL utilizzata più di frequente quando si lavora con MySQL. Il SELECT
istruzione ti consente di descrivere a MySQL esattamente quali dati vuoi che recuperi.
Considera la seguente istruzione SQL:
SELECT * FROM Fruit;
Ecco il risultato:
Questo è il SELECT
affermazione nella sua forma più semplice. L'istruzione SQL precedente recupera tutti i record da
Fruit
tabella.
L'asterisco (*
) dice a MySQL di restituire tutte le colonne. Questo ci fa risparmiare tempo e fatica. Senza questo avremmo bisogno di scrivere i nomi di tutte le colonne che vorremmo avere restituito.
Detto questo, puoi anche dire a MySQL di restituire solo le colonne che desideri restituire. Questo viene fatto nominando solo le colonne che vorresti fossero restituite. In questo modo:
SELECT FruitId, FruitName FROM Fruit;
Ecco il risultato:
L'istruzione SQL precedente seleziona FruitId e NomeFrutta colonne da Frutta tabella.
In questo modo puoi ridurre il disordine in modo da visualizzare solo le colonne che ti interessano. Può anche aumentare le prestazioni, perché MySQL (e qualsiasi applicazione che utilizzi) non ha bisogno di utilizzare risorse preziose per restituire dati non necessari.
Anche in questo caso, questa query recupera tutto record dalla tabella — MySQL restituirà tutti i record se non diversamente specificato.
Il WHERE
Clausola
Puoi aggiungere il WHERE
clausola per restringere il set di risultati solo ai record che ti interessano. In questo modo:
SELECT * FROM Fruit WHERE UnitId = 1;
Risultato:
La query precedente restituisce tutti i record da
Fruit
tabella in cui
UnitId
la colonna ha un valore di 1
.
Subquery:SELECT
nidificato Dichiarazioni
E se non conoscessimo
UnitId
? E se sapessimo solo cercare quei record con un nome di unità di Piece
?
Facile! Potremmo riscrivere l'esempio sopra per usare un SELECT
annidato istruzione (altrimenti nota come subquery ) che interroga un'altra tabella (le
Unità
tavolo). In questo modo potremo utilizzare l'unità effettiva nome (anziché il suo ID) perché la seconda tabella contiene questo in UnitName
campo:
SELECT * FROM Fruit WHERE UnitId = (SELECT UnitId FROM Units WHERE UnitName = 'Piece');
Risultato:
Qui utilizziamo un SELECT
annidato istruzione (ovvero un SELECT
istruzione all'interno di un SELECT
istruzione) per interrogare le
Unità
tabella per
UnitId
del record che contiene Piece
come suo
UnitName
valore. Possiamo farlo perché
Fruit.UnitId
colonna è una chiave esterna per
Units.UnitId
colonna.
Se sei interessato, ecco altri esempi di sottoquery.
Utilizzo di un JOIN
SQL
Facendo un ulteriore passo avanti, potremmo riscrivere il nostro SELECT
annidato dichiarazione in un INNER JOIN
.
In SQL, un JOIN
consente di eseguire query su più tabelle che condividono dati. Nel nostro caso, entrambe le tabelle condividono UnitId
quindi potresti dire che sono "uniti" da questo campo.
Esistono diversi tipi di join in SQL, tuttavia, siamo principalmente interessati a INNER JOIN
per ora.
Il INNER JOIN
la sintassi va così:
SELECT * FROM table_name_1 INNER JOIN table_name_2 ON table_name_1.column_name = table_name_2.column_name
Quindi potremmo riscrivere la nostra sottoquery dall'esempio precedente nel seguente:
SELECT Fruit.* FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId WHERE Units.UnitName = 'Piece';
Risultato:
Abbiamo specificato Fruit.*
anziché solo *
perché volevamo solo restituire tutte le colonne da
Frutta
tavolo. Se avessimo usato *
, la query avrebbe restituito tutte le colonne di entrambe le tabelle.
Controlla anche il LEFT JOIN
e RIGHT JOIN
per vedere come puoi ottenere dati diversi a seconda del tipo di join.
Subquery vs JOIN
?
Ora che hai visto due metodi per ottenere lo stesso risultato, probabilmente ti starai chiedendo quale sia il migliore?
Le sottoquery tendono ad essere più leggibili (e forse più facili da comprendere), il che può renderle più facili da comprendere per i principianti.
Tuttavia, molti programmatori SQL trovano JOIN
s più efficiente e con prestazioni migliori. Se riscontri problemi di prestazioni con le tue query o un'applicazione, prova a convertire le sottoquery in JOIN
so viceversa (in alcuni casi una sottoquery potrebbe funzionare meglio).
Inoltre, potrebbero esserci casi in cui una sottoquery è la tua unica opzione, quindi anche questa è una considerazione.
Più operatori
Finora le nostre query contenevano tutte un segno di uguale (=
). Questo è chiamato un operatore . Più precisamente è un operatore di confronto in quanto confronta un'espressione con un'altra.
Ci sono molti altri operatori che puoi utilizzare nelle tue query. Questi possono aiutare notevolmente a restringere il set di risultati solo ai record necessari. Non è raro che un database contenga milioni di record. Anche se hai solo migliaia di record, cercare di trovare un record (o anche solo una manciata) tra migliaia sarebbe un compito molto arduo se non avessi questi operatori a tua disposizione.
Ecco alcuni degli operatori SQL più comunemente usati.
Il >
Operatore
Puoi usare il >
operatore per selezionare i dati maggiori di un dato valore.
SELECT * FROM Fruit WHERE Inventory > 10;
Il <
Operatore
Puoi usare il <
operatore per selezionare i dati meno di un dato valore.
SELECT * FROM Fruit WHERE Inventory < 10;
Il <>
Operatore
Puoi usare il <>
operatore per selezionare dati inferiori a e maggiore di un dato valore.
SELECT * FROM Fruit WHERE Inventory <> 10;
Il >=
Operatore
Puoi usare il >=
per selezionare dati maggiori o uguali a un determinato valore.
SELECT * FROM Fruit WHERE Inventory >= 10;
Il <=
Operatore
Puoi usare il <=
per selezionare dati inferiori o uguali a un determinato valore.
SELECT * FROM Fruit WHERE Inventory <= 10;
Il AND
Operatore
Puoi aggiungere un AND
operatore al WHERE
clausola per limitare la tua selezione ai soli record che soddisfano due condizioni (o più se includi più AND
operatori).
Ecco un esempio:
SELECT * FROM Fruit WHERE Inventory > 10 AND DateEntered > '2015-01-15';
Il OR
Operatore
Puoi usare un OR
operatore per ampliare la selezione a più di un criterio. Come suggerisce il nome, il OR
La clausola consente di selezionare i dati in cui il criterio è questo O Quello. Quindi il AND
operatore limiti la tua selezione e il OR
l'operatore si allarga esso.
Ecco un esempio:
SELECT * FROM Fruit WHERE UnitId = 1 OR UnitId = 2;
Il BETWEEN
Operatore
Usa il BETWEEN
per selezionare i dati compresi tra due valori dati.
SELECT * FROM Fruit WHERE DateEntered BETWEEN '2015-01-25' AND '2015-02-25';
Il NOT
Operatore
Usa il NOT
operatore per selezionare i dati che non sono equivalente a una data condizione.
SELECT * FROM Fruit WHERE NOT (FruitName = 'Apple');