Linguaggio di programmazione
SQL (Structured Query Language) è un linguaggio di gestione di database per database relazionali. SQL in sé non è un linguaggio di programmazione completo di Turing, ma il suo standard consente di creare estensioni procedurali che estendono le sue funzionalità a un linguaggio di programmazione completo.
Il linguaggio è stato creato negli anni '70 con il nome "SEQUEL" per System R. Database Management System (DBMS), successivamente è stato ribattezzato "SQL" per evitare conflitti tra marchi. Nel 1979, SQL è stato pubblicato per la prima volta come prodotto commerciale, Oracle V2.
Il primo standard linguistico ufficiale è stato adottato da ANSI nel 1986 e ISO - nel 1987. Da allora sono state create diverse versioni dello standard, alcune delle quali hanno ripetuto le precedenti con piccole variazioni, altre hanno assunto nuove caratteristiche significative.
Nonostante l'esistenza di standard, le implementazioni SQL più comuni differiscono così tanto che raramente il codice può essere portato da un DBMS a un altro senza modifiche significative. Ciò è dovuto alle grandi dimensioni e complessità dello standard, nonché alla mancanza di specifiche in alcune importanti aree di implementazione.
SQL è stato creato come un modo semplice e standardizzato per recuperare e manipolare i dati contenuti in un database relazionale. Successivamente, è diventato più complesso del previsto ed è diventato uno strumento di sviluppo, non un utente finale. Attualmente, SQL (principalmente nell'implementazione Oracle) rimane il linguaggio di gestione dei database più popolare, sebbene esistano numerose alternative.
SQL ha quattro parti distinte:
- Data Definition Language (DDL) viene utilizzato per definire le strutture di dati archiviate in un database. Le istruzioni DDL consentono di creare, modificare ed eliminare singoli oggetti nel database. I tipi di oggetti consentiti dipendono dal DBMS utilizzato e in genere includono database, utenti, tabelle e un numero di oggetti di supporto più piccoli come ruoli e indici.
- Data Manipulation Language (DML) viene utilizzato per recuperare e modificare i dati in un database. Le istruzioni DML consentono di recuperare, inserire, modificare ed eliminare i dati nelle tabelle. A volte le istruzioni select per il recupero dei dati non sono considerate parte del DML perché non modificano lo stato dei dati. Tutte le istruzioni DML sono dichiarative.
- Il Data Access Definition Language (DCL) viene utilizzato per controllare l'accesso ai dati in un database. Le istruzioni DCL si applicano ai privilegi e consentono di concedere e revocare i diritti per applicare specifiche istruzioni DDL e DML a oggetti di database specifici.
- Il linguaggio di gestione delle transazioni (TCL) viene utilizzato per controllare l'elaborazione delle transazioni nel database. In genere le istruzioni TCL includono il commit per confermare le modifiche apportate durante la transazione, il rollback per annullarle e il punto di salvataggio per suddividere la transazione in blocchi più piccoli.
Va notato che SQL implementa un paradigma di programmazione dichiarativa: ogni istruzione descrive solo l'azione richiesta e il DBMS decide come eseguirla, ad es. pianifica ed esegue le operazioni elementari necessarie per completare un'azione. Tuttavia, per utilizzare efficacemente la potenza di SQL, lo sviluppatore deve comprendere come il DBMS analizza ogni istruzione e crea il proprio piano di esecuzione.
Esempi:
Ciao mondo !:
Esempio per le versioni Oracle 10g SQL, Oracle 11g SQLLa stringa "Hello, World!" viene recuperata dalla tabella integrata dual, utilizzata per le query che non richiedono l'accesso alle tabelle reali.
seleziona "Ciao, Mondo!" da duale;
Fattoriale:
Esempio per le versioni Oracle 10g SQL, Oracle 11g SQLSQL non supporta loop, ricorsioni o UDF. Questo esempio mostra una possibile soluzione alternativa utilizzando:
- livello di pseudo-colonna per creare pseudo-tabelle t1 e t2 contenenti numeri da 1 a 16,
- la funzione aggregata sum, che permette di sommare gli elementi di un insieme senza utilizzare esplicitamente un ciclo,
- e le funzioni matematiche ln ed exp per sostituire il prodotto (necessario per calcolare il fattoriale) con la somma (fornita da SQL).
La stringa “0! = 1 "non sarà incluso nel set di righe risultante, poiché il tentativo di calcolare ln (0) genera un'eccezione.
Numeri di Fibonacci:
Esempio per le versioni Oracle 10g SQL, Oracle 11g SQLSQL non supporta loop o ricorsioni e la concatenazione di campi da righe diverse in una tabella o query non è una funzione di aggregazione standard. Questo esempio usa:
- Formula di Binet e funzioni matematiche ROUND, POWER e SQRT per il calcolo dell'n-esimo numero di Fibonacci;
- livello pseudo-colonna per creare pseudo-tabella t1 contenente numeri da 1 a 16;
- funzione integrata SYS_CONNECT_BY_PATH per la concatenazione ordinata dei numeri ricevuti.
SELEZIONA SOSTITUISCI (MAX (SYS_CONNECT_BY_PATH (fib || ",", "/")), "/", "") || "..." Fiblist FROM (SELECT n, fib, ROW_NUMBER () OVER (ORDER BY n) r FROM (select n, round ((power ((1 + sqrt (5)) * 0.5, n) - power (( 1 - sqrt (5)) * 0,5, n)) / sqrt (5)) fib da (selezionare il livello n da doppia connessione per livello<= 16 ) t1 ) t2 ) START WITH r = 1 CONNECT BY PRIOR r = r - 1 ;
Ciao mondo !:
Esempio per le versioni Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012, MySQL 5, PostgreSQL 8.4, PostgreSQL 9.1, sqlite 3.7.3seleziona "Ciao, Mondo!" ;
Fattoriale:
Esempio per le versioni Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012Viene utilizzata la definizione ricorsiva di fattoriale, implementata attraverso una query ricorsiva. Ogni riga della query contiene due campi numerici: n e n!, e ogni riga successiva viene calcolata utilizzando i dati della precedente.
Puoi calcolare solo fattoriali interi fino a 20 !. Quando si cerca di calcolare 21! si verifica un errore di "Errore di overflow aritmetico", ad es. la griglia di scarico trabocca.
Per i numeri reali, viene calcolato il fattoriale 100! (Per fare ciò, nell'esempio, è necessario sostituire bigint con float nella 3a riga)
Numeri di Fibonacci:
Esempio per le versioni Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012Viene utilizzata la determinazione iterativa dei numeri di Fibonacci, implementata tramite una query ricorsiva. Ogni riga della query contiene due numeri adiacenti nella sequenza e la riga successiva viene calcolata come (ultimo numero, somma di numeri) della riga precedente. Pertanto, tutti i numeri tranne il primo e l'ultimo si verificano due volte, quindi solo i primi numeri di ogni riga vengono inclusi nel risultato.
Fattoriale:
Esempio per le versioni Oracle 10g SQL, Oracle 11g SQLQuesto esempio dimostra l'uso della clausola modello, disponibile a partire da Oracle 10g, per consentire di trattare le stringhe di query come elementi di matrice. Ogni riga contiene due campi: il numero di riga n e il suo fattoriale f.
seleziona n || "! =" || f fattoriale dal modello dual restituisce la dimensione di tutte le righe per (0 d) misure (0 f, 1 n) regole iterazione (17) (f [numero_iterazione] = decodifica (numero_iterazione, 0, 1, f [numero_iterazione - 1] * numero_iterazione) , n [numero_iterazione] = numero_iterazione);
Numeri di Fibonacci:
Esempio per le versioni Oracle 10g SQL, Oracle 11g SQLQuesto esempio dimostra l'uso della clausola modello, disponibile a partire da Oracle 10g, per consentire di trattare le stringhe di query come elementi di matrice. Ogni riga contiene due campi: il numero di Fibonacci stesso e la concatenazione di tutti i numeri minori o uguali ad esso. La concatenazione iterativa di numeri nella stessa query in cui vengono generati è più semplice e veloce dell'aggregazione come azione autonoma.
seleziona massimo(i) || ", ..." from (select s from dual model restituisce tutte le righe dimensione di (0 d) misure (cast ("" as varchar2 (200)) s, 0 f) regole iterare (16) (f [iteration_number] = decode (numero_iterazione, 0, 1, 1, 1, f [numero_iterazione - 1] + f [numero_iterazione - 2]), s [numero_iterazione] = decode (numero_iterazione, 0, to_char (f [numero_iterazione]), s [numero_iterazione - 1] || "," || to_char (f [iteration_number]))));
Fattoriale:
Esempio per le versioni MySQL 5select concat (cast (t2. n as char), "! =", cast (exp (sum (log (t1. n))) as char)) from (select @ i: = @ i + 1 AS n from TABLE , (seleziona @ i: = 0) come sel1 limite 16) t1, (seleziona @ j: = @ j + 1 AS n da TABLE, (seleziona @ j: = 0) come sel1 limite 16) t2 dove t1. n<= t2 . n group by t2 . n
Numeri di Fibonacci:
Esempio per le versioni MySQL 5Sostituisci TABLE con qualsiasi tabella a cui puoi accedere, ad esempio mysql.help_topic.
select concat (group_concat (f separator ","), ", ...") from (select @ f: = @ i + @ j as f, @ i: = @ j, @ j: = @ f from TABLE, (seleziona @ i: = 1, @ j: = 0) sel1 limite 16) t
Ciao mondo !:
Esempio per le versioni Oracle 10g SQL, Oracle 11g SQLQuesto esempio utilizza un blocco PL/SQL anonimo che scrive un messaggio nell'output standard utilizzando il pacchetto dbms_output.
iniziare dbms_output. put_line ("Ciao, mondo!"); fine;
Fattoriale:
Esempio per le versioni Oracle 10g SQL, Oracle 11g SQLQuesto esempio dimostra il calcolo iterativo del fattoriale utilizzando PL/SQL.
dichiara n numero: = 0; f numero: = 1; iniziare mentre (n<= 16 ) loop dbms_output . put_line (n || "! = " || f ); n : = n + 1 ; f : = f * n ; end loop ; end ;
Numeri di Fibonacci:
Esempio per le versioni Oracle 10g SQL, Oracle 11g SQLQuesto esempio utilizza la determinazione iterativa dei numeri di Fibonacci. I numeri già calcolati sono memorizzati in una struttura dati varray, un analogo di un array.
dichiarare il tipo vector è varray (16) di numero; vettore fib: = vettore (); io numero; s varchar2 (100); iniziare fib. estendere (16); fib (1): = 1; fib (2): = 1; s: = fib (1) || "," || fib (2) || ","; for i in 3 .. 16 loop fib (i): = fib (i - 1) + fib (i - 2); s: = s || fib (i) || ","; fine ciclo; dbms_output. put_line (s || "..."); fine;
Equazione quadrata:
Esempio per le versioni Oracle 10g SQL, Oracle 11g SQLQuesto esempio è stato testato in SQL * Plus, TOAD e PL/SQL Developer.
Pure SQL consente di inserire variabili durante l'esecuzione della query come variabili sostituibili. Per definire tale variabile, il suo nome (in questo caso, A, B e C) deve essere utilizzato con una e commerciale & prima di esso ogni volta che è necessario fare riferimento a tale variabile. Quando la query viene eseguita, all'utente viene richiesto di inserire i valori di tutte le variabili sostituibili utilizzate nella query. Dopo aver inserito i valori, ogni riferimento a tale variabile viene sostituito con il suo valore e la richiesta risultante viene eseguita.
Esistono diversi modi per inserire valori per le variabili di sostituzione. In questo esempio, il primo riferimento a ciascuna variabile è preceduto non da un singolo, ma da una doppia e commerciale &&. Pertanto, il valore per ciascuna variabile viene immesso una sola volta e tutti i successivi riferimenti ad essa verranno sostituiti con lo stesso valore (quando si utilizza una singola e commerciale in SQL * Plus, il valore per ciascun riferimento alla stessa variabile deve essere inserito separatamente) . In PL / SQL Developer, tutti i riferimenti alle variabili devono essere preceduti da un singolo &, altrimenti si verificherà l'errore ORA-01008 "Non tutte le variabili associate".
La prima riga dell'esempio specifica il carattere separatore decimale utilizzato durante la conversione dei numeri radice in stringhe.
La richiesta stessa è composta da quattro diverse richieste. Ogni query restituisce una stringa contenente il risultato del calcolo in uno dei casi (A = 0, D = 0, D> 0 e D<0) и ничего — в трех остальных случаях. Результаты всех четырех запросов объединяются, чтобы получить окончательный результат.
altera il set di sessioni NLS_NUMERIC_CHARACTERS = "."; seleziona "Non è un'equazione quadratica". ans from dual dove && A = 0 union select "x =" || to_char (- && B / 2 / & A) from dual dove & A! = 0 e & B * & B - 4 * & A * && C = 0 union select "x1 =" || to_char ((- & B + sqrt (& B * & B - 4 * & A * & C)) / 2 / & A) || ", x2 =" || to_char (- & B - sqrt (& B * & B - 4 * & A * & C)) / 2 / & A da dual dove & A! = 0 e & B * & B - 4 * & A * & C > 0 union select "x1 = (" || to_char (- & B / 2 / & A) || "," || to_char (sqrt (- & B * & B + 4 * & A * & C) / 2 / & A) || ")," || "x2 = (" || to_char (- & B / 2 / & A) || "," || to_char (- sqrt (- & B * & B + 4 * & A * & C) / 2 / & A ) || ")" da duale dove & A! = 0 e & B * & B - 4 * & A * & C< 0 ;
Structure Query Language (SQL) è stato creato come risultato dello sviluppo del modello di dati relazionali ed è ora lo standard de facto per i sistemi di gestione di database relazionali. Il linguaggio SQL è oggi supportato da un numero enorme di diversi tipi di DBMS.
Il nome del linguaggio SQL è solitamente pronunciato dalle lettere "es-q-el". A volte viene usato il nome mnemonico "See-Quel".
Il linguaggio SQL fornisce all'utente (con il minimo sforzo da parte sua) le seguenti capacità:
Crea database e tabelle con una descrizione completa della loro struttura
Eseguire operazioni di manipolazione dei dati di base: inserire, modificare, eliminare i dati
Eseguire query semplici e complesse.
SQL è completo in modo relazionale.
La struttura e la sintassi dei suoi comandi sono abbastanza semplici e il linguaggio stesso è universale, ovvero la sintassi e la struttura dei suoi comandi non cambiano quando si passa da un DBMS all'altro.
Il linguaggio SQL ha due componenti principali:
Data Definition Language (DDL) per la definizione delle strutture del database e il controllo dell'accesso ai dati
DML (Data Manipulation Language), progettato per recuperare e aggiornare i dati.
Il linguaggio SQL non è procedurale, ovvero, quando lo si utilizza, è necessario indicare quali informazioni devono essere ottenute e non come possono essere ottenute. I comandi SQL sono normali parole inglesi (SELECT, INSERT, ecc.). Esaminiamo prima le istruzioni SQL DML:
SELECT - recupero dei dati dal database
INSERT - inserimento di dati in una tabella
AGGIORNAMENTO - aggiornamento dei dati in una tabella
DELETE - eliminazione dei dati da una tabella
Istruzione SELECT
L'istruzione SELECT esegue operazioni equivalenti alle seguenti operazioni di algebra relazionale: select, proiezione e join.
La query SQL più semplice che la utilizza è simile a questa:
SELECT col_name FROM tbl
La parola chiave select è seguita da un elenco di colonne separate da virgole che verranno restituite dalla query. La parola chiave from specifica da quale tabella (o vista) recuperare i dati.
Il risultato di una query di selezione è sempre una tabella, chiamata tabella dei risultati. Inoltre, i risultati di una query eseguita con l'istruzione select possono essere utilizzati per creare una nuova tabella. Se i risultati di due query su tabelle diverse hanno lo stesso formato, possono essere combinati in un'unica tabella. Inoltre, la tabella ottenuta a seguito della query può diventare oggetto di ulteriori query.
Per selezionare tutte le colonne e tutte le righe di una tabella, basta fare il SELECT * FROM tbl;
Considera la tabella Prodotto, che contiene informazioni sui prezzi per vari tipi di prodotti:
Il risultato della query
SELEZIONA * DA Prodotto;
sarà l'intera tabella Prodotto.
Puoi selezionare colonne specifiche di una tabella usando una query
SELECT col1, col2, ..., coln FROM tbl;
Quindi, il risultato della query
SELEZIONA Tipo, Prezzo DA Prodotto;
ci sarà un tavolo
L'elenco delle colonne nell'istruzione select viene utilizzato anche quando è necessario modificare l'ordine delle colonne nella tabella risultante:
Per selezionare solo le righe della tabella che soddisfano determinate restrizioni, viene utilizzata una parola chiave speciale where, seguita da una condizione booleana. Se un record soddisfa questa condizione, viene incluso nel risultato. In caso contrario, tale voce viene scartata.
Ad esempio, la selezione di quei beni dalla tabella Prodotto, il cui prezzo soddisfa la condizione Prezzo<3200, можно осуществить, используя запрос
SELEZIONA * DA Prodotto dove Prezzo<3200;
Il suo risultato:
La condizione può essere composta e combinata utilizzando gli operatori logici NOT, AND, OR, XOR, ad esempio: dove id_ Price> 500 AND Price<3500. Допускается также использование выражений в условии: where Price>(1 + 1) e costanti stringa: dove nome = "bilanciamento automatico".
L'utilizzo del costrutto BETWEEN var1 AND var2 consente di verificare se i valori di qualsiasi espressione rientrano nell'intervallo da var1 a var2 (inclusi questi valori):
SELEZIONA * FROM Prodotto dove Prezzo TRA 3000 E 3500;
Per analogia con l'operatore NOT BETWEEN, esiste l'operatore NOT IN.
I nomi delle colonne specificati nella clausola SELECT possono essere rinominati. Per questo viene utilizzata la parola chiave AS, che tuttavia può essere omessa, poiché implicitamente implicita. Ad esempio, la richiesta
SELECT Tipo modello AS, Type_id AS num FROM Product dove Type_id = 3
restituirà (i nomi alias devono essere scritti senza virgolette):
L'operatore LIKE serve per confrontare una stringa con un pattern:
SELECT * FROM tbl dove col_name LIKE "abc"
Questa query restituisce solo i record che contengono il valore stringa abc nella colonna col_name.
Nel modello sono consentiti due caratteri jolly: "_" e "%". Il primo sostituisce un carattere arbitrario nel modello e il secondo sostituisce una sequenza di caratteri arbitrari. Quindi, "abc%" corrisponde a qualsiasi stringa che inizia con abc, "abc_" - una stringa di 4 caratteri che inizia con abc, "% z" - una stringa arbitraria che termina con z e, infine, "% z%" - sequenze di caratteri contenenti z.
Puoi trovare tutti i record della tabella Prodotto in cui il valore Tipo inizia con la lettera "a" come segue:
SELECT * FROM Prodotto dove Digitare LIKE "a%";
bilance automatiche |
Se la stringa di ricerca contiene un carattere jolly, è necessario specificare il carattere di controllo nella clausola ESCAPE. Questo carattere di controllo dovrebbe essere utilizzato nel modello prima del carattere jolly, indicando che quest'ultimo dovrebbe essere trattato come un carattere normale. Ad esempio, se in un determinato campo devono essere trovati tutti i valori contenenti il carattere "_", il modello "% _%" risulterà nella restituzione di tutti i record della tabella. In questo caso, il modello dovrebbe essere scritto come segue:
"% | _%" ESCAPE "|"
Per verificare il valore per la conformità con la stringa "20%", è possibile utilizzare il seguente operatore:
MI PIACE "20 #%" ESCAPE "#"
L'operatore IS NULL consente di verificare l'assenza (presenza) di valori NULL nei campi della tabella. L'utilizzo dei normali operatori di confronto in questi casi può portare a risultati errati, poiché il confronto con un valore NULL restituisce UNKNOWN (sconosciuto). Pertanto, la condizione di selezione dovrebbe assomigliare a questa:
dove col_name IS NULL, invece di dove col_name = NULL.
Il risultato della selezione predefinita restituisce i record nello stesso ordine in cui sono archiviati nel database. Se è necessario ordinare i record in base a una delle colonne, è necessario utilizzare la clausola ORDER BY, seguita dal nome di questa colonna:
SELECT * FROM tbl ORDER BY col_name;
Come risultato di questa query, i record verranno restituiti in ordine crescente del valore dell'attributo col_name.
I record possono essere ordinati per più colonne. Per fare ciò, i loro nomi devono essere specificati dopo ORDER BY, separati da virgole:
SELECT * FROM tbl ORDER BY col_name1, col_name2.
I record verranno ordinati in base al campo col_name1; se nella colonna col_name1 sono presenti più record con lo stesso valore, verranno ordinati in base al campo col_name2.
Se si desidera ordinare i record in ordine inverso (ad esempio, decrescente per data), è necessario specificare ORDER BY col_name DESC.
Per l'ordinamento diretto, è presente la parola chiave ASC, che è l'impostazione predefinita.
Se il risultato della selezione contiene centinaia o migliaia di record, il loro output e la loro elaborazione richiedono una notevole quantità di tempo.
Pertanto, le informazioni vengono spesso impaginate e presentate all'utente in blocchi. La navigazione della pagina viene utilizzata con la parola chiave limit seguita dal numero di record da visualizzare. La seguente query recupera i primi 10 record, eseguendo contemporaneamente un ordinamento inverso sul campo col_name1:
SELECT * FROM tbl ORDER BY col_name1 DESC LIMIT 10
Per recuperare i successivi 10 record viene utilizzata la parola chiave limit con due valori: il primo indica la posizione da cui visualizzare il risultato, il secondo indica il numero di record da recuperare:
SELECT * FROM tbl ORDER BY col_name1 DESC LIMIT 10,10
Per recuperare i successivi 10 record, è necessario utilizzare il costrutto LIMIT 20, 10.
Oggi, i corsi SQL per principianti stanno diventando sempre più popolari. Questo può essere spiegato in modo molto semplice, perché nel mondo moderno si possono trovare sempre più servizi web cosiddetti "dinamici". Differiscono in una shell piuttosto flessibile e si basano su Tutti i programmatori alle prime armi che decidono di dedicare siti, prima di tutto, si iscrivono a corsi SQL "for dummies".
Perché imparare questa lingua?
Prima di tutto, SQL viene insegnato per creare ulteriormente un'ampia varietà di applicazioni per uno dei motori di blog più popolari oggi: WordPress. Dopo aver completato alcune semplici lezioni, puoi già creare query di qualsiasi complessità, il che conferma solo la semplicità di questo linguaggio.
Che cos'è SQL?
O linguaggio di query strutturato, è stato creato con un unico scopo: definirli e fornirne l'accesso ed elaborarli in periodi di tempo abbastanza brevi. Se conosci il valore SQL, allora capirai che questo server appartiene ai cosiddetti linguaggi "non procedurali". Cioè, le sue capacità includono solo una descrizione di qualsiasi componente o risultato che desideri vedere in futuro sul sito. Ma non indica esattamente quali risultati otterrà. Ogni nuova richiesta in questa lingua è, per così dire, un "add-on" aggiuntivo. È nell'ordine in cui vengono inseriti nel database che verranno eseguite le query.
Quali procedure possono essere eseguite utilizzando questo linguaggio?
Nonostante la sua semplicità, il database SQL consente di creare una varietà abbastanza ampia di query. Quindi cosa puoi fare se impari questo importante linguaggio di programmazione?
- creare un'ampia varietà di tabelle;
- ricevere, archiviare e modificare i dati ricevuti;
- modificare le strutture dei tavoli a tua discrezione;
- combinare le informazioni ricevute in singoli blocchi;
- calcolare i dati ricevuti;
- garantire la protezione completa delle informazioni.
Quali sono i comandi più popolari in questa lingua?
Se decidi di frequentare il corso SQL Dummies, riceverai informazioni dettagliate sui comandi che vengono utilizzati nella creazione di query con esso. I più comuni oggi sono:
- DDL è un comando che definisce i dati. Viene utilizzato per creare, modificare ed eliminare un'ampia varietà di oggetti nel database.
- DCL è un comando che gestisce i dati. Viene utilizzato per fornire a diversi utenti l'accesso alle informazioni nel database, nonché per utilizzare tabelle o viste.
- TCL è un team che gestisce vari tipi di transazioni. Il suo scopo principale è determinare lo stato di avanzamento di una transazione.
- DML - manipola i dati ricevuti. Il suo compito è consentire all'utente di spostare varie informazioni dal database o inserirle lì.
I tipi di privilegi che esistono su questo server
I privilegi sono quelle azioni che un determinato utente può eseguire in base al proprio stato. Il più minimo, ovviamente, è il login regolare. I privilegi possono cambiare nel tempo, ovviamente. I vecchi verranno rimossi e i nuovi verranno aggiunti. Oggi, tutti coloro che seguono i corsi SQL Server "For Dummies" sanno che ci sono diversi tipi di azioni consentite:
- Tipo di oggetto: l'utente può eseguire qualsiasi comando solo in relazione a un oggetto specifico presente nel database. Allo stesso tempo, i privilegi differiscono per i diversi oggetti. Inoltre si legano non solo a un particolare utente, ma anche alle tabelle. Se qualcuno, usando le proprie capacità, ha creato una tabella, allora è considerato il suo proprietario. Pertanto, ha il diritto di assegnare nuovi privilegi ad altri utenti relativi alle informazioni in esso contenute.
- Il tipo di sistema è il cosiddetto copyright dei dati. Gli utenti che hanno ricevuto tali privilegi possono creare vari oggetti nel database.
Storia della creazione di SQL
Questo linguaggio è stato creato dal laboratorio di ricerca IBM nel 1970. A quel tempo il suo nome era un po' diverso (SEQUEL), ma dopo alcuni anni di utilizzo è stato cambiato, leggermente accorciato. Nonostante questo, ancora oggi, molti noti esperti mondiali nel campo della programmazione pronunciano ancora il nome alla vecchia maniera. SQL è stato creato con un unico obiettivo: inventare un linguaggio così semplice che anche i normali utenti di Internet potrebbero impararlo senza problemi. Un fatto interessante è che a quel tempo SQL non era l'unico linguaggio del genere. In California, un altro gruppo di esperti ha sviluppato un Ingres simile, ma non si è mai diffuso. Prima del 1980, esistevano diverse varianti di SQL che erano solo leggermente diverse l'una dall'altra. Per evitare confusione, nel 1983 è stata creata una versione standard, che è ancora popolare oggi. I corsi SQL Dummies ti consentono di imparare molto di più sul servizio e di padroneggiarlo completamente in poche settimane.
Linguaggio di query strutturato o SQLè un linguaggio di programmazione dichiarativo per l'uso in database quasi relazionali. Molte delle funzionalità SQL originali sono state prese per il calcolo delle tuple, ma le recenti estensioni a SQL includono sempre più algebra relazionale.
SQL è stato originariamente creato da IBM, ma molti fornitori hanno sviluppato i propri dialetti. È stato adottato come standard dall'American National Standards Institute (ANSI) nel 1986 e dall'ISO nel 1987. Nello standard del linguaggio di programmazione SQL, ANSI ha affermato che la pronuncia ufficiale di SQL è "es que el". Tuttavia, molti nel database utilizzavano la pronuncia slang di Sequel, che riflette il nome originale della lingua, Sequel, che è stato successivamente modificato a causa di un conflitto tra marchio e nome tra IBM. Programmazione per principianti.
Linguaggio di programmazione SQLè stato rivisto nel 1992 e questa versione è nota come SQL-92 in. Quindi 1999 è stato rivisto di nuovo per diventare SQL: 1999 (AKA SQL3). Programmazione per manichini. SQL 1999 supporta oggetti che non erano precedentemente supportati in altre versioni, ma solo alla fine del 2001 solo alcuni sistemi di gestione di database supportavano le implementazioni SQL: 1999.
SQL, sebbene definito come ANSI e ISO, ha molte varianti ed estensioni, la maggior parte delle quali ha le proprie caratteristiche, come l'implementazione PL / SQL di Oracle Corporation o Sybase e l'implementazione Transact-SQL di Microsoft, che possono confondere le basi della programmazione. Inoltre, non è raro che le implementazioni commerciali omettano il supporto per le caratteristiche principali dello standard, come i tipi di dati come data e ora, preferendo la propria versione. Di conseguenza, a differenza di ANSI C o ANSI Fortran, che di solito possono essere trasferiti da una piattaforma all'altra senza grandi cambiamenti strutturali, le query SQL raramente possono essere trasferite tra diversi sistemi di database senza grandi modifiche. La maggior parte delle persone nel campo dei database crede che questa mancanza di compatibilità sia intenzionale per fornire a ogni sviluppatore il proprio sistema di gestione del database e legare il cliente a un database specifico.
Come suggerisce il nome, il linguaggio di programmazione SQL è progettato per uno scopo specifico e limitato: interrogare i dati contenuti in un database relazionale. In quanto tale, è un insieme di istruzioni del linguaggio di programmazione per la creazione di campioni di dati, piuttosto che un linguaggio procedurale come C o BASIC, progettato per risolvere una gamma molto più ampia di problemi. Le estensioni del linguaggio come "PL/SQL" sono progettate per affrontare questa limitazione aggiungendo elementi procedurali per SQL pur mantenendo i vantaggi di SQL. Un altro approccio consiste nel consentire alle query SQL di incorporare comandi del linguaggio di programmazione procedurale e interagire con il database. Ad esempio, Oracle e altri supportano il linguaggio Java in un database, mentre PostgreSQL consente di scrivere funzioni in Perl, Tcl o C.
Una battuta su SQL: "SQL non è né strutturato né un linguaggio". Lo scherzo è che SQL non è un linguaggio di Turing. ...
do1 | do2 |
---|---|
1 | un |
2 | B |
do1 | do2 |
---|---|
1 | un |
2 | B |
do1 |
---|
1 |
2 |
do1 | do2 |
---|---|
1 | un |
2 | B |
do1 | do2 |
---|---|
1 | un |
Data una tabella T, la query Seleziona * da T visualizzerà tutti gli elementi di tutte le righe della tabella.
Dalla stessa tabella, la query Seleziona C1 da T visualizzerà gli elementi dalla colonna C1 di tutte le righe della tabella.
Dalla stessa tabella, la query Seleziona * da T dove C1 = 1 visualizzerà tutti gli elementi di tutte le righe in cui il valore della colonna C1 è "1".
Parole chiave SQL
Le parole SQL sono divise in diversi gruppi.
Il primo è Linguaggio di manipolazione dei dati o DML(linguaggio di gestione dei dati). DML è un sottoinsieme del linguaggio utilizzato per interrogare i database, aggiungere, aggiornare ed eliminare dati.
- SELECT è uno dei comandi DML più comunemente utilizzati e consente all'utente di specificare una query come una descrizione insieme del risultato desiderato. La query non specifica come dovrebbero essere localizzati i risultati: tradurre la query in un modulo che può essere eseguito nel database è compito del sistema di database, in particolare dell'ottimizzatore di query.
- INSERT viene utilizzato per aggiungere righe (set formale) a una tabella esistente.
- UPDATE viene utilizzato per modificare i valori dei dati in una riga esistente in una tabella.
- DELETE definizione delle righe esistenti da eliminare dalla tabella.
Si può dire che altre tre parole chiave rientrino nel gruppo DML:
- BEGIN WORK (o START TRANSACTION, a seconda del dialetto SQL) può essere utilizzato per contrassegnare l'inizio di una transazione di database che viene eseguita completamente o non viene eseguita affatto.
- COMMIT stabilisce che tutti i dati vengono modificati dopo che le operazioni sono state salvate.
- ROLLBACK specifica che tutte le modifiche ai dati dall'ultimo commit o rollback devono essere distrutte, fino al momento in cui è stato eseguito il commit nel database come "rollback".
COMMIT e ROLLBACK vengono utilizzati in aree quali il controllo e il blocco delle transazioni. Entrambe le istruzioni terminano tutte le transazioni correnti (insiemi di operazioni sul database) e rilasciano tutti i blocchi alla modifica dei dati nelle tabelle. La presenza o l'assenza di BEGIN WORK o di un'istruzione simile dipende dall'implementazione SQL specifica.
Il secondo gruppo di parole chiave appartiene al gruppo Linguaggio di definizione dei dati o DDL (linguaggio di definizione dei dati). DDL consente all'utente di definire nuove tabelle e relativi elementi. La maggior parte dei database SQL commerciali ha le proprie estensioni DDL che consentono il controllo su elementi non standard, ma solitamente vitali di un particolare sistema.
I punti principali di DDL sono i comandi di creazione ed eliminazione.
- CREATE definisce gli oggetti (come le tabelle) da creare nel database.
- DROP determina quali oggetti esistenti nel database verranno eliminati, di solito in modo permanente.
- Alcuni sistemi di database supportano anche il comando ALTER, che consente all'utente di modificare un oggetto esistente in modi diversi, ad esempio aggiungendo colonne a una tabella esistente.
Il terzo gruppo di parole chiave SQL è Linguaggio di controllo dei dati o DCL (linguaggio di controllo dei dati). DCLè responsabile dei diritti di accesso ai dati e consente all'utente di controllare chi ha accesso per visualizzare o manipolare i dati nel database. Ci sono due parole chiave principali qui:
- CONCESSIONE - Consente all'utente di eseguire operazioni
- REVOCA - rimuove o limita la capacità dell'utente di eseguire operazioni.
Sistemi di database che utilizzano SQL
- InterBase
- MySQL
- Oracolo
- PostgreSQL
- server SQL
Come diventare un professionista nello sviluppo di siti web e iniziare a guadagnare? Video corsi economici con un'introduzione introduttiva.
Lingua SQL
Quindi, in termini generali, abbiamo familiarizzato con i concetti di base della teoria dei database, installato e configurato MySQL per funzionare. Ora è il momento di imparare a manipolare i dati archiviati nei database. Per questo abbiamo bisogno SQL - Structured Query Language. Questo linguaggio consente di creare, modificare ed eliminare le informazioni archiviate nei database, creare nuovi database e molto altro. SQL è uno standard ANSI (American National Standards Institute) e ISO (International Organization for Standardization).
Un po' di storia
Primo standard linguistico internazionale SQL è stato adottato nel 1989, è spesso chiamato SQL/89 ... Tra i difetti di questo standard, il primo è il fatto che imposta molte proprietà importanti come definite nell'implementazione. Quindi, c'erano molte discrepanze nelle implementazioni linguistiche di diversi produttori. Inoltre, è stato affermato che lo standard non menziona gli aspetti pratici del linguaggio, come il suo inserimento nel linguaggio di programmazione C.
Il prossimo standard linguistico internazionale SQL è stato adottato alla fine del 1992 ed è diventato noto come SQL/92 ... Si è rivelato molto più accurato e completo di SQL/89 , anche se non era privo di difetti. La maggior parte dei sistemi oggigiorno implementa quasi completamente questo standard. Tuttavia, come sai, il progresso non può essere fermato e nel 1999 è apparso un nuovo standard. SQL : 1999, noto anche come SQL3... SQL3 è caratterizzato come "orientato agli oggetti SQL “Ed è la spina dorsale di diversi sistemi di gestione di database relazionali a oggetti (ad esempio, ORACLE8 di Oracle, Universal Server di Informix e DB2 Universal Database di IBM). Questo standard non è solo una fusione SQL-92 e la tecnologia degli oggetti. Contiene una serie di estensioni al tradizionale SQL , e il documento stesso è redatto in modo tale da realizzare in futuro un lavoro più efficace nel campo della standardizzazione.
Quando si tratta di MySQL, è SQL92 entry-level, contiene diverse estensioni dello standard e si sforza di supportare completamente lo standard ANSI SQL99, ma senza sacrificare la velocità e la qualità del codice.
Inoltre, parlando delle basi della lingua SQL , ci atterremo alla sua implementazione nel DBMS MySQL.
Operatori di base della lingua SQL
Le funzioni di qualsiasi DBMS includono:
- creazione, cancellazione, modifica di un database (DB);
- aggiunta, modifica, eliminazione, assegnazione di diritti utente;
- inserimento, cancellazione e modifica dei dati nel database (tabelle e record);
- recuperare i dati dal database.
Solo gli amministratori DBMS o gli utenti privilegiati hanno accesso alle prime due funzioni. Consideriamo come vengono risolti gli ultimi due compiti (infatti, questi sono sette compiti).
Prima di fare qualsiasi cosa con i dati, è necessario creare tabelle in cui verranno archiviati questi dati, imparare come modificare la struttura di queste tabelle ed eliminarle, se necessario. Per questo in lingua SQL ci sono operatori CREA TABELLA, ALTER TABLE e TABELLA DROP.
Istruzione CREATE TABLE
mysql> CREATE TABLE Persone (id INT PRIMARY KEY AUTO_INCREMENT, nome VARCHAR (50), cognome VARCHAR (100), data_morte INT, descrizione TEXT, foto INT, cittadinanza CHAR (50) DEFAULT "Russia"); Esempio 10.1. Creazione della tabella Persone
Con il comando SHOW specifico di MySql, puoi visualizzare database esistenti, tabelle in un database e campi in una tabella.
Mostra tutti i database:
mysql> MOSTRA database;
Crea il libro del database corrente e mostra tutte le tabelle al suo interno:
mysql> usa libro; mysql> mostra tabelle;
Mostra tutte le colonne nella tabella Persone:
mysql> mostra colonne da Persone;
Dichiarazione DROP TABLE
Operatore TABELLA DROP elimina una o più tabelle. Tutti i dati e le definizioni della tabella vengono rimossi, quindi fai attenzione quando usi questo comando.
Sintassi:
DROP TABLE nome_tabella [, nome_tabella, ...]
In MySQL 3.22 e versioni successive, le parole chiave IF EXISTS possono essere utilizzate per prevenire un errore se le tabelle specificate non esistono.
Le opzioni RESTRICT e CASCADE semplificano il porting del programma da altri DBMS. Al momento non sono coinvolti.
mysql> DROP TABLE IF EXISTS Persone, Artefatti, test; Esempio 10.2. Utilizzo dell'istruzione DROP TABLE
Dichiarazione ALTER TABLE
Operatore ALTER TABLE fornisce la possibilità di modificare la struttura di una tabella esistente. Ad esempio, puoi aggiungere o rimuovere colonne, creare o eliminare indici o rinominare le colonne o la tabella stessa. Puoi anche modificare il commento per la tabella e il suo tipo.
Sintassi:
ALTER TABLE nome_tabella alter_specification [, alter_specification ...]
Puoi apportare le seguenti modifiche alla tabella (tutte sono registrate in alter_specification):
- aggiungendo un campo:
AGGIUNGI definizione_colonna
AGGIUNGI (definizione_colonna, definizione_colonna, ...)
- aggiungendo indici:
INSERISCI INDICE [nome_indice] (nome_indice_colonna, ...) o AGGIUNGI CHIAVE PRIMARIA (nome_colonna_indicizzata, ...) o AGGIUNGI UNICO [nome_indice] (nome_indice_colonna, ...) o AGGIUNGI TESTO COMPLETO [nome_indice] (nome_indice_colonna, ...)
- cambio campo:
ALTER nome_colonna (SET DEFAULT letterale | DROP DEFAULT) o CAMBIARE nome_colonna_vecchia colonna_definizione o MODIFICA definizione_colonna
- eliminazione di un campo, indice, chiave:
DROP nome_colonna DROP CHIAVE PRIMARIA DROP INDEX nome_indice
- rinominare la tabella:
RINOMINA nuovo_nome_tabella
- riordinare i campi della tabella:
campo ORDINA PER
table_options
Se l'operatore ALTER TABLEè usato per cambiare la definizione del tipo di colonna, ma DESCRIVI nome_tabella mostra che la colonna non è cambiata, quindi, forse, MySQL ignora questa modifica per uno dei motivi descritti in una sezione speciale della documentazione. Ad esempio, quando si tenta di modificare una colonna VARCHAR in CHAR, MySQL continuerà a utilizzare VARCHAR se la tabella specificata contiene altre colonne di lunghezza variabile.
Operatore ALTER TABLE crea una copia temporanea della tabella originale in fase di esecuzione. La modifica richiesta viene eseguita sulla copia, quindi la tabella originale viene eliminata e quella nuova viene rinominata. Questo viene fatto in modo che tutti gli aggiornamenti, ad eccezione di quelli non riusciti, vengano automaticamente inclusi nella nuova tabella. In fase di esecuzione ALTER TABLE la tabella originale è leggibile da altri client. Gli aggiornamenti e le scritture su questa tabella vengono sospesi finché la nuova tabella non è pronta. Va notato che quando si utilizza qualsiasi altra opzione per ALTER TABLE diversa da RENAME, MySQL creerà sempre una tabella temporanea, anche se i dati, in senso stretto, non devono essere copiati (ad esempio, se il nome di una colonna è cambiato).
Esempio10.3... Aggiungi un campo alla tabella Persone creata per registrare l'anno di nascita della persona:
mysql> ALTER TABLE Persone ADD bday INTEGER AFTER cognome; Esempio 10.3. Aggiunta di un campo alla tabella Persone per registrare l'anno di nascita di una persona
Quindi, abbiamo imparato a lavorare con le tabelle: crearle, eliminarle e modificarle. Ora scopriamo come fare lo stesso con i dati archiviati in queste tabelle.
Istruzione SELECT
Operatore SELEZIONARE viene utilizzato per recuperare le righe selezionate da una o più tabelle. Cioè, con il suo aiuto, impostiamo le colonne o le espressioni da recuperare (select_expressions), le tabelle (table_references) da cui dovrebbe essere fatta la selezione e, possibilmente, la condizione (where_definition) che i dati in queste colonne dovrebbero corrispondere a, e l'ordine in cui questi dati devono essere rilasciati.
Inoltre, l'operatore SELEZIONARE può essere utilizzato per recuperare righe calcolate senza fare riferimento ad alcuna tabella. Ad esempio, per calcolare quanto fa 2 * 2, devi solo scrivere
mysql> SELEZIONA 2 * 2;
Struttura dell'operatore semplificata SELEZIONARE può essere rappresentato come segue:
Le parentesi quadre indicano che l'operatore racchiuso è opzionale, il tubo | indica un elenco di possibili opzioni. Dopo la parola chiave ORDER BY, specificare il nome della colonna, il numero (intero senza segno) o la formula e il metodo di ordinamento (crescente - ASC o decrescente - DESC). L'ordine crescente viene utilizzato per impostazione predefinita.
Quando scriviamo "*" in select_expression, significa selezionare tutte le colonne. Oltre a "*", funzioni come max, min e avg possono essere utilizzate in select_expression.
Esempio 10.4... Seleziona dalla tabella Persone tutti i dati per i quali il campo nome ha il valore "Alessandro":
Seleziona il titolo e la descrizione (titolo, descrizione) del manufatto al numero 10:
INSERISCI dichiarazione
Operatore INSERIRE inserisce nuove righe in una tabella esistente. L'operatore ha diverse forme. Il parametro table_name in tutti questi moduli specifica la tabella in cui devono essere inserite le righe. Le colonne da impostare sono specificate nell'elenco dei nomi delle colonne (column_name) o nella parte SET.
Sintassi:
INSERT nome_tabella [(nome_colonna, ...)] VALUES (espressione, ...), (...), ...
Questo modulo di comando INSERIRE inserisce righe in base ai valori esatti specificati nel comando. Le colonne sono elencate tra parentesi dopo il nome della tabella e i loro valori sono elencati dopo la parola chiave VALUES.
Ad esempio:
mysql> INSERT INTO Persone (cognome, compleanno) VALUES ("Ivanov", "1934");
inserirà una riga nella tabella Persone, in cui i valori del cognome (cognome) e della data di nascita (compleanno) verranno specificati rispettivamente come "Ivanov" e "1934".
INSERISCI nome_tabella [(nome_colonna, ...)] SELEZIONARE ...
Questo modulo di comando INSERIRE inserisce le righe selezionate da altre tabelle o tabelle.
Ad esempio:
inserirà nella tabella Artefatti nel campo "autore" (autore) il valore dell'identificatore selezionato dalla tabella Persone a condizione che il cognome della persona sia Ivanov.
INSERT nome_tabella SET nome_colonna = espressione, nome_colonna = espressione, ...
Ad esempio:
mysql> INSERT INTO Persone SET cognome = "Petrov", nome = "Ivan";
Questo comando inserirà nella tabella Persone nel campo cognome il valore "Petrov", e nel campo nome - la stringa "Ivan".
Modulo INSERIRE...VALORI l'elenco multivalore è supportato in MySQL versione 3.22.5 e successive. Sintassi dell'espressione nome_colonna = espressione supportato in MySQL versione 3.22.10 e successive.
Si applicano i seguenti accordi.
- Se non è specificato alcun elenco di colonne per INSERIRE...VALORI o INSERISCI ... SELEZIONA, quindi i valori per tutte le colonne devono essere definiti nell'elenco VALUES () o come risultato di SELEZIONARE... Se l'ordine delle colonne nella tabella è sconosciuto, puoi usarlo per ottenerlo DESCRIVI nome_tabella.
- Qualsiasi colonna a cui non è assegnato un valore in modo esplicito verrà impostata sul valore predefinito. Ad esempio, se un determinato elenco di colonne non include tutte le colonne di una determinata tabella, le colonne non menzionate vengono impostate sui valori predefiniti.
- L'espressione può fare riferimento a qualsiasi colonna precedentemente elencata nell'elenco dei valori. Ad esempio, puoi specificare quanto segue:
mysql> INSERT INTO nome_tabella (col1, col2) VALUES (15, col1 * 2);
Ma non puoi specificare:
mysql> INSERT INTO nome_tabella (col1, col2) VALUES (col2 * 2.15);
Non abbiamo ancora discusso i tre parametri opzionali presenti in tutte e tre le forme del comando: LOW_PRIORITY, DELAYED e IGNORE.
I parametri LOW_PRIORITY e DELAYED vengono utilizzati quando un numero elevato di utenti sta lavorando sulla tabella. Prescrivono di impostare la priorità di questa operazione sulle operazioni di altri utenti. Se viene specificata la parola chiave LOW_PRIORITY, l'esecuzione di questo comando INSERIRE verrà ritardato fino a quando altri client non finiranno di leggere questa tabella. In questo caso, il client deve attendere il completamento di questo comando di inserimento, il che può richiedere molto tempo se la tabella viene utilizzata molto. Al contrario, il comando INSERIMENTO RITARDATO consente a un determinato client di procedere immediatamente, indipendentemente dagli altri utenti.
Se la squadra INSERIRE viene specificata la parola chiave IGNORE, quindi tutte le righe che hanno chiavi duplicate PRIMARIO o UNICO in questa tabella verrà ignorato e non incluso nella tabella. Se IGNORE non è specificato, questa operazione di inserimento viene terminata quando viene rilevata una riga con un valore di chiave esistente duplicato.
AGGIORNAMENTO dichiarazione
Sintassi:
Operatore AGGIORNARE aggiorna i valori delle colonne della tabella esistenti in base ai valori inseriti. L'istruzione SET specifica quali colonne devono essere modificate e quali valori devono essere impostati in esse. La clausola WHERE, se presente, specifica quali righe aggiornare. In caso contrario, tutte le righe vengono aggiornate. Se viene specificata una clausola ORDER BY, le righe verranno aggiornate nell'ordine in essa specificato.
Se viene specificata la parola chiave LOW_PRIORITY, l'esecuzione di questo comando AGGIORNARE ritardi fino a quando altri client non finiscono di leggere questa tabella.
Se viene specificata la parola chiave IGNORE, il comando di aggiornamento non verrà interrotto anche se si verifica un errore di chiave duplicata. Le righe in conflitto non verranno aggiornate.
Se l'espressione che specifica il nuovo valore per la colonna utilizza il nome di questo campo, allora il comando AGGIORNARE utilizza il valore corrente per questa colonna. Ad esempio, il comando seguente imposta la colonna death_date su uno maggiore del suo valore corrente:
mysql> UPDATE Persone SET death_date = death_date + 1;
A partire da MySQL 3.23, il parametro LIMIT # può essere utilizzato per garantire che sia stato modificato solo un determinato numero di righe.
Ad esempio, tale operazione sostituirà il titolo del titolo nella prima riga della nostra tabella delle esposizioni con la riga "Lampada computer":
mysql> UPDATE Artifacts SET title = "(! LANG: Lamp computer" Limit 1;!}
Dichiarazione DELETE
Operatore ELIMINARE rimuove le righe dalla tabella table_name che soddisfano le condizioni specificate in where_definition e restituisce il numero di record eliminati.
Se l'operatore ELIMINARE viene avviato senza una definizione WHERE, quindi tutte le righe vengono eliminate.
Sintassi:
Ad esempio, il seguente comando eliminerà dalla tabella Persone