SQL per principianti

La maggior parte delle moderne applicazioni Web oggi interagisce con i database, di solito con un linguaggio chiamato SQL. Fortunatamente per noi, questa lingua è abbastanza facile da imparare. In questo articolo, inizieremo con alcune query SQL di base e li useremo per interagire con un database MySQL.

Quello di cui hai bisogno

SQL (Structured Query Language) è un linguaggio progettato per interagire con i sistemi di gestione dei database relazionali (RDBMS), come MySQL, Oracle, Sqlite, ecc. Per eseguire le query SQL in questo articolo, suggerisco di avere installato MySQL. Raccomando anche phpMyAdmin come interfaccia visiva per MySQL.

Le seguenti applicazioni semplificano l'installazione di MySQL e phpMyAdmin sulla tua macchina locale:

  • WAMP per Windows
  • MAMP per Mac

Useremo la riga di comando per le query. WAMP è già dotato di una console MySQL. Per MAMP, puoi leggere questo articolo.

CREA DATABASE: creazione di un database

Ecco la nostra prima domanda. Stiamo per creare un database con cui lavorare.

Per prima cosa, apri la tua console MySQL e accedi. Per WAMP, la password predefinita è vuota. Per MAMP, la password dovrebbe essere 'root' per impostazione predefinita.

Dopo aver effettuato l'accesso, digita questa query e premi invio:

 CREATE DATABASE my_first_db;

Nota che il punto e virgola (;) viene aggiunto alla fine della query, proprio come alla fine delle righe di codice.

Inoltre, le parole speciali 'CREATE DATABASE' sono case insensitive, insieme a tutte le parole speciali in SQL. Ma per motivi di leggibilità, li scriveremo in maiuscolo.

Opzionale: set di caratteri e regole di confronto

Se si desidera impostare il set di caratteri e le regole di confronto predefiniti, è possibile scrivere la stessa query in questo modo:

 CREATE DATABASE my_first_db SET DI CARATTERE PREDEFINITO utf8 COLLATE utf8_general_ci;

Ecco una lista di set di caratteri e regole di confronto supportati in MySQL.

MOSTRA DATABASE: elenca tutti i database

Questa query viene utilizzata per ottenere un elenco di tutti i database che hai.

DROP DATABASE: cancella un database

È possibile eliminare un database esistente con questa query.

Fai attenzione a questa query, perché non ti dà alcun avvertimento. Se hai tabelle e dati sotto il database, saranno tutti cancellati all'istante.

USO: selezione di un database

Questo tecnicamente non è una domanda. È una "dichiarazione" e non richiede un punto e virgola alla fine.

Indica a MySQL di selezionare un database predefinito con cui lavorare, per la sessione corrente. Ora siamo pronti per creare tabelle e fare altre cose sotto questo database.

Che cos'è una tabella di database?

Puoi pensare a una tabella di database come un foglio di calcolo o un file CSV che contiene dati strutturati.

Proprio come in questo esempio, le tabelle hanno nomi di colonne e righe di dati. Con le query SQL possiamo creare queste tabelle. Possiamo anche aggiungere, leggere, aggiornare e cancellare i dati.

CREATE TABLE: creazione di una tabella

Con questa query possiamo creare tabelle nel database. Sfortunatamente la documentazione di MySQL non è molto amichevole per i nuovi studenti. La struttura di questo tipo di query può diventare molto complessa, ma inizieremo con una semplice.

La seguente query creerà una tabella con 2 colonne.

 CREA TABELLA utenti (username VARCHAR (20), create_date DATE);

Si noti che siamo in grado di scrivere una query su più righe e persino utilizzare le schede per il rientro.

La prima linea è facile. Creiamo solo una tabella denominata 'utenti'. Dopodiché, nelle parestes, abbiamo una colonna della tabella di lista separata da virgole. Dopo il nome di ogni colonna, abbiamo un tipo di dati, come VARCHAR o DATE.

VARCHAR (20) significa che la colonna è un tipo di stringa e può avere una lunghezza massima di 20 caratteri. DATE è anche un tipo di dati utilizzato specificamente per la memorizzazione delle date, in questo formato: "AAAA-MM-GG".

CHIAVE PRIMARIA

Prima di eseguire quella query, dovremmo includere anche una colonna per "user_id", che sarà una PRIMARY KEY. Senza entrare troppo nei dettagli, puoi pensare a una CHIAVE PRIMARIA come modo per identificare ogni riga di dati in una tabella.

Ora la query diventa:

 CREA TABELLA utenti (user_id INT AUTO_INCREMENT PRIMARY KEY, nome utente VARCHAR (20), create_date DATE);

