L'SQL (Structured Query Language) è il linguaggio standard per la manipolazione di database relazionali. SQL è oggi utilizzato nella maggior parte dei sistemi DBMS (i software utilizzati per la gestione dei database) sia open-source che commerciali.
Lo standard si limita alla sintassi ed al nome dei comandi principali, ma ogni DBMS in commercio parla un "dialetto proprietario" che si differenzia, sia pur minimamente, dagli altri. Alcuni DBMS, ad esempio, utilizzano dei comandi proprietari di quello stesso DBMS che non esistono su altri programmi. La sintasi di SQL, quindi, è data da un insieme di regole e funzioni comunemente presenti su tutti i DBMS, fermo restando che ognuno di questi può avere una sintassi proprietaria che si differenzia in parte dal linguaggio SQL o, più frequentemente, lo arricchisce di nuovi strumenti e funzionalità.
In questa guida ci limiteremo, pertanto, a descrivere i costrutti di base di SQL senza entrare nel merito degli specifici DBMS.
Un po' di storia...
Il linguaggio SQL è il frutto dell'evoluzione di un linguaggio di interrogazione del database System R sviluppato, intorno alla metà degli anni '70, presso i laboratori di ricerca di IBM. Il nome originale del linguaggio era SEQUEL (Structured English Query Language) che, in seguito, venne trasformato in SQL.
SQL ebbe subito un grande successo tanto da divenire uno standard di fatto già agli inizi degli anni '80. In seguito SQL fu oggetto di standardizzazione da parte di ANSI e ISO che lo dichiararono standard per la prima volta nel 1986.
A cosa serve SQL
Con l'SQL è possibile creare una tabella, modificarne la struttura o cancellarla. E' possibile effettuare ricerche più o meno precise tra i record di una tabella, inserire nuovi dati, modificare o cancellare dati esistenti. E' anche possibile mettere in relazione due o più tabelle in funzione della struttura delle tabelle e delle esigenze di estrazione e manipolazione dei dati.
Scopo di questa guida è fornire una buona introduzione al lettore neofita e di chiarire alcuni dubbi al lettore più esperto circa il mondo dei database ed il modo in cui interagire con loro e con i dati in essi archiviati. La prima lezione sarà dedicata ai concetti di base: cercherò di dare una risposta alle domande più comuni tra le quali "cos'è un database" e come funziona.
La base di qualsiasi esigenza pratica da parte di una qualsiasi organizzazione è quella di gestire dei dati in maniera logica e conservarli in modo ordinato. In ambito informatico il modo per gestire questa esigenza consiste nel fare ricorso ad una base dati (in inglese database).
Cos'è un database?
Con il termine "database" si fa riferimento ad un insieme di informazioni...
Nella precedente lezione abbiamo spiegato cos'è un database e abbiamo detto che, per immagazzinare i dati, esso ricorre a tabelle a loro volta organizzate in colonne e righe. All'interno di ogni colonna i dati immagazzinati devono essere tra loro omogenei, cioè essere dello stesso tipo.
Dichiarare i tipi di dato
Quando si definisce la struttura di una tabella bisogna dichiarare, per...
Come un qualsiasi linguaggio di programmazione, anche SQL utilizza una serie di simboli atti a definire uguaglianze, a fare confronti e calcoli. Questi simboli prendono il nome di operatori.
Anche in questo caso esistono una serie di operatori comuni, presenti in ogni DBMS, ed altri peculiari di uno specifico software. In questa lezione illustreremo gli operatori di SQL comuni a...
Chiunque abbia mai utilizzato un database come Access o un tool come phpMyAdmin sa benissimo che è possibile creare una tabella in maniera visuale in pochi passaggi... ma all'interno della nostra Guida SQL non possiamo esimerci dall'imparare a creare una tabella mediante il comando CREATE TABLE. La sintassi per la creazione di una tabella è la seguente:
CREATE TABLE nome_tabella...
Come abbiamo visto alla lezione dedicata al comando CREATE TABLE, la struttura di una tabelle viene definita in fase di creazione. Una volta creata la tabella, tuttavia, non è inmutabile ma è possibile apportarvi delle modifiche strutturali.
Per modifiche alla struttura di una tabella si intende, ad esempio, l'aggiunta di un campo, la modifica del nome di un campo esistente,...
L'eliminazione di una tabella da un database è un'operazione molto delicata da eseguire con estrema attenzione e non tanto per prova: la cancellazione di una tabella è un'operazione che non può essere annullata e con essa saranno irrimediabilmente persi tutti i dati in essa contenuti. Prima di procedere, quindi, è bene prestare ma massima attenzione.
Rimuovre una tabella dal database
Per...
Fino a questo momento abbiamo visto come creare e modificare la struttura di una tabella ed eventualmente come cancellarla fisicamente dal database, utilizzando i comandi della categoria DDL (Data Definition Language). Da questo capitolo inizia il percorso con cui impareremo a gestire i dati di una tabella utilizzando i comandi della categoria DML (Data Manipulation Language).
Nel capitolo della guida...
Eccoci arrivati ad una delle lezioni più importanti della nostra Guida, ovvero la lezione dedicata al comando SQL SELECT. Con l'istruzione SELECT di SQL possiamo effettuare delle interrogazioni al database per estrarne i dati in esso contenuti. Queste interrogazioni prendono il nome di query (in italiano, appunto, "interrogazione").
Estrarre i dati da una tabella
La sintassi base di una SELECT SQL...
Nella lezione dedicata all SELECT abbiamo visto come interrogare il database per estrarre i dati in esso contenuti. Abbiamo anche visto come utilizzare la clausola WHERE per filtrare la selezione in base a diversi criteri. In questa lezione della nostra guida SQL vedremo come ordinare i risultati ottenuti attraverso la SELECT.
Al fine di effettuare l'ordinamento di un resultset si...
Vediamo in questa lezione quando e come utilizzare il comando SQL UPDATE grazie al quale è possibile aggiornare i dati già presenti all'interno di una tabella di un database.
I dati di una tabella, infatti, sono spesso soggetti a cambiamenti ed a modifiche. Un esempio di modifica che potremmo dover effettuare all'interno della nostra tabella dei "libri" (cui abbiamo fatto...
Vediamo in questa lezione quando e come utilizzare il comando SQL DELETE per effettuare la cancellazione (massiva o selettiva) dei dati in essa contenuti. Per prima cosa, però, cerchiamo di individuare la casistica in cui il comando DELETE può esserci utile.
Nel cilco di vita di un sito web o di un'applicazione (basata su un database) può capitare che i...
In questa lezione della nostra Guida al linguaggio SQL vedremo come creare relazioni tra le tabelle utilizzando le cosiddette JOIN, termine anglosassone traducibile in italiano come "giunzione".
Prima di affrontare la tematica in oggetto, tuttavia, è opportuno fare una premessa introducendo i concetti di ridondanza e normalizzaione in quanto propedeutici all'utilizzo delle JOIN.
Normalizzazione e Ridondanza
Lo scopo di una database è...
Le funzioni di aggregazione effettuano un calcolo all'interno di un set di valori e restituiscono un singolo valore (un unico record): sono dette di aggregazione appunto perché "aggregano" più record per trarne uno.
Le funzioni di aggregazione vengono utilizzate di frequente con le clausole GROUP BY e HAVING che consentono, appunto, di aggregare i risultati secondo alcuni criteri che vedremo...
Nella lezione dedicata alle funzioni di aggregazione, abbiamo incontrato gli alias, ovvero dei nomi temporanei assegnati ai risultati di specifiche funzioni. In realtà gli alias SQL possono essere utilizzati anche per assegnare un nome temporaneo ad una tabella o a una colonna (ad esempio per migliorarne la "leggibilità" all'interno di una estrazione di dati).
E' bene precisare che la creazione...
Abbiamo a cuore la tua privacy
Noi e i nostri partner archiviamo e/o accediamo a informazioni su un dispositivo. Cookie, identificatori del dispositivo o analoghi identificatori online (ad es. identificatori basati sull’accesso, identificatori assegnati casualmente, identificatori basati sulla rete) insieme ad altre informazioni (ad es. tipo di browser e informazioni sul browser, lingua, dimensioni dello schermo, tecnologie supportate, ecc.) possono essere archiviati sul o letti dal dispositivo dell’utente per riconoscerlo ogni volta che l’utente si connette a un’app o a un sito web, per una o più finalità qui presentate.
Con il tuo consenso, i tuoi dati possono essere utilizzati per quanto segue: Pubblicità e contenuti personalizzati, misurazione delle prestazioni dei contenuti e degli annunci, ricerche sul pubblico, sviluppo di servizi; Dati di geolocalizzazione precisi e identificazione attraverso la scansione del dispositivo.
I tuoi dati personali verranno trattati e le informazioni dal tuo dispositivo (cookie, identificatori univoci e altri dati del dispositivo) possono essere memorizzate, consultate e condivise con 181 partner, o utilizzate specificamente da questo sito o questa app. Alcuni fornitori potrebbero trattare i tuoi dati personali sulla base dell'interesse legittimo, al quale puoi opporti gestendo le tue opzioni qui sotto. Puoi revocare il tuo consenso in qualsiasi momento facendo clic sul link delle impostazioni sulla privacy situato in fondo alla pagina.
Alcuni partner non chiedono il tuo consenso al trattamento dei tuoi dati, ma fanno affidamento sul loro legittimo interesse commerciale. Guarda il nostro elenco di partner per conoscere gli scopi per cui credono di avere un interesse legittimo e come puoi opporti.
Questi sono i nostri partner pubblicitari che partecipano al Framework di trasparenza e consenso dello IAB, creato per garantire un uso trasparente e corretto dei dati.
Questi fornitori sono registrati su Google, ma non nel Transparency & Consent Framework di IAB Europe.
{"b_dec":{"def":"Rifiuta e chiudi","res":"Rifiuta e chiudi"},"priclt":"\u003Cdiv class=\u0022cl-consent-settings cl-consent-settings--is-hidden\u0022\u003E\u003Cstyle\u003E.cl-consent-settings{position:fixed;left:16px;bottom:calc(28px + var(--__lxG___css_var_privacy_icon_auto, 0px));z-index:100;transition:all 0.15s ease-in-out;transform:translateY(0)}.cl-consent-settings--is-hidden{transform:translateY(70px);opacity:0}.cl-consent-settings__hint{border-radius:4px;background:#282A3C;box-shadow:0 4px 24px 0 rgba(0,0,0,.15);color:#FFFCF2;position:absolute;right:-195px;top:0;bottom:0;margin:auto;height:40px;width:175px;display:flex;align-items:center;justify-content:center;padding:4px 12px;font-size:12px;font-weight:400;line-height:16px;cursor:default;user-select:none;transition:transform 0.3s ease,opacity 0.3s ease;transform:translateX(-22px);opacity:0;pointer-events:none;z-index:-1}.cl-consent-settings__hint::after{content:\u0022\u0022;position:absolute;left:-16px;top:0;bottom:0;margin:auto;width:0;height:0;border:0 solid transparent;border-top-width:12px;border-bottom-width:12px;border-right:16px solid #282A3C}.cl-consent-settings__btn{width:42px;height:42px;border-radius:50%;display:flex;align-items:center;justify-content:center;padding:0;border:none;background-color:#4b81e8!important;background-position:center center;background-size:30px 30px;background-repeat:no-repeat;box-shadow:0 0 20px 0 rgba(0,0,0,.35);z-index:70;position:relative;text-decoration:none;cursor:pointer}.cl-consent-settings__btn::before{content:\u0022\u0022;-webkit-mask-image:url(\u0022data:image\/svg+xml,%3Csvg xmlns=\u0027http:\/\/www.w3.org\/2000\/svg\u0027 width=\u002730\u0027 height=\u002730\u0027 viewBox=\u00270 0 30 30\u0027 fill=\u0027none\u0027%3E%3Cpath fill=\u0027%23fff\u0027 d=\u0027M15 2.813C8.28 2.813 2.812 8.28 2.812 15S8.28 27.188 15 27.188c6.72 0 12.188-5.468 12.188-12.188C27.188 8.28 21.72 2.812 15 2.812Zm0 1.874c5.686 0 10.313 4.627 10.313 10.313 0 5.686-4.627 10.313-10.313 10.313-5.686 0-10.313-4.627-10.313-10.313C4.688 9.314 9.314 4.687 15 4.687Zm-1.875 3.75a.937.937 0 1 0 0 1.875.937.937 0 0 0 0-1.874Zm5.156.938a1.406 1.406 0 1 0 0 2.812 1.406 1.406 0 0 0 0-2.812Zm-7.968 2.813a1.875 1.875 0 1 0 0 3.749 1.875 1.875 0 0 0 0-3.75Zm5.624 1.874a.938.938 0 1 0 0 1.876.938.938 0 0 0 0-1.876Zm4.688.938a.938.938 0 1 0 0 1.875.938.938 0 0 0 0-1.875Zm-8.906 2.813a1.406 1.406 0 1 0 0 2.812 1.406 1.406 0 0 0 0-2.813Zm6.562.937a1.406 1.406 0 1 0 0 2.813 1.406 1.406 0 0 0 0-2.813Z\u0027\/%3E%3C\/svg%3E\u0022);mask-image:url(\u0022data:image\/svg+xml,%3Csvg xmlns=\u0027http:\/\/www.w3.org\/2000\/svg\u0027 width=\u002730\u0027 height=\u002730\u0027 viewBox=\u00270 0 30 30\u0027 fill=\u0027none\u0027%3E%3Cpath fill=\u0027%23fff\u0027 d=\u0027M15 2.813C8.28 2.813 2.812 8.28 2.812 15S8.28 27.188 15 27.188c6.72 0 12.188-5.468 12.188-12.188C27.188 8.28 21.72 2.812 15 2.812Zm0 1.874c5.686 0 10.313 4.627 10.313 10.313 0 5.686-4.627 10.313-10.313 10.313-5.686 0-10.313-4.627-10.313-10.313C4.688 9.314 9.314 4.687 15 4.687Zm-1.875 3.75a.937.937 0 1 0 0 1.875.937.937 0 0 0 0-1.874Zm5.156.938a1.406 1.406 0 1 0 0 2.812 1.406 1.406 0 0 0 0-2.812Zm-7.968 2.813a1.875 1.875 0 1 0 0 3.749 1.875 1.875 0 0 0 0-3.75Zm5.624 1.874a.938.938 0 1 0 0 1.876.938.938 0 0 0 0-1.876Zm4.688.938a.938.938 0 1 0 0 1.875.938.938 0 0 0 0-1.875Zm-8.906 2.813a1.406 1.406 0 1 0 0 2.812 1.406 1.406 0 0 0 0-2.813Zm6.562.937a1.406 1.406 0 1 0 0 2.813 1.406 1.406 0 0 0 0-2.813Z\u0027\/%3E%3C\/svg%3E\u0022);background-color:#ffffff!important;mask-repeat:no-repeat;width:30px;height:30px}.cl-consent-settings__btn:hover+.cl-consent-settings__hint{transform:translateX(0);pointer-events:all;opacity:1}.cl-consent-settings__user{width:18px;height:18px;border-radius:50%;padding:0;border:1px solid #fff;background-color:#00AD98;background-image:url(\u0022data:image\/svg+xml,%3Csvg xmlns=\u0027http:\/\/www.w3.org\/2000\/svg\u0027 viewBox=\u00270 0 10 11\u0027 width=\u002710\u0027 height=\u002711\u0027 fill=\u0027none\u0027%3E%3Cpath fill=\u0027%23fff\u0027 stroke=\u0027%23fff\u0027 stroke-width=\u0027.1\u0027 d=\u0027M6.858 6.262A3.3 3.3 0 0 0 8.2 3.597C8.2 1.796 6.764.325 5 .325s-3.2 1.47-3.2 3.272c0 1.094.53 2.07 1.342 2.665A4.67 4.67 0 0 0 .45 10.5v.05h1v-.05c0-2.012 1.585-3.632 3.55-3.632s3.55 1.62 3.55 3.632v.05h1v-.05a4.67 4.67 0 0 0-2.692-4.238ZM5 1.345c1.22 0 2.2 1.002 2.2 2.252s-.98 2.25-2.2 2.25-2.2-1-2.2-2.25.98-2.252 2.2-2.252Z\u0027\/%3E%3C\/svg%3E\u0022);background-position:center center;background-size:9px 10px;background-repeat:no-repeat;z-index:75;position:absolute;top:-2px;right:-8px;text-decoration:none;visibility:hidden}\u003C\/style\u003E\u003Cbutton type=\u0022button\u0022 class=\u0022cl-consent-settings__btn\u0022 onclick=\u0022if(window.__lxG__consent__ !== undefined) {window.__lxG__consent__.showConsent()} else {alert(\u0027This function only for users from European Economic Area (EEA)\u0027)} return false\u0022\u003E\u003Cspan class=\u0022cl-consent-settings__user\u0022\u003E\u003C\/span\u003E\u003C\/button\u003E\u003Cdiv class=\u0022cl-consent-settings__hint\u0022\u003EPrivacy and cookie settings\u003C\/div\u003E\u003C\/div\u003E","pricds":"show_in_the_footer","pricaa":1,"vcnt":181,"_t":{"titles":"Purposes|Purposes (Legitimate Interest)|Features|Special Features|Special Purposes|Scopi|Scopi (Interesse Legittimo)|Caratteristiche|Caratteristiche Speciali|Scopi Speciali","sp3_ret":"Le scelte che fai riguardo agli scopi e alle entità elencati in questo avviso sono salvate per un massimo di %sp3_retention% nei seguenti cookie e variabili di archiviazione locale","ill_pp_ttl":"Esempi di Utilizzo","vndr_dtls_con":"Trattamento dei dati basato sul tuo consenso","vndr_dtls_li":"Trattamento dei dati basato sul legittimo interesse","vndr_dtls_fi":"Trattamento dei dati basato sul tuo consenso o interesse legittimo","cks_strg_dur":"dura %DURATION%","cks_strg_ses":"per la sessione attuale","cks_strg_not_used":"non utilizzato","cks_strg_dur_s":"sec","cks_strg_dur_i":"min","cks_strg_dur_h":"ora(e)","cks_strg_dur_d":"giorno(i)","cks_strg_dur_m":"mese(i)","cks_strg_dur_y":"anno(i)","vr_dts_purl":"URL della politica sulla privacy","vr_dts_dsurl":"URL di divulgazione dell\u0027archiviazione del dispositivo","vr_dts_dsurl_h":"Informazioni aggiuntive su archiviazione e operazioni","vr_dts_clmurl":"URL della richiesta di interessi legittimi","vr_dts_datac":"Categorie di dati","vr_dts_datac_h":"Categorie di dati raccolti in relazione agli scopi","vr_dts_stdret":"Conservazione dei dati standard (giorni)","vr_dts_stdret_h":"Il periodo standard è utilizzato a meno che non sia dichiarato un altro periodo per scopi specifici.","vr_dts_ret":"Conservazione dei dati (giorni)","vr_dts_usecks":"Usa i cookie","vr_dts_usecks_h":"Indica se il fornitore utilizza l\u0027archiviazione dei cookie (sessione o altro). SÌ indica che l\u0027archiviazione dei cookie è utilizzata. NO - l\u0027archiviazione dei cookie non è utilizzata.","vr_dts_usecksy":"Sì","vr_dts_usecksn":"No","vr_dts_cksage":"Età massima del cookie","vr_dts_cksage_h":"Il numero di secondi che rappresenta la durata potenziale più lunga per l\u0027archiviazione dei cookie su un dispositivo. Se un fornitore utilizza più cookie con durate diverse, rappresenta il cookie con la durata più lunga. Un numero negativo o 0 indica l\u0027archiviazione della sessione simile alla specifica Set-Cookie.","vr_dts_cksref":"Aggiornamento cookie","vr_dts_cksref_h":"Indica se i cookie vengono aggiornati dopo essere stati inizialmente impostati. SÌ - indica che il fornitore può aggiornare i cookie. NO - indica che il fornitore non aggiorna i cookie ogni volta che il browser viene ricaricato.","vr_dts_noncks":"Utilizza l\u0027accesso senza cookie","vr_dts_noncks_h":"Indica l\u0027uso da parte del fornitore di archiviazione non-cookie e accesso alle informazioni già memorizzate sul dispositivo di un utente. SÌ - indica che l\u0027accesso senza cookie è utilizzato. NO - indica che l\u0027archiviazione e l\u0027accesso senza cookie alle informazioni già memorizzate sul dispositivo di un utente non vengono utilizzati.","vr_dts_hgetl":"Limite della lunghezza della richiesta HTTP GET (Kbyte)","vr_dts_hgetl_h":"Dimensione massima della richiesta GET in kilobyte per aiutare a diagnosticare i problemi con il passaggio della stringa TC e limitare le stringhe di dimensioni eccessive.","vr_dts_addtnl":"Dati aggiuntivi","vr_dts_legaddr":"Indirizzo completo dell\u0027entità legale","vr_dts_b2bcont":"Dettagli di contatto B2B","vr_dts_terscp":"Ambito territoriale","vr_dts_terscp_h":"Indica le giurisdizioni UE\/SEE\/UK in cui il fornitore opera con TCF. Nota che questo è diverso dalla sede del fornitore.","vr_dts_env":"Ambiente","vr_dts_env_h":"Indica gli ambienti in cui il venditore opera","vr_dts_tserv":"Tipo di servizi","vr_dts_tserv_h":"Indica il tipo di servizi offerti dal venditore","vr_dts_trnsfout":"Trasferimenti internazionali fuori dall\u0027UE\/SEE","vr_dts_trnsfout_h":"Indica le giurisdizioni UE\/SEE\/UK in cui il fornitore opera con TCF. Nota che questo è diverso dalla sede del fornitore.","vr_dts_trnsfmch":"Meccanismi di trasferimento internazionale"}}