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');