INT rende questo un tipo intero a 32 bit (cioè numerico). AUTO_INCREMENT genera automaticamente un nuovo numero ID ogni volta che aggiungiamo nuove righe di dati. Non è richiesto, ma lo rende molto più conveniente.

Questa colonna non deve essere un numero intero, ma è il tipo più utilizzato. Non è richiesta anche la colonna PRIMARY KEY, ma è fortemente raccomandata per una buona progettazione e prestazioni del database.

Eseguiamo la query:

SHOW TABLES: elenca tutte le tabelle

Questa query consente di ottenere un elenco di tabelle attualmente presenti nel database.

SPIEGARE: Mostra struttura tabella

Per vedere la struttura di una tabella esistente, puoi usare questa query.

I campi (aka colonne) sono elencati nei risultati, con le loro proprietà.

DROP TABLE: elimina una tabella

Proprio come i DATABASE DROP, questa query cancella una tabella e il suo contenuto, senza alcun avviso.

ALTER TABLE: modifica una tabella

Questa query può anche avere una struttura abbastanza complessa a causa della moltitudine di modifiche che può eseguire su una tabella. Diamo un'occhiata ad alcuni semplici esempi.

(Assicurati di ricreare la tabella che abbiamo appena abbandonato o che le seguenti query ovviamente non funzioneranno.)

Aggiungi una colonna

 ALTER TABLE users AGGIUNGI email VARCHAR (100) DOPO il nome utente;

Grazie alla leggibilità di SQL, non penso che la query abbia bisogno di una spiegazione.

Rimuovi una colonna

Anche questo è stato molto semplice. Ma usalo con cautela poiché rimuove permanentemente i dati senza un avviso.

Riaggiungi la colonna email perché la useremo in seguito:

 ALTER TABLE users AGGIUNGI email VARCHAR (100) DOPO il nome utente;

Modifica una colonna

A volte potresti voler cambiare le proprietà di una colonna, quindi non devi eliminarlo e ricrearlo.

Questo ha rinominato la colonna username in "user_name" e ha cambiato il tipo da VARCHAR (20) a VARCHAR (30). Una modifica come questa non dovrebbe disturbare nessuno dei dati esistenti nella tabella.

INSERT: aggiungi dati a una tabella

Aggiungiamo alcuni dati nella tabella utilizzando questa query.

Come puoi vedere, VALUES () contiene l'elenco dei valori dei campi, separati da virgole. I valori di stringa sono racchiusi tra virgolette singole. E i valori devono essere nell'ordine delle colonne che sono state definite quando abbiamo creato la tabella.

Si noti che il primo valore è NULL per il campo PRIMARY KEY che abbiamo chiamato 'user_id'. Lo facciamo in modo che venga generato automaticamente un ID, perché la colonna è impostata su AUTO_INCREMENT. Quando inserisci una riga di dati per la prima volta, l'ID sarà 1. La riga inserita successiva sarà 2 e così via ...

Sintassi alternativa

Ecco un'altra sintassi per l'inserimento di righe.

Questa volta stiamo usando la parola chiave SET invece di VALORI, e non è seguita da parate. Ci sono alcune cose da notare qui:

  • Una colonna può essere omessa. Ad esempio, non abbiamo assegnato un valore a user_id, che verrà impostato automaticamente sulla funzionalità AUTO_INCREMENT. Se si omette una colonna VARCHAR, verrà impostata automaticamente una stringa vuota (a meno che non sia stato specificato un valore predefinito diverso durante la creazione della tabella).
  • Ogni colonna deve essere referenziata con il suo nome. Per questo motivo, possono essere in qualsiasi ordine, a differenza della sintassi precedente.

Sintassi alternativa 2

Ecco un'altra sintassi.

Ancora una volta, poiché ogni colonna fa riferimento al nome, possono essere in qualsiasi ordine.

LAST_INSERT_ID ()

È possibile utilizzare questa query per ottenere l'ID AUTO_INCREMENT dell'ultima riga inserita, nella sessione corrente.

ADESSO()

Penso che sia un buon momento per dimostrare come è possibile utilizzare una funzione MySQL all'interno delle query.

La funzione NOW () restituisce la data corrente. Quindi puoi usarlo per impostare automaticamente una colonna DATE sul giorno corrente mentre inserisci una nuova riga.

Si noti che abbiamo ricevuto un avviso da MySQL, ma non è un grosso problema. Il motivo è che NOW () restituisce effettivamente anche le informazioni sull'ora.

Ma la colonna create_date che abbiamo creato contiene solo la data e non l'ora, quindi i dati restituiti sono stati troncati. Potremmo usare invece la funzione CURDATE (), che restituisce solo la data, ma i dati memorizzati alla fine sarebbero uguali in entrambi i casi.

SELEZIONA: Leggi i dati da una tabella

Ovviamente i dati che abbiamo aggiunto sarebbero inutili a meno che non possiamo leggerlo. È qui che entra in gioco la query SELECT.

Ecco la query SELECT più semplice possibile per la lettura da una tabella:

In questo caso, l'asterisco (*) significa che abbiamo chiesto di recuperare tutte le colonne dalla tabella. Se si desidera solo colonne specifiche, la query sarà simile a questa:

Dove la clausola

Più spesso, siamo interessati solo ad alcune delle righe, e non a tutte. Ad esempio, supponiamo di volere l'indirizzo email per l'utente "nettuts".

Pensalo come una dichiarazione IF. WHERE ti consente di inserire le condizioni nella query per i risultati che stai cercando.

Nota che per la condizione di uguaglianza, viene utilizzato un solo segno di uguale (=), invece di doppio (==) a cui potresti essere abituato dalla programmazione.

Puoi usare anche altre condizioni di confronto:

AND e OR possono essere usati per combinare le condizioni:

Si noti che i valori numerici non devono essere racchiusi tra virgolette.

NEL()

Questo è utile per la corrispondenza di più valori.

PIACE

Questo ti permette di fare ricerche con caratteri jolly.

Il segno percentuale (%) viene utilizzato come carattere jolly.

ORDINA PER clausola

Se si desidera che i risultati vengano restituiti in un ordine specifico, utilizzare questa clausola:

L'ordine predefinito è ASC (vale a dire in ordine crescente). È possibile aggiungere DESC per invertire l'ordine.

LIMIT ... OFFSET ...

È possibile limitare il numero di risultati restituiti.

LIMIT 2 ottiene solo i primi 2 risultati. LIMIT 1 OFFSET 2 ottiene 1 risultato, dopo i primi 2 risultati. LIMIT 2, 1 significa la stessa cosa, ma nota che il primo numero è l'offset e il secondo numero è il limite.

AGGIORNAMENTO: Aggiorna dati in una tabella

Questa query viene utilizzata per l'aggiornamento dei dati in una tabella.

La maggior parte delle volte, viene utilizzata con una clausola WHERE, poiché si desidera aggiornare solo le righe specifiche. Se non viene fornita una clausola WHERE, tutte le righe verranno aggiornate con le stesse modifiche.

È inoltre possibile utilizzare una clausola LIMIT per limitare il numero di righe da aggiornare.

DELETE: Elimina dati da una tabella

Proprio come UPDATE, anche questa query viene solitamente utilizzata con una clausola WHERE.

TABELLA DEI TRONCATI

Per eliminare l'intero contenuto di una tabella, puoi fare questo:

 CANCELLA DA utenti;

Ma di solito è più efficiente in termini di prestazioni usare TRUNCATE.

TRUNCATE reimposta anche i numeri AUTO_INCREMENT in modo che una nuova riga abbia nuovamente l'ID 1. Ma questo non accade con una query DELETE e il contatore continua a salire.

Evasione di valori stringa e parole speciali

Valori delle stringhe

Alcuni personaggi devono essere sfuggiti, altrimenti puoi avere problemi.

La barra rovesciata (\) viene utilizzata per l'escape.

Questo è anche molto importante per motivi di sicurezza. Ogni input dell'utente che entra nel database deve essere opportunamente scappato. In PHP, usi la funzione mysql_real_escape_string () o usi le istruzioni preparate poiché eseguono automaticamente l'escape.

Parole speciali

Poiché MySQL ha molte parole speciali come SELECT o UPDATE, puoi evitare la collisione inserendo virgolette tra i nomi di tabelle e colonne. Ma queste non sono le virgolette regolari; è necessario utilizzare il carattere backtick (').

Supponiamo che tu voglia aggiungere una colonna chiamata "cancella" per qualche motivo:

Conclusione

Grazie per aver letto l'articolo Spero di essere in grado di mostrarti che SQL ha una curva di apprendimento facile ma è molto potente.

Si prega di lasciare i vostri commenti e domande, e buona giornata!

  • Seguici su Twitter o iscriviti al feed Nettuts + RSS per i migliori tutorial di sviluppo web sul web. Pronto

Sei pronto a portare le tue abilità a un livello superiore e a trarre profitto dagli script e dai componenti? Dai un'occhiata al nostro marketplace, CodeCanyon.