Ogni sviluppatore web deve conoscere SQL per scrivere query di database. E, sebbene phpMyAdmin non sia stato cancellato, è spesso necessario sporcarsi le mani per scrivere SQL di basso livello.
Ecco perché abbiamo preparato un breve tour delle basi di SQL. Iniziamo!
1. Crea una tabella
L'istruzione CREATE TABLE viene utilizzata per creare tabelle. Gli argomenti devono essere il nome delle colonne, nonché i relativi tipi di dati.
Creiamo una semplice tabella denominata mese. Si compone di 3 colonne:
- id– Numero del mese dell'anno civile (numero intero).
- nome– Nome del mese (stringa, massimo 10 caratteri).
- giorni– Numero di giorni in questo mese (numero intero).
Ecco come sarebbe la query SQL corrispondente:
CREATE TABLE mesi (id int, nome varchar(10), giorni int);
Inoltre, durante la creazione di tabelle, è consigliabile aggiungere una chiave primaria per una delle colonne. Ciò manterrà i record univoci e accelererà le query selezionate. Sia nel nostro caso il nome del mese univoco (colonna nome)
CREATE TABLE mesi (id int, nome varchar(10), giorni int, PRIMARY KEY (nome));
Tipo di dati | Descrizione |
---|---|
DATA | Valori data |
APPUNTAMENTO | Valori di data e ora con precisione al minuto |
VOLTA | Valori temporali |
2. Inserisci le righe
Ora riempiamo la nostra tabella mesi informazioni utili. L'aggiunta di record a una tabella viene eseguita tramite l'istruzione INSERT. Ci sono due modi per scrivere questa istruzione.
Il primo modo è non specificare i nomi delle colonne in cui verranno inseriti i dati, ma specificare solo i valori.
Questa notazione è semplice, ma non sicura, perché non vi è alcuna garanzia che man mano che il progetto si espande e la tabella viene modificata, le colonne saranno nello stesso ordine di prima. Un modo più sicuro (e allo stesso tempo più macchinoso) di scrivere un'istruzione INSERT richiede di specificare sia i valori che l'ordine delle colonne:
Ecco il primo valore nell'elenco I VALORI corrisponde al primo nome di colonna specificato e così via.
3. Estrazione dei dati dalle tabelle
L'istruzione SELECT è la nostra migliore amica quando vogliamo recuperare i dati da un database. Viene utilizzato molto spesso, quindi leggere attentamente questa sezione.
L'uso più semplice dell'istruzione SELECT è una query che restituisce tutte le colonne e le righe di una tabella (ad esempio, una tabella denominata caratteri):
SELEZIONA * DA "personaggi"
Il carattere asterisco (*) significa che vogliamo ottenere i dati da tutte le colonne. Poiché i database SQL in genere sono costituiti da più di una tabella, è richiesta la parola chiave FROM, seguita da uno spazio seguito dal nome della tabella.
A volte non vogliamo ottenere dati da non tutte le colonne di una tabella. Per fare questo, invece di un asterisco (*), dobbiamo scrivere i nomi delle colonne desiderate separate da virgole.
SELECT id, nome FROM mese
Inoltre, in molti casi vogliamo che i risultati vengano ordinati in un ordine specifico. In SQL, lo facciamo con ORDER BY . Può richiedere un modificatore opzionale - ASC (predefinito) per ordinare in ordine crescente o DESC per ordinare in ordine decrescente:
SELECT id, nome FROM mese ORDER BY nome DESC
Quando si utilizza ORDER BY, assicurarsi che sia l'ultimo nell'istruzione SELECT. In caso contrario, verrà emesso un messaggio di errore.
4. Filtraggio dei dati
Hai imparato a selezionare colonne specifiche da un database utilizzando una query SQL, ma cosa succede se vogliamo recuperare anche righe specifiche? La clausola WHERE viene in soccorso qui, permettendoci di filtrare i dati in base a una condizione.
In questa query, selezioniamo solo quei mesi dalla tabella mese superiori a 30 giorni utilizzando l'operatore maggiore di (>).
SELECT id, nome FROM mese WHERE giorni > 30
5. Filtraggio avanzato dei dati. Operatori AND e OR
In precedenza, filtravamo i dati utilizzando un singolo criterio. Per filtrare i dati più complessi, puoi utilizzare gli operatori AND e OR e gli operatori di confronto (=,<,>,<=,>=,<>).
Qui abbiamo una tabella contenente i quattro album più venduti di tutti i tempi. Scegliamo quelli classificati come rock e con meno di 50 milioni di copie vendute. Questo può essere fatto facilmente inserendo un operatore AND tra queste due condizioni.
SELECT * FROM album WHERE genere = "rock" AND vendite_in_milioni<= 50 ORDER BY released
6. Dentro/Tra/Mi piace
WHERE supporta anche diversi comandi speciali, che consentono di controllare rapidamente le query più comunemente utilizzate. Eccoli:
- IN - utilizzato per specificare un intervallo di condizioni, ciascuna delle quali può essere soddisfatta
- BETWEEN - Controlla se il valore è compreso nell'intervallo specificato
- LIKE: ricerca determinati modelli
Ad esempio, se vogliamo selezionare gli album con pop e anima musica, possiamo usare IN("value1","value2") .
SELEZIONA * DA album WHERE genere IN ("pop","soul");
Se volessimo avere tutti gli album pubblicati tra il 1975 e il 1985, scriveremmo:
SELEZIONA * DAGLI album DOVE usciti TRA IL 1975 E IL 1985;
7. Funzioni
SQL è pieno zeppo di funzioni che fanno ogni sorta di cose utili. Ecco alcuni dei più comunemente usati:
- COUNT() - restituisce il numero di righe
- SUM() - restituisce la somma totale di una colonna numerica
- AVG() - restituisce il valore medio da un insieme di valori
- MIN() / MAX() - Ottiene il valore minimo/massimo da una colonna
Per ottenere l'anno più recente nella nostra tabella, dobbiamo scrivere la seguente query SQL:
SELEZIONA MAX (rilasciato) DA album;
8. Sottoquery
Nel paragrafo precedente, abbiamo imparato come eseguire semplici calcoli con i dati. Se vogliamo utilizzare il risultato di questi calcoli, non possiamo fare a meno delle query nidificate. Diciamo che vogliamo produrre artista, album e Anno di pubblicazione per l'album più vecchio in classifica.
Sappiamo come ottenere queste colonne specifiche:
SELEZIONA artista, album, pubblicato DA album;
Sappiamo anche come ottenere il primo anno:
SELEZIONA MIN (rilasciato) DA album;
Tutto ciò che serve ora è combinare le due query con un WHERE:
SELECT artista,album,rilasciato FROM album WHERE rilasciato = (SELECT MIN(rilasciato) FROM album);
9. Unione di tabelle
In database più complessi, ci sono più tabelle correlate tra loro. Ad esempio, di seguito sono riportate due tabelle sui videogiochi ( videogiochi) e sviluppatori di videogiochi ( game_developers).
Tavolo videogiochi c'è una colonna per sviluppatori ( ID_sviluppatore), ma contiene un numero intero, non il nome dello sviluppatore. Questo numero è un identificatore ( id) dello sviluppatore corrispondente dalla tabella degli sviluppatori di giochi ( game_developers) collegando logicamente le due liste, permettendoci di utilizzare contemporaneamente le informazioni memorizzate in entrambe.
Se vogliamo creare una query che restituisca tutto ciò che dobbiamo sapere sui giochi, possiamo utilizzare un INNER JOIN per collegare le colonne di entrambe le tabelle.
SELECT video_games.name, video_games.genre, game_developers.name, game_developers.country FROM video_games INNER JOIN game_developers ON video_games.developer_id = game_developers.id;
Questo è il tipo di JOIN più semplice e più comune. Ci sono molte altre opzioni, ma si applicano a casi meno frequenti.
10. Alias
Se guardi l'esempio precedente, noterai che ci sono due colonne chiamate nome. Questo crea confusione, quindi impostiamo un alias su una delle colonne ripetute, ad esempio, nome dal tavolo game_developers verrà chiamato sviluppatore.
Possiamo anche abbreviare la query aliasando i nomi delle tabelle: videogiochi chiamiamo Giochi, game_developers - sviluppatori:
SELECT games.name, games.genre, devs.name AS developer, devs.country FROM video_games AS games INNER JOIN game_developers AS devs ON games.developer_id = devs.id;
11. Aggiornamento dei dati
Spesso abbiamo bisogno di modificare i dati in alcune righe. In SQL, questo viene fatto con l'istruzione UPDATE. L'istruzione UPDATE è composta da:
- La tabella contenente il valore di sostituzione;
- Nomi delle colonne e loro nuovi valori;
- Le righe selezionate con WHERE che vogliamo aggiornare. Se ciò non viene fatto, tutte le righe nella tabella cambieranno.
Di seguito la tabella serie TV con serie con la loro valutazione. Tuttavia, un piccolo errore si è insinuato nella tabella: sebbene la serie Game of Thrones ed è descritta come una commedia, in realtà non lo è. Risolviamo questo problema!
dati tabella serie_tv UPDATE serie_tv SET genere = "dramma" WHERE id = 2;12. Cancellazione dei dati
L'eliminazione di una riga di tabella con SQL è un processo molto semplice. Tutto quello che devi fare è selezionare la tabella e la riga che desideri eliminare. Rimuoviamo l'ultima riga nella tabella dall'esempio precedente serie TV. Questo viene fatto usando l'istruzione >DELETE.
DELETE FROM tv_series WHERE id = 4
Fai attenzione quando scrivi l'istruzione DELETE e assicurati che la clausola WHERE sia presente, altrimenti tutte le righe della tabella verranno cancellate!
13. Eliminazione di una tabella
Se vogliamo rimuovere tutte le righe, ma lasciare la tabella stessa, utilizzare il comando TRUNCATE:
TRUNCATE TABLE nome_tabella;
Nel caso in cui vogliamo davvero eliminare sia i dati che la tabella stessa, il comando DROP tornerà utile:
DROP TABLE nome_tabella;
Stai molto attento con questi comandi. Non possono essere annullati!/p>
Questo conclude il nostro tutorial SQL! Non abbiamo coperto molto, ma quello che sai già dovrebbe essere sufficiente per darti alcune abilità pratiche nella tua carriera web.
Come posso conoscere il numero di modelli di PC prodotti da un determinato fornitore? Come determinare il valore medio del prezzo dei computer con le stesse caratteristiche tecniche? Queste e molte altre domande relative ad alcune informazioni statistiche possono essere risolte con l'aiuto di funzioni di riepilogo (aggregazione).. Lo standard fornisce le seguenti funzioni aggregate:
Tutte queste funzioni restituiscono un singolo valore. Allo stesso tempo, le funzioni CONTE, MIN e MASSIMO si applicano a qualsiasi tipo di dati, mentre SOMMA e AVV utilizzato solo per i campi numerici. Differenza tra funzione CONTARE(*) e CONTARE(<имя поля>) è che il secondo non tiene conto dei valori NULL durante il calcolo.
Esempio. Trova il prezzo minimo e massimo per i personal computer:
Esempio. Trova il numero disponibile di computer prodotti dal produttore A:
Esempio. Se siamo interessati al numero di modelli diversi prodotti dal produttore A, allora la query può essere formulata come segue (sfruttando il fatto che ogni modello è registrato una volta nella tabella Prodotto):
Esempio. Trova il numero di modelli diversi disponibili prodotti dal produttore A. La query è simile alla precedente, in cui era necessario determinare il numero totale di modelli prodotti dal produttore A. Qui, è necessario trovare il numero di modelli diversi nella tabella PC (cioè disponibile per la vendita).
Al fine di garantire che vengano utilizzati solo valori univoci quando si ottengono indicatori statistici, quando argomento della funzione aggregata può essere utilizzata Parametro DISTINTO. Altro parametro TUTTIè l'impostazione predefinita e prevede di contare tutti i valori restituiti nella colonna. Operatore,
Se abbiamo bisogno di ottenere il numero di modelli di PC prodotti da a testa produttore, sarà necessario utilizzare GRUPPO PER offerta, che segue sintatticamente dopo clausole WHERE.
GRUPPO PER offerta
GRUPPO PER offerta viene utilizzato per definire gruppi di linee di output a cui possono essere applicati funzioni aggregate (COUNT, MIN, MAX, AVG e SUM). Se questa clausola è mancante e vengono utilizzate funzioni di aggregazione, tutte le colonne con i nomi menzionati in SELEZIONARE, dovrebbe essere incluso in funzioni aggregate e queste funzioni verranno applicate all'intero set di righe che soddisfano il predicato della query. Altrimenti, tutte le colonne dell'elenco SELECT, non incluso in funzioni di aggregazione, deve essere specificato nella clausola GROUP BY. Di conseguenza, tutte le righe di output della query vengono suddivise in gruppi caratterizzati dalle stesse combinazioni di valori in queste colonne. Successivamente, le funzioni di aggregazione verranno applicate a ciascun gruppo. Si noti che per GROUP BY, tutti i valori NULL vengono trattati come uguali, ad es. quando si raggruppa per un campo contenente valori NULL, tutte queste righe rientreranno in un unico gruppo.Se se è presente una clausola GROUP BY, nella clausola SELECT nessuna funzione aggregata, la query restituirà semplicemente una riga per ogni gruppo. Questa funzione, insieme alla parola chiave DISTINCT, può essere utilizzata per eliminare le righe duplicate in un set di risultati.
Considera un semplice esempio:
SELEZIONA modello, COUNT(modello) AS Qtà_modello, AVG(prezzo) AS Prezzo_medio DA PC Raggruppa per modello; |
In questa query, per ogni modello di PC, vengono determinati il numero e il costo medio. Tutte le righe con lo stesso valore del modello (numero del modello) formano un gruppo e l'output SELECT calcola il numero di valori e i valori del prezzo medio per ciascun gruppo. Il risultato della query sarà la seguente tabella:
modello | Qtà_modello | Prezzo_medio |
1121 | 3 | 850.0 |
1232 | 4 | 425.0 |
1233 | 3 | 843.33333333333337 |
1260 | 1 | 350.0 |
Se ci fosse una colonna con una data nel SELECT, allora sarebbe possibile calcolare questi indicatori per ogni data specifica. Per fare ciò, è necessario aggiungere la data come colonna di raggruppamento, quindi le funzioni di aggregazione verranno calcolate per ogni combinazione di valori (modello-data).
Ce ne sono diversi specifici regole per l'esecuzione di funzioni di aggregazione:
- Se a seguito della richiesta nessuna riga ricevuta(o più di una riga per questo gruppo), non ci sono dati iniziali per il calcolo delle funzioni di aggregazione. In questo caso, il risultato dell'esecuzione delle funzioni COUNT sarà zero e il risultato di tutte le altre funzioni sarà NULL.
- Discussione funzione aggregata non può contenere funzioni di aggregazione(funzione da funzione). Quelli. in una richiesta è impossibile, diciamo, ricevere un massimo di valori medi.
- Il risultato dell'esecuzione della funzione COUNT è numero intero(NUMERO INTERO). Altre funzioni di aggregazione ereditano i tipi di dati dei valori elaborati.
- Se durante l'esecuzione della funzione SOMMA è stato ottenuto un risultato che ha superato il valore massimo del tipo di dato utilizzato, sbaglio.
Quindi, se la richiesta non contiene GRUPPO PER offerte, poi funzioni aggregate incluso in Clausola SELECT, vengono eseguiti su tutte le stringhe di query risultanti. Se la richiesta contiene GRUPPO PER offerta, ogni insieme di righe che ha gli stessi valori della colonna o del gruppo di colonne specificato in offerta GRUPPO PER, costituisce un gruppo, e funzioni aggregate eseguite separatamente per ciascun gruppo.
AVERE offerta
Se Dove la clausola definisce un predicato per il filtraggio delle stringhe, quindi Clausola HAVING applicato dopo il raggruppamento per definire un predicato simile filtrando i gruppi per valori funzioni aggregate. Questa clausola è necessaria per convalidare i valori ottenuti con funzione aggregata non da righe separate dell'origine record definita in Clausola FROM, e da gruppi di tali linee. Pertanto, tale controllo non può essere contenuto in Dove la clausola.
Sintassi:
* dove campi1- campi per la selezione separati da virgole, puoi anche specificare tutti i campi con *; tavolo- il nome della tabella da cui estraiamo i dati; condizioni— condizioni di campionamento; campi2— campo o campi, separati da virgole, in base ai quali ordinare; contare— il numero di righe da scaricare.
* la query tra parentesi quadre è facoltativa per il recupero dei dati.
Casi d'uso semplici per select
1. Campionamento normale dei dati:
> SELEZIONA * DA utenti
2. Selezione dei dati con unione di due tabelle (JOIN):
SELECT u.name, r.* FROM utenti u JOIN users_rights r ON r.user_id=u.id
* in questo esempio, i dati vengono selezionati con l'unione delle tabelle utenti e utenti_diritti. Sono raggruppati per campi. ID utente(nella tabella users_rights) e id(utenti). Il campo del nome viene recuperato dalla prima tabella e tutti i campi dalla seconda.
3. Campionamento con intervallo di tempo e/o data
a) si conosce il punto di partenza e un certo intervallo di tempo:
* verranno selezionati i dati dell'ultima ora (campo Data).
b) sono note la data di inizio e la data di fine:
25.10.2017 e 25.11.2017 .
c) le date di inizio e fine + l'ora sono note:
* selezionare i dati tra 25/03/2018 0 ore 15 minuti e 25.04.2018 15 ore 33 minuti e 9 secondi.
d) estrarre i dati per un mese e un anno specifici:
* estrarre i dati dove nel campo Data ci sono valori per aprile 2018 dell'anno.
4. Campionamento del valore massimo, minimo e medio:
> SELEZIONA max(area), min(area), avg(area) FROM country
* max- valore massimo; min- minimo; media- media.
5. Utilizzo della lunghezza della stringa:
* questa query dovrebbe mostrare tutti gli utenti il cui nome è composto da 5 caratteri.
Esempi di query più complesse o raramente utilizzate
1. Unione con raggruppamento dei dati selezionati in una riga (GROUP_CONCAT):
* da tavola utenti recuperare i dati per campo id, stanno tutti su una riga, i valori sono separati virgole.
2. Raggruppamento dei dati per due o più campi:
> SELEZIONA * DA utenti GRUPPO PER CONCAT(titolo, "::", nascita)
* totale, in questo esempio scaricheremo i dati dalla tabella utenti e li raggrupperemo per campi titolo e nascita. Prima di raggruppare, uniamo i campi in una riga con un separatore :: .
3. Combinazione dei risultati di due tabelle (UNION):
> (SELEZIONA id, fio, indirizzo, "Utenti" come tipo FROM utenti)
UNIONE
(SELEZIONA id, fio, indirizzo, "Clienti" come tipo FROM clienti)
* in questo esempio, i dati vengono recuperati dalle tabelle utenti e clienti.
4. Un campione di medie raggruppate per ogni ora:
SELECT avg(temperatura), DATE_FORMAT(datetimeupdate, "%Y-%m-%d %H") come hour_datetime FROM archivio GROUP BY DATE_FORMAT(datetimeupdate, "%Y-%m-%d %H")
* qui estraiamo il valore medio del campo temperatura dal tavolo archivio e raggruppa per campo aggiornamento data/ora(con divisione del tempo per ogni ora).
Inserisci (INSERIRE)
Sintassi 1:
> INSERIRE IN