|
Article on other languages:
|
SQL (Structured Query Language) è un linguaggio creato per l'accesso a informazioni memorizzate nei database. Storia
L'SQL nasce nel 1974 ad opera di Donald Chamberlin,nei laboratori dell'IBM. Nasce come strumento per lavorare con database che seguano il modello relazionale. A quel tempo però si chiamava SEQUEL (la corretta pronuncia IPA è [ˈɛsˈkjuˈɛl], o informale [ˈsiːkwəl]). Nel 1975 viene sviluppato un prototipo chiamato SEQUEL-XRM; con esso si eseguirono sperimentazioni che portarono, nel 1977, a una nuova versione del linguaggio, che inizialmente avrebbe dovuto chiamarsi SEQUEL/2 ma che poi divenne, per motivi legali, SQL. Su di esso si sviluppò il prototipo System R, che venne utilizzato da IBM per usi interni e per alcuni suoi clienti. Ma, dato il suo successo, anche altre società iniziarono subito a sviluppare prodotti basati su SQL. Nel 1981 IBM iniziò a vendere alcuni prodotti relazionali e nel 1983 rilasciò DB2, il suo DBMS relazionale diffuso ancor oggi. SQL divenne subito lo standard industriale per i software che utilizzano il modello relazionale. L'ANSI lo adottò come standard fin dal 1986, senza apportare modifiche sostanziali alla versione inizialmente sviluppata da IBM. Nel 1987 la ISO fece lo stesso. Questa prima versione standard è denominata SQL/86. Negli anni successivi si realizzarono altre versioni, che furono SQL/89, SQL/92 e SQL/2003. Tale processo di standardizzazione mirava alla creazione di un linguaggio che funzionasse su tutti i DBMS (Data Base Management Systems) relazionali, ma purtroppo questo obiettivo non fu raggiunto. Infatti, i vari produttori implementarono il linguaggio con numerose variazioni e, in pratica, adottarono gli standard ad un livello non superiore al minimo, definito dall'Ansi come Entry Level. Il modello entità-associazioniIl modello entità-relazioni (E/R) viene adoperato per analizzare le caratteristiche di una situazione indistintamente dagli eventi che andranno a verificarsi. Questo per costituire un modello concettuale di dati che venga visto in modo indipendente dalle applicazioni. Il modello entità associazione si distingue per la presenza di vari elementi che lo definiscono:
EsempioFAMIGLIA <POSSIEDE> CASA FAMIGLIA e CASA SONO LE ENTITA' <POSSIEDE> è l'associazione che collega Famiglia a Casa Gli Attributi possono essere FAMIGLIA: (cogn_Famiglia (*) , Tipo_Famiglia , Numero_Famiglia, Città_Residenza, Telefono, Indirizzo) CASA: (Cod_Casa(*) , Tipo_Casa, Numero_locali , Metri_quadri, Giardino, cogn_Famiglia(+)) con (*) si intende la chiave primaria mentre con (+) si intende la chiave esterna. StrutturaEssendo un linguaggio dichiarativo, SQL non richiede la stesura di sequenze di operazioni (come ad es. i Linguaggi imperativi), piuttosto di specificare le proprietà logiche delle informazioni ricercate. Esso si divide in tre sottoinsiemi:
OperatoriGli operatori, messi a disposizione dal SQL standard si dividono in quattro categorie:
Operatori di confrontoGli operatori di confronto servono a determinare uguaglianze e disuguaglianze tra valori e ad effettuare ricerche all'interno dei dati. Di seguito uno schema tabellare:
Operatori aritmeticiGli operatori aritmetici effettuano calcoli all'interno di una ricerca. Di seguito uno schema tabellare : Operatore Descrizione
Operatori condizionaliL'unico operatore condizionale di SQL è WHERE (dove) e serve a definire criteri di ricerca mirati. Operatori logiciGli operatori logici di SQL sono AND (e), OR (o, oppure), NOT (non), XOR (detto anche "OR esclusivo"); possono essere ripetuti più volte all'interno dell'elenco delle condizioni di ricerca. DDL: Definizione dei datiDDL (data definition language - linguaggio di definizione dei dati) serve a creare, modificare o eliminare gli oggetti in un database. Sono i comandi DDL a definire la struttura del database e quindi dei dati ivi contenuti. Ma non fornisce gli strumenti per modificare i dati stessi: per tale scopo si usa il DML. L'utente deve avere i permessi necessari per agire sulla struttura del database e questi permessi vengono assegnati tramite il DCL. Domini ElementariSQL mette a disposizione sei famiglie di domini elementari a partire dai quali si possono definire i domini da associare agli attributi dello schema. DML: manipolazione dei datiDML (data manipulation language - linguaggio di manipolazione dei dati) fornisce i comandi per inserire, modificare, eliminare o leggere i dati all'interno delle tabelle di un database. La struttura di questi dati deve già essere stata definita tramite il DDL. Inoltre, il permesso di accedere a tali dati deve essere assegnato all'utente tramite il DCL. SelectCol comando select abbiamo la possibilità di estrarre i dati, in modo mirato, dal database. Sintassi del comando selectSELECT [ ALL | DISTINCT | TOP ] lista_elementi_selezione FROM lista_riferimenti_tabella [ WHERE espressione_condizionale ] [ GROUP BY lista_colonne HAVING Condizione ] [ ORDER BY lista_colonne ]; dove lista_elementi_selezione è l'elenco dei campi da estrarre (separati tra loro con una virgola), lista_riferimenti_tabella è l'elenco delle tabella da cui estrarre i dati, espressione_condizionale rappresenta l'elenco delle condizioni, ovvero dei requisiti che un campo deve rispettare per poter essere prelevato dall' interrogazione (le condizioni sono specificate mediante gli operatori di confronto, connettori logici e comparatori come between, in, like, is null); lista_colonne è la colonna o le colonne che devono essere prese come riferimento per l'ordinamento dei dati in uscita. Di default il comando select agisce con il metodo all ma in qualcaso non si voglia ottenere come risultato della query una ripetizione di righe, si specifica il metodo distinct, top limita il numero delle righe fornite TOP 10 prende le prime 10 righe della mia tabella. SELECT DISTINCT cognome, nome, citta_residenza FROM utenti WHERE anni >= 18 ORDER BY cognome (La clausola ORDER BY serve per ordinare, l'ordinamento viene sempre applicato al primo attributo inserito nella SELECT) Questa query estrae l'elenco di tutti gli utenti maggiorenni ordinando l'output in base al cognome. La definizione di select è comunque molto più ampia, prevede molte altre opzioni ma in linea di massima con queste opzioni si compongono la maggior parte delle interrogazioni. SELECT DISTINCT * FROM utenti l'asterisco permette di includere nella selezione tutte le colonne della tabella utenti Con le select è possibile anche eseguire dei calcoli: SELECT DISTINCT cod_art, prezzo_unit*giacenza AS Totale, giacenza*ingombro AS TotIngombro; FROM articoli questo produce dati estratti ma anche dati calcolati. Il metodo AS serve per dare un nome alla nuova colonna nella nuova tabella che creerà la select. InsertIl comando ha la funzione di inserire i dati nelle tabelle. Le colonne (o campi) di destinazione dei valori possono essere o meno dichiarate nel comando. Se non vengono dichiarate, è necessario passare al comando un valore per ogni colonna della tabella, rispettando rigorosamente l'ordine delle colonne stesse. Se, invece, le colonne di destinazione vengono dichiarate, è possibile indicare le sole colonne per le quali vengono passati dei valori, purché vengano inseriti comunque i valori per tutte le colonne not null (che non possono essere nulle) della tabella. Di per sé il comando insert opera inserendo in tabella una sola riga per volta. È possibile, però, inserire più di una riga "in modo automatico" passando all'insert una serie di righe (o tuple) risultanti da un comando di select, purché tali righe siano compatibili con le colonne della tabella su cui si inseriscono i dati. Sintassi del comando insert
INSERT INTO nome_tabella VALUES (elenco valori, tutti, rispettando l’ordine dei campi della tabella); oppure INSERT INTO nome_tabella (elenco dei campi interessati dall’inserimento) VALUES (elenco valori, tutti, rispettando l’ordine dei campi dichiarati sopra);
INSERT INTO nome_tabella (elenco dei campi interessati dall’inserimento) AS SELECT ...; UpdateIl comando update ha la funzione di modificare i dati delle tabelle. Il nome di ogni campo che deve essere modificato va dichiarato dopo la parola chiave SET e deve essere seguito dal simbolo " = " (uguale) e dal nuovo valore che deve assumere. È possibile modificare più campi della stessa riga in un unico comando update, separandoli l'uno dall'altro con il simbolo " , " (virgola). Il comando generico aggiorna tutte le righe della tabella. È possibile restringerne il numero applicando la parola chiave aggiuntiva WHERE, che permette di effettuare una selezione qualitativa delle righe imponendo delle condizioni sui dati presenti nelle righe prima dell'aggiornamento. Sintassi del comando update
UPDATE nome_tabella SET nome_campo1 = 'valore1_nuovo', nome_campo2 = 'valore2_nuovo', ... ;
UPDATE nome_tabella SET nome_campo1 = 'valore1_nuovo', nome_campo2 = 'valore2_nuovo' WHERE nome_campo3 = 'valore'; DeleteIl comando delete ha la funzione di cancellare i dati dalle tabelle. Come il comando update anche delete può operare in modo generico cancellando tutte le righe della tabella oppure può identificare le righe da cancellare mediante la parola chiave aggiuntiva WHERE e la condizione (o le condizioni) ad essa associata. Sintassi del comando delete
DELETE FROM nome_tabella;
DELETE FROM nome_tabella WHERE nome_campo = 'valore'; Truncate TableCome già detto, una Delete priva di clausola Where cancella tutte le righe dalla tabella specificata. Tuttavia, esiste un altro modo per svuotare completamente una tabella: il comando Truncate Table. Alcuni DBMS implementano questo comando (che non è presente nello standard SQL) in modo più veloce rispetto a una Delete, ad esempio cancellando il file dei dati senza leggerlo e ricreandolo vuoto. Generalmente però questo impedisce che vengano restituite alcune informazioni accessorie, come il numero di righe cancellate. Sintassi del comando truncate tableTRUNCATE [TABLE] nome_tabella La transazioneLe istruzioni di DML Insert, Update, Replace e Delete, se poste all'interno di una transazione, non sono irreversibili e possono essere annullate nel caso ci si renda conto che non sono state applicate in modo corretto. Una transazione è un blocco di istruzioni che sono strettamente correlate tra loro. Nel caso si verifichi un errore (sia esso nel programma oppure dovuto ad un problema esterno, per esempio se il sistema si blocca) non verrà annullata solo l'ultima istruzione, ma l'intera transazione. In tal modo si è certi che l'integrità dei dati verrà garantita. Begin TransactionPer iniziare esplicitamente una transazione si utilizza il comando BEGIN TRANSACTION. La mancanza di questo comando fa sì che ogni istruzione funga da transazione a sé stante. Sintassi del comando begin transactionBEGIN TRAN[SACTION] [transaction_name]; CommitPer confermare la transazione si utilizza il comando COMMIT. Con esso tutte le modifiche effettuate sui dati in precedenza vengono memorizzate. Sintassi del comando commitCOMMIT [TRAN[SACTION] [transaction_name]; RollbackPer annullare la transazione si utilizza il comando ROLLBACK. Con esso tutte le modifiche effettuate sui dati in precedenza (a partire dall'inizio della transazione) vengono cancellate. Sintassi del comando rollbackROLLBACK [TRAN[SACTION] [transaction_name]; DCL: Controllo sui datiDCL serve a fornire o revocare agli utenti i permessi necessari per poter utilizzare i comandi DML e DDL, oltre agli stessi comandi DCL (che gli servono per poter a sua volta modificare i permessi su alcuni oggetti). GrantIl comando Grant fornisce uno o più permessi a un determinato utente (es: il permesso di inserimento in una tabella, di modificarla o eliminarla) e di amministratore di valore. RevokeIl comando Revoke revoca uno o più permessi a un determinato utente (es: il permesso di cancellazione da una tabella). Critiche a SqlSql è un linguaggio di interrogazione pensato per interagire con i database relazionali. I teorici fanno però notare come le caratteristiche originali dell'Sql, ispirate al calcolo delle tuple, in realtà lo violino. Le sue estensioni più recenti supportano pienamente il Modello relazionale, ma hanno peggiorato le suddette violazioni. Inoltre, vi sono molte critiche sull'utilizzo pratico dell'Sql:
Voci correlate
Collegamenti esterni
|
This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.
Mercedes Car
This site monitored by SitePinger.net