Questa appendice contiene una descrizione più concisa dei vari comandi SQL. L'obiettivo è fornire un riferimento e una definizione SQL rapidi e precisi. La prima sezione di questa appendice definisce gli elementi utilizzati per creare i comandi SQL; secondo, dettagli di sintassi e frasi con una breve descrizione dei comandi stessi. Le seguenti sono convenzioni standard (chiamate termini BNF):
Inoltre, utilizzeremo la seguente sequenza (., ..) per indicare che la precedente può essere ripetuta un numero qualsiasi di volte, con singoli eventi separati da virgole. Gli attributi che non fanno parte dello standard ufficiale saranno contrassegnati come (* non standard *) nella descrizione.
NOTA BENE: la terminologia che usiamo qui non è terminologia ANSI ufficiale. La terminologia ufficiale può essere molto confusa, quindi l'abbiamo semplificata un po'.
Per questo motivo, a volte utilizziamo termini diversi da ANSI o utilizziamo gli stessi termini in modo leggermente diverso. Ad esempio, la nostra definizione è -< predicate >differisce dalla combinazione di definizione dello standard ANSI< predicate >insieme a< search condition >.
ELEMENTI SQL
Questa sezione definisce gli elementi dei comandi SQL. Si dividono in due categorie: Elementi di base della lingua, e Elementi funzionali del linguaggio.
Elementi principali- questi sono i blocchi della lingua da creare; quando SQL esamina un comando, valuta prima ogni carattere nel testo del comando in termini di quegli elementi. separatori< separator >separare una parte della squadra dall'altra; tutto tra i delimitatori< separator >gestito come un modulo. Sulla base di questa separazione, SQL interpreta il comando.
Elementi funzionali sono varie cose diverse dalle parole chiave che possono essere interpretate come moduli. Queste sono le parti del comando, separate da separatori.< separator >che hanno un significato speciale in SQL. Alcuni di essi sono specifici di determinati comandi e verranno descritti con questi comandi più avanti in questa appendice. Di seguito sono elencati gli elementi comuni a tutti i comandi descritti. Gli elementi possono essere definiti l'uno rispetto all'altro o anche in base ai propri. Ad esempio, il predicato< predicate >, il nostro ultimo e più difficile caso, contiene un predicato all'interno della sua stessa definizione. Questo perché il predicato< predicate >l'uso di AND o OR può contenere un numero qualsiasi di predicati< predicate >che può lavorare in autonomia. Ti abbiamo presentato il predicato< predicate >in una sezione separata di questa appendice, per la varietà e la complessità di questo elemento funzionale del linguaggio. Sarà costantemente presente quando discuterà altre parti funzionali dei comandi.
ELEMENTI DI LINGUAGGIO DI BASE
ARTICOLO DEFINIZIONE< separator > < comment > | < space > | < newline > < comment > --< string > < newline > < space >spazio< newline >fine definita dall'implementazione di una stringa di caratteri< identifier > < letter >[{< letter or digit > | < underscore}... ] < ИМЕЙТЕ ВВИДУ: Следу строгому стандарту ANSI, символы должны быть набраны в верхнем регистра, а идентификатор < identifier >non deve essere più lungo di 18 caratteri. ARTICOLO DEFINIZIONE< underscore > - < percent sign > % < delimiter >uno dei seguenti:, ()< > . : = + " - | <> > = < = или < string > < string >[qualsiasi testo stampabile tra virgolette singole] Nota: In< string >, due apici consecutivi ("") vengono interpretati come uno (").< SQL term >il finale dipende dalla lingua principale. (* solo annidato *)
ELEMENTI FUNZIONALI
La tabella seguente mostra gli elementi funzionali dei comandi SQL e le loro definizioni: ITEM DEFINITION< query >clausola SELECT< subquery >Una clausola SELECT racchiusa tra parentesi all'interno di un'altra clausola, che, di fatto, viene valutata separatamente per ogni riga candidata dell'altra clausola.< value expression > < primary > | < primary > < operator > < primary > | < primary > < operator > < value expression > < operator >uno dei seguenti: + - / *< primary > < column name > | < literal > | < aggregate function > | < built-in constant > | < nonstandard function > < literal > < string > | < mathematical expressio ЭЛЕМЕНТ ОПРЕДЕЛЕНИЕ < built-in constant >UTENTE |< implementation-dehned constant > < table name > < identifier > < column spec > [< table name > | < alias >.]< column name > < grouping column > < column spec > | < integer > < ordering column > < column spec > | < integer > < colconstraint >NON NULL | UNICO | DAI UN'OCCHIATA (< predicate >) | CHIAVE PRIMARIA | RIFERIMENTI< table name >[(< column name >)] < tabconstraint >UNICO (< column list >) | DAI UN'OCCHIATA (< predicate >) | CHIAVE PRIMARIA (< column list >) | CHIAVE ESTERA (< column list >) RIFERIMENTI< table name >[(< column list >)] < defvalue >VALORE PREDEFINITO =< value expression > < data type >Tipo di dati valido (consultare l'appendice B per le descrizioni dei tipi forniti da ANSI o l'appendice C per altri tipi generici).< size >Il valore dipende da< data type >(Vedi Appendice B.)< cursor name > < identifier > < index name > < identifier > < synonym > < identifier >(* non standard *)< owner > < Authorization ID > < column list > < column spec > .,.. < value list > < value expression > .,.. < table reference > { < table name > [< alias >] } .,..PREDICATI
Quanto segue definisce un elenco di diversi tipi di predicato< predicate >descritto nelle pagine seguenti:
< predicate > ::=
{ < comparison predicate > | < in predicate > | < null predicate > | < between predicate > | < like predicate > | < quantified predicate > | < exists predicate > } < predicate >è un'espressione che può essere vera, falsa o sconosciuta, eccetto< exists predicate >e< null predicate >che può essere solo vero o falso.
Non sarà noto se i valori NULL impediscono l'output della risposta restituita. Ciò accadrà ogni volta che un valore NULL viene confrontato con qualsiasi valore. Gli operatori booleani standard AND, OR e NOT possono essere utilizzati con un predicato. NOT true = false, NOT false = true e NOT unknown = sconosciuta. I risultati di AND e OR in combinazione con i predicati sono mostrati nelle seguenti tabelle:
AND AND Vero Falso Sconosciuto Vero Vero Falso Sconosciuto Falso Falso Falso Falso Sconosciuto Sconosciuto Sconosciuto Sconosciuto Sconosciuto OR Vero Falso Sconosciuto Vero Vero Vero Vero Falso Vero Sconosciuto Sconosciuto Sconosciuto Vero Sconosciuto Sconosciuto
Queste tabelle vengono lette in modo simile a una tabella di moltiplicazione: si concatenano i valori veri, errati o sconosciuti dalle righe con le relative colonne per ottenere il risultato sul mirino. In una tabella AND, ad esempio, la terza colonna (Sconosciuto) e la prima riga (Vero) all'intersezione nell'angolo in alto a destra danno il risultato - sconosciuto, in altre parole: Vero AND Sconosciuto = sconosciuto. L'ordine dei calcoli è specificato tra parentesi. Non si presentano ogni volta. NOT viene valutato per primo, seguito da AND e OR. Diversi tipi di predicati< predicate >sono discussi separatamente nella sezione successiva.
< comparison predicate >(predicato di confronto)
Sintassi
< value expresslon > < relational op > < value expresslon >
|
< subquery >
< relatlonal op > :: =
=
| <
|
>
| <
| >=
| < >
Se uno dei due< value expression >= NULL, o< comparison predicate
>= sconosciuto; in altre parole, è vero se il confronto è vero o falso se il confronto è falso.
< relational op >ha significati matematici standard per i valori numerici; per altri tipi di valore, questi valori sono specifici dell'implementazione.
Entrambi< value expression >devono avere tipi di dati comparabili. Se la sottoquery< subquery >utilizzato, deve contenere un'espressione< value expression >nella clausola SELECT il cui valore sostituirà la seconda espressione< value
expression >nel predicato di confronto< comparision predicate >, ogni volta che< subquery >è effettivamente adempiuto.
< between predicate >
Sintassi
< value expression >TRA< value expression >
E< value expression >
< between predicate >- A TRA B E C, ha lo stesso significato di< predicate >- (A> = B AND< = C). < between predicate >per cui A NOT TRA B E C ha lo stesso significato di NOT (TRA B E C).< value expression >può essere emesso utilizzando una query non standard< subquery >(* non standard *).
< in prediicate >
Sintassi
< value expression >IN< value list > | < subquery
>
Elenco dei valori< value list >sarà costituito da uno o più dei valori elencati tra parentesi e separati da virgole che siano paragonabili a< value expression >tipo di dati. Se viene utilizzata una sottoquery< subquery >, dovrebbe contenere solo un'espressione< value expression >nella clausola SELECT (forse di più, ma questo sarà al di fuori dello standard ANSI). Sottoquery< subquery >infatti, viene eseguito separatamente per ogni riga candidata della query principale, e i valori che emette formeranno un elenco di valori< value list >per questa linea. In ogni caso, il predicato< in predicate >sarà vero se espressione< value expression >rappresentato in una lista di valori< value list >se NON è specificato. La frase A NOT IN (B, C) è equivalente alla frase NOT (A IN (B, C)).
< like predicate >
Sintassi
< charvalue >COME< pattern >
< charvalue >è una qualsiasi * espressione * non standard< value expression >tipo alfanumerico.< charvalue >forse, secondo lo standard, solo una colonna specifica< column spec >... Campione< pattern >consiste in una stringa che verrà confrontata con< charvalue >... Simbolo di fine< escapechar >è un singolo carattere alfanumerico. Si verificherà una corrispondenza se le seguenti condizioni sono vere:
Se si verifica una partita,< like predicate >- true se NOT non è stato specificato. La frase NOT LIKE "testo" è equivalente a NOT (A LIKE "testo").
< null predicate >
Sintassi
< column spec >È ZERO
< column spec >= IS NULL se in questa colonna è presente un valore NULL. questo andrà bene< null predicate >valido se non viene specificato NULL. Frase< column spec >NON È NULL, ha lo stesso effetto di NOT (< column spec >È ZERO).
< quantified predicate >
Sintassi
< value expression > < relational op >
< quantifier >
< subquery >
< quantifier >:: = QUALSIASI | TUTTI | ALCUNI
Clausola SELECT di una sottoquery< subquery >deve contenere una e una sola espressione di valore< value expression >... Tutti i valori restituiti dalla sottoquery< subquery >comporre una serie di risultati< result set >. < value expression >rispetto utilizzando il vettore< relational operator >, con ogni membro del set di risultati< result set >... Questo confronto viene valutato come segue:
< exists predicate >
Sintassi:
ESISTE (< subquery >)
Se la sottoquery< subquery >stampa una o più righe di output,< exists predicate >- è corretta; ed è errato se altrimenti.
COMANDI SQL
Questa sezione descrive in dettaglio la sintassi di vari comandi SQL. Questo ti darà la possibilità di cercare rapidamente un comando, trovarne la sintassi e una breve descrizione di come funziona.
BE INSIGHT I comandi che iniziano con parole - EXEC SQL e comandi o frasi che terminano con una parola - possono essere utilizzati solo in SQL nidificato.
INIZIA SEZIONE DICHIARAZIONE
Sintassi
EXEC SQL INIZIA A DICHIARARE SEZIONE< SQL term > < host-language variable declarations >EXEC SQL END DECLARE SEZIONE< SQL term >
Questo comando crea una sezione del programma del linguaggio principale per dichiarare le variabili principali al suo interno, che verranno utilizzate nelle istruzioni SQL nidificate. La variabile SQLCODE deve essere inclusa come una delle variabili dichiarate della lingua host.
CURSORE CHIUDI
Sintassi
CURSORE CHIUDI EXEC SQL< cursor name > < SQL term >;
Questo comando dice al cursore di chiudersi, dopodiché nessun valore può essere selezionato da esso finché non viene riaperto.
IMPEGNA (LAVORO)
Sintassi
Questo comando lascia invariate tutte le modifiche apportate al database fino al completamento della transazione avviata e all'avvio di una nuova transazione.
CREA INDICE
(* NON STANDARD *) (NON STANDARD)
Sintassi
CREA INDICE< Index name >
SU< table name > (<
column list >);
Questo comando crea un percorso di accesso rapido efficiente per trovare righe contenenti le colonne designate. Se viene specificato UNIQUE, la tabella non può contenere duplicati (gemelli) di valori in queste colonne.
CREARE SINONIMO (* NON STANDARD *)
(CREA SINONIMO) (* NON STANDARD *)
Sintassi
CREARE SINONIMO IPUBBLICO< synonym >PER
< owner >.< table
name >;
Questo comando crea un'alternativa (sinonimo) ad essi per la tabella. Il sinonimo appartiene al suo creatore e la tabella stessa, di solito a un altro utente. Utilizzando un sinonimo, il suo proprietario non deve fare riferimento alla tabella con il suo nome completo (incluso il proprietario). Se viene specificato PUBLIC, il sinonimo appartiene alla directory SYSTEM ed è quindi disponibile per tutti gli utenti.
CREA TABELLA
Sintassi
CREA TABELLA< table name >
({< column name > < data type
>[< size >]
[< colconstralnt > . . .]
[< defvalue
>]} . , . . < tabconstraint > . , . .);
Il comando crea una tabella nel database. Questa tabella sarà di proprietà del suo creatore. Le colonne verranno considerate in un ordine roll-by-name.< data type
>- definisce il tipo di dati che la colonna conterrà. Standard< data
type >descritto nell'Appendice B; tutti gli altri tipi di dati utilizzati< data type >discusso nell'appendice C. Valore della taglia< size >dipende dal tipo di dati< data type
>.
< colconstraint >e< tabconstraint >imporre restrizioni sui valori che possono essere inseriti in una colonna.
< defvalue >definisce il valore (predefinito) da inserire automaticamente se non viene specificato nessun altro valore per questa riga. (Vedi il Capitolo 17 per i dettagli sul comando CREATE TABLE stesso e il Capitolo 18 AND per i dettagli sulle restrizioni e< defvalue >).
CREA VISTA
Sintassi
CREA VISTA< table name >
COME< query >
;
La scansione viene trattata come qualsiasi tabella nei comandi SQL. Quando un comando fa riferimento a un nome di tabella< table name >, inchiesta< query >viene eseguito e il suo output corrisponde al contenuto della tabella specificata in questo comando.
Alcune viste possono essere modificate, il che significa che i comandi di modifica possono essere eseguiti in queste viste e passati alla tabella a cui si fa riferimento nella query< query >... Se viene specificato WITH CHECK OPTION, questa modifica deve soddisfare anche la condizione del predicato< predicate >su richiesta< query >.
DICHIARA CURSORE
Sintassi
DICHIARAZIONE DI EXEC SQL< cursor name >CURSORE PER
< query >< SQL
term >
Questo comando li lega al cursore< cursor name >, con la richiesta< query >... Quando il cursore è aperto (vedi OPEN CURSOR), la query< query >viene eseguito e il suo risultato può essere selezionato (con il comando FETCH) per l'output. Se il cursore è modificabile, la tabella a cui fa riferimento la query< query >, può ricevere una modifica del contenuto utilizzando un'operazione di modifica sul cursore (Vedi Capitolo 25 per i cursori modificabili).
ELIMINA
Sintassi
ELIMINA DA< table name >
{ ; }
| DOVE ATTUALE DI< cursorname >< SQL term >
Se non è presente alcuna clausola WHERE, TUTTE le righe della tabella vengono eliminate. Se la clausola WHERE usa il predicato< predicate >, righe che soddisfano la condizione di questo predicato< predicate >RIMOSSO. Se la clausola WHERE ha l'argomento CURRENT OF nel nome del cursore< cursor name >, riga dalla tabella< table name >a cui si fa attualmente riferimento utilizzando il nome del cursore< cursor name >sarà cancellato. Il modulo WHERE CURRENT può essere utilizzato solo in SQL nidificato e solo con cursori modificabili.
EXEC SQL
Sintassi
EXEC SQL< embedded SQL command > < SQL term >
EXEC SQL viene utilizzato per indicare l'inizio di tutti i comandi SQL annidati in un'altra lingua.
ANDARE A PRENDERE
Sintassi
EXEC SQL FETCH< cursorname >
IN< host-varlable llst ><
SQL term >
FETCH prende l'output dalla stringa di query corrente< query >, lo inserisce nella lista delle variabili principali< host-variable list >e sposta il cursore sulla riga successiva. Elenco< host-variable list >può includere l'indicatore della variabile come variabile target (vedere il capitolo 25).
CONCEDERE
Sintassi (standard)
CONCEDI TUTTI
| (SELEZIONARE
| INSERIRE
| ELIMINA
| AGGIORNARE [(< column llst >)]
| RIFERIMENTI [(< column llst >) l). ,. ...
SU< table name > . , . .
AL PUBBLICO |< Authorization ID > .
, . .
;
L'argomento ALL, con o senza PRIVILEGI, include ogni privilegio nell'elenco dei privilegi. PUBBLICO include tutti gli utenti esistenti e tutti gli utenti futuri. Questo comando consente di trasferire i diritti per eseguire azioni nella tabella con il nome specificato. RIFERIMENTI consente di concedere i diritti per utilizzare le colonne nell'elenco delle colonne< column list >come chiave padre per la chiave esterna. Altri privilegi consistono nel diritto di eseguire comandi i cui privilegi sono indicati dai loro nomi nella tabella. UPDATE è simile a REFERENCES e può imporre vincoli su colonne specifiche. GRANT OPTION ti permette di trasferire questi privilegi ad altri utenti.
Sintassi (non standard)
CONCESSIONE DBA
| RISORSA
| COLLEGARE ....
A< Authorization ID
> . , . .
| < privilege > . , . . }
DA (PUBBLICA
| < Authorization ID > . , . . };
Privilegio< privelege >può essere uno di quelli specificati nel comando GRANT. L'utente che concede REVOKE deve avere gli stessi privilegi dell'utente che ha concesso il GRANT. La clausola ON può essere utilizzata se viene utilizzato un privilegio di tipo speciale per un oggetto specifico.
RITORNO (LAVORO)
(ROLLBACK) (TRANSAZIONI)
Sintassi
Il comando annulla tutte le modifiche apportate al database durante la transazione corrente. Termina anche quella corrente e inizia una nuova transazione.
SELEZIONARE
Sintassi
SELEZIONA (IDISTINTO | TUTTI]< value expression > . , . . } / *
A PARTIRE DAL< table reference
> . , . .
. , . . ];
Questa clausola organizza la query e restituisce i valori dal database (vedi Capitolo 3 - Capitolo 14). Si applicano le seguenti regole:
La clausola SELECT valuta ogni riga candidata di una tabella in cui le righe vengono visualizzate in modo indipendente. La stringa candidata è definita come segue:
Ogni riga candidata produce valori che compongono il predicato<
predicate >nella clausola WHERE vero, non corretto o sconosciuto. Se GROUP BY non viene utilizzato, ogni< value expression >viene applicato a sua volta per ogni stringa candidata il cui valore rende valido il predicato, e il risultato di questa operazione è l'output.
Se viene utilizzato GROUP BY, le righe candidate vengono combinate utilizzando funzioni aggregate. Se non c'è predicato<
predicate >non impostato, ogni espressione< value expression >si applica a ciascuna linea o gruppo candidato. Se viene specificato DISTINCT, le righe duplicate verranno rimosse dall'output.
UNIONE
Sintassi
< query >(UNIONE< query > } . . . ;
Visualizzazione di due o più query< query >sarà accorpato. ogni richiesta< query >deve contenere lo stesso numero< value expression >nella clausola SELECT e in modo tale che 1 .. n di ciascuno, tipo di dati compatibile< data type >e taglia< size >con 1 .. n tutti gli altri.
AGGIORNARE
Sintassi
AGGIORNARE< table name >
SET (< column name > = < value
expression > } . , . .
([DOVE< predlcate >]; }
| {
< SQL term >]}
AGGIORNAMENTO cambia i valori in ogni colonna denominata< column name >dal valore corrispondente< value expression >... Se la clausola WHERE usa il predicato< predicate >, quindi solo le righe della tabella i cui valori correnti rendono quel predicato< predicate >corretto, soggetto a modifiche. Se WHERE utilizza la clausola CURRENT OF, i valori nella riga della tabella denominata< table name >situato nel cursore con il nome< cursor name >modificare. WHERE CURRENT OF è utilizzabile solo in SQL annidato e solo con cursori modificabili. Se non è presente alcuna clausola WHERE, tutte le righe vengono modificate.
OGNI VOLTA CHE
Sintassi
EXEC SQL QUANDO MAI< SQLcond > < actlon > < SQL term
>
< SQLcond >:: = SQLERROR | NON TROVATO | SQLAVVERTENZA
(quest'ultimo non è standard)
< action >:: = CONTINUA | VAI A< target >| VAI A< target >
< target >:: = dipende dalla lingua principale
Ognuno di noi si imbatte regolarmente e utilizza vari database. Quando scegliamo un indirizzo email, stiamo lavorando con un database. I database utilizzano motori di ricerca, banche per archiviare i dati dei clienti, ecc.
Ma, nonostante l'uso costante dei database, anche per molti sviluppatori di sistemi software ci sono molti "punti vuoti" dovuti a diverse interpretazioni degli stessi termini. Daremo una breve definizione dei termini di base del database prima di esaminare il linguaggio SQL. Così.
Banca dati - un file o un insieme di file per memorizzare strutture dati ordinate e le loro relazioni. Molto spesso un sistema di controllo è chiamato database: è solo un archivio di informazioni in un determinato formato e può funzionare con vari DBMS.
tavolo - Immagina una cartella che archivia documenti raggruppati in base a un determinato criterio, ad esempio un elenco di ordini per l'ultimo mese. Questa è la tabella nel computer.Una tabella separata ha il proprio nome univoco.
Tipo di dati - il tipo di informazioni che possono essere archiviate in una colonna o riga separata. Questi possono essere numeri o testo in un formato specifico.
Colonna e riga- abbiamo lavorato tutti con fogli di calcolo, che hanno anche righe e colonne. Qualsiasi database relazionale funziona con le tabelle in modo simile. Le righe sono talvolta chiamate record.
Chiave primaria- ogni riga della tabella può avere una o più colonne per la sua identificazione univoca. Senza una chiave primaria, è molto difficile aggiornare, modificare ed eliminare le righe richieste.
Che cos'è SQL?
SQL(Inglese - linguaggio di query strutturato) è stato sviluppato solo per lavorare con i database ed è attualmente lo standard per tutti i DBMS più diffusi. La sintassi del linguaggio è costituita da un numero ridotto di operatori ed è di facile apprendimento. Ma, nonostante la semplicità esterna, consente la creazione di query sql per operazioni complesse con un database di qualsiasi dimensione.
Dal 1992 esiste uno standard generalmente accettato chiamato ANSI SQL. Definisce la sintassi e le funzioni di base degli operatori ed è supportato da tutti i leader del mercato dei DBMS, come ORACLE.È impossibile considerare tutte le caratteristiche del linguaggio in un piccolo articolo, quindi considereremo brevemente solo le query SQL di base . Gli esempi mostrano chiaramente la semplicità e le capacità del linguaggio:
- creazione di database e tabelle;
- recuperando i dati;
- aggiunta di record;
- modifica e cancellazione delle informazioni.
Tipi di dati SQL
Tutte le colonne in una tabella di database archiviano lo stesso tipo di dati. I tipi di dati in SQL sono gli stessi di altri linguaggi di programmazione.
Crea tabelle e database
Esistono due modi per creare nuovi database, tabelle e altre query in SQL:
- Istruzioni SQL tramite la console DBMS
- Utilizzando gli strumenti di amministrazione online inclusi con il server di database.
Un nuovo database viene creato dall'operatore CREA DATABASE<наименование базы данных>; ... Come puoi vedere, la sintassi è semplice e concisa.
Creiamo tabelle all'interno del database con l'istruzione CREATE TABLE con i seguenti parametri:
- nome della tabella
- nomi delle colonne e tipi di dati
Ad esempio, creiamo una tabella Commodity con le seguenti colonne:
Creiamo una tabella:
CREA TABELLA Merce
(commodity_id CHAR (15) NOT NULL,
vendor_id CHAR (15) NOT NULL,
nome_merce CHAR (254) NULL,
merce_prezzo DECIMALE (8,2) NULL,
commodity_desc VARCHAR (1000) NULL);
La tabella ha cinque colonne. Il nome è seguito dal tipo di dati, le colonne sono separate da virgole. Il valore della colonna può essere null (NULL) o deve essere compilato (NOT NULL) e questo viene determinato al momento della creazione della tabella.
Recupero di dati da una tabella
L'operatore di selezione dei dati è la query SQL più utilizzata. Per ottenere informazioni è necessario indicare cosa si vuole selezionare da tale tabella. Cominciamo con un semplice esempio:
SELEZIONA nome_commercio DA Commodity
Dopo l'istruzione SELECT, specifichiamo il nome della colonna per ottenere le informazioni e FROM definisce la tabella.
Il risultato dell'esecuzione della query saranno tutte le righe della tabella con i valori Commodity_name nell'ordine in cui sono state inserite nel database, ad es. senza alcun ordinamento. Un'ulteriore clausola ORDER BY viene utilizzata per ordinare il risultato.
Per una query su più campi, li elenchiamo separati da virgole, come nell'esempio seguente:
SELECT commodity_id, commodity_name, commodity_price FROM Commodity
È possibile ottenere il valore di tutte le colonne di una riga come risultato di una query. Per fare ciò, usa il segno "*":
SELEZIONA * DA Merce
- Inoltre SELECT supporta:
- Ordinamento dati (operatore ORDER BY)
- Selezione in base alle condizioni (DOVE)
- Termine di raggruppamento (GRUPPO PER)
Aggiungi la riga
Per aggiungere una riga alla tabella, vengono utilizzate le query SQL con l'istruzione INSERT. L'addizione può essere effettuata in tre modi:
- aggiungi una nuova intera riga;
- parte di una stringa;
- risultati dell'interrogazione.
Per aggiungere una riga completa, è necessario specificare il nome della tabella e i valori delle colonne (campi) della nuova riga. Facciamo un esempio:
INSERIRE NEI VALORI DELLE MERCI ("106", "50", "Coca-Cola", "1.68", "No Alcogol,)
L'esempio aggiunge un nuovo prodotto alla tabella. I valori sono specificati dopo VALUES per ogni colonna. Se non esiste un valore corrispondente per la colonna, è necessario specificare NULL. Le colonne vengono riempite con i valori nell'ordine specificato al momento della creazione della tabella.
Se aggiungi solo una parte di una riga, devi specificare esplicitamente i nomi delle colonne, come nell'esempio:
INSERT INTO Commodity (commodity_id, vendor_id, commodity_name)
VALORI ("106", '50 "," Coca-Cola ",)
Abbiamo inserito solo gli identificatori del prodotto, del fornitore e il suo nome e abbiamo lasciato vuoti gli altri campi.
Aggiunta di risultati di query
INSERT viene utilizzato principalmente per aggiungere righe, ma può anche essere utilizzato per aggiungere i risultati di un'istruzione SELECT.
Modifica dei dati
Per modificare le informazioni nei campi della tabella del database, è necessario utilizzare l'istruzione UPDATE. L'operatore può essere utilizzato in due modi:
- Tutte le righe della tabella vengono aggiornate.
- Solo per una linea specifica.
AGGIORNAMENTO ha tre elementi principali:
- la tabella in cui è necessario apportare modifiche;
- nomi dei campi e loro nuovi valori;
- condizioni per la selezione delle righe da modificare.
Diamo un'occhiata a un esempio. Supponiamo che il costo di un articolo con ID = 106 sia cambiato, quindi questa riga deve essere aggiornata. Scriviamo il seguente operatore:
UPDATE Commodity SET commodity_price = "3.2" WHERE commodity_id = "106"
Abbiamo indicato il nome della tabella, nel nostro caso Commodity, dove verrà eseguito l'aggiornamento, quindi dopo SET - il nuovo valore della colonna e trovato il record richiesto specificando il valore ID richiesto in WHERE.
Per modificare più colonne, vengono specificate più coppie colonna-valore dopo l'istruzione SET, separate da virgole. Vediamo un esempio che aggiorna il nome e il prezzo di un prodotto:
UPDATE Commodity SET commodity_name = 'Fanta', commodity_price = "3.2" WHERE commodity_id = "106"
Per rimuovere le informazioni in una colonna, puoi impostarla su NULL se la struttura della tabella lo consente. Va ricordato che NULL è esattamente un valore "no" e non zero sotto forma di testo o numeri. Eliminiamo la descrizione del prodotto:
UPDATE Commodity SET commodity_desc = NULL WHERE commodity_id = "106"
Eliminazione di righe
Le query SQL per eliminare le righe in una tabella vengono eseguite dall'istruzione DELETE. Ci sono due casi d'uso:
- alcune righe vengono eliminate nella tabella;
- tutte le righe della tabella vengono eliminate.
Un esempio di eliminazione di una riga da una tabella:
DELETE FROM Commodity WHERE commodity_id = "106"
Dopo DELETE FROM specifichiamo il nome della tabella in cui verranno cancellate le righe. La clausola WHERE contiene una condizione in base alla quale verranno selezionate le righe da eliminare. Nell'esempio, stiamo eliminando la riga per il prodotto con ID = 106. È molto importante specificare DOVE. l'omissione di questa istruzione cancellerà tutte le righe nella tabella. Questo vale anche per la modifica del valore dei campi.
L'istruzione DELETE non include nomi di colonna o metacaratteri. Elimina completamente le righe, ma non può eliminare una singola colonna.
Utilizzo di SQL in Microsoft Access
Viene solitamente utilizzato in modo interattivo per creare tabelle, database, per gestire, modificare, analizzare dati in un database e per incorporare query SQL Access tramite un comodo Query Designer interattivo, utilizzando il quale è possibile costruire ed eseguire immediatamente istruzioni SQL di qualsiasi complessità...
È supportata anche la modalità di accesso al server, in cui Access DBMS può essere utilizzato come generatore di query SQL a qualsiasi sorgente dati ODBC. Questa funzionalità consente alle applicazioni di Access di interagire con qualsiasi formato.
Estensioni SQL
Poiché le query SQL non hanno tutte le funzionalità dei linguaggi di programmazione procedurali come loop, rami, ecc., I fornitori di database sviluppano la propria versione di SQL con funzionalità avanzate. Prima di tutto, questo è il supporto per stored procedure e operatori standard di linguaggi procedurali.
I dialetti più comuni della lingua:
- Database Oracle - PL / SQL
- Interbase, Firebird - PSQL
- Microsoft SQL Server - Transact-SQL
- PostgreSQL - PL / pgSQL.
SQL su Internet
MySQL è distribuito sotto la GNU General Public License. Esiste una licenza commerciale con la possibilità di sviluppare moduli personalizzati. Come parte integrante, è incluso negli assembly più popolari di server Internet, come XAMPP, WAMP e LAMP, ed è il DBMS più popolare per lo sviluppo di applicazioni su Internet.
È stato sviluppato da Sun Microsystems ed è attualmente supportato da Oracle Corporation. Sono supportati database fino a 64 terabyte, standard di sintassi SQL: 2003, replica di database e servizi cloud.
Come posso scoprire il numero di modelli di PC prodotti da un determinato fornitore? Come determinare il prezzo medio per computer con le stesse specifiche? Queste e molte altre domande relative ad alcune informazioni statistiche possono essere risolte utilizzando funzioni riassuntive (aggregate)... La norma prevede le seguenti funzioni aggregate:
Tutte queste funzioni restituiscono un singolo valore. In questo caso, le funzioni CONTE, MIN e MAX sono applicabili a qualsiasi tipo di dati, mentre SOMMA e AVG vengono utilizzati 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 di computer disponibili dal produttore A:
Esempio. Se siamo interessati al numero di diversi modelli prodotti dal produttore A, allora la query può essere formulata come segue (sfruttando il fatto che nella tabella Prodotto ogni modello viene registrato una volta):
Esempio. Trova il numero di diversi modelli disponibili dal produttore A. La query è simile alla precedente, in cui era richiesto di determinare il numero totale di modelli prodotti dal produttore A. Qui devi anche trovare il numero di diversi modelli nella PC da tavolo (cioè disponibile per la vendita).
Per garantire che vengano utilizzati solo valori univoci quando si ottengono indicatori statistici, quando argomento delle funzioni aggregate può essere utilizzato Parametro DISTINTO... Un altro parametro ALLè l'impostazione predefinita e presuppone che vengano conteggiati tutti i valori restituiti nella colonna. Operatore,
Se abbiamo bisogno di ottenere il numero di modelli di PC prodotti ogni produttore, sarà necessario utilizzare Clausola GROUP BY segue sintatticamente clausole WHERE.
Clausola GROUP BY
Clausola GROUP BY utilizzato per definire gruppi di linee di output a cui può essere applicato funzioni aggregate (COUNT, MIN, MAX, AVG e SUM)... Se questa clausola è mancante e vengono utilizzate funzioni aggregate, allora 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 nelle funzioni aggregate, deve essere specificato nella clausola GROUP BY... Di conseguenza, tutte le righe di output della query sono suddivise in gruppi caratterizzati dalle stesse combinazioni di valori in queste colonne. Successivamente, le funzioni aggregate verranno applicate a ciascun gruppo. Nota che per GROUP BY tutti i valori NULL sono trattati come uguali, ad es. quando raggruppate da un campo contenente valori NULL, tutte queste righe rientreranno in un gruppo.Se se c'è una clausola GROUP BY, nella clausola SELECT nessuna funzione aggregata, la query restituirà semplicemente una riga da ciascun gruppo. Questa funzionalità, insieme alla parola chiave DISTINCT, può essere utilizzata per eliminare le righe duplicate nel set di risultati.
Diamo un'occhiata a un semplice esempio:
SELEZIONA modello, COUNT (modello) AS Qty_model, AVG (price) AS Avg_price DA PC Modello GROUP BY; |
In questa richiesta, per ogni modello di PC, vengono determinati il loro numero e il costo medio. Tutte le righe con gli stessi valori del modello formano un gruppo e l'output SELECT calcola il numero di valori e i valori del prezzo medio per ciascun gruppo. La query risulterà nella seguente tabella:
modello | Qtà_modello | Prezzo_medio |
1121 | 3 | 850.0 |
1232 | 4 | 425.0 |
1233 | 3 | 843.33333333333337 |
1260 | 1 | 350.0 |
Se il SELECT avesse una colonna con una data, sarebbe possibile calcolare questi indicatori per ogni data specifica. Per fare ciò, è necessario aggiungere una data come colonna di raggruppamento, quindi le funzioni aggregate verranno calcolate per ogni combinazione di valori (model-date).
Ci sono diversi specifici regole per lo svolgimento di funzioni aggregate:
- Se come risultato della query nessuna linea ricevuta(o più di una riga per un dato gruppo), i dati iniziali per il calcolo di una qualsiasi delle funzioni aggregate sono assenti. 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 di per sé funzioni aggregate(funzione da funzione). Quelli. in una singola query, non puoi, ad esempio, ottenere il massimo delle medie.
- Il risultato dell'esecuzione della funzione COUNT è numero intero(NUMERO INTERO). Altre funzioni aggregate ereditano i tipi di dati dei valori in elaborazione.
- Se, durante l'esecuzione della funzione SOMMA, si è ottenuto un risultato che supera il valore massimo del tipo di dati utilizzato, errore.
Quindi, se la richiesta non contiene Clausole GROUP BY, poi funzioni aggregate incluso in clausola SELECT, vengono eseguiti su tutte le righe di query risultanti. Se la richiesta contiene Clausola GROUP BY, ogni set di righe che ha gli stessi valori di colonna o gruppo di colonne specificati in Clausola GROUP BY, costituisce un gruppo, e funzioni aggregate vengono eseguite separatamente per ogni gruppo.
clausola HAVING
Se Dove la clausola definisce un predicato per filtrare le righe, quindi AVERE un'offerta applicato dopo il raggruppamento definire un predicato simile filtrando i gruppi in base ai valori funzioni aggregate... Questa clausola è necessaria per testare i valori che si ottengono usando funzione aggregata non da righe separate dell'origine record definita in FROM clausola, 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, è possibile specificare tutti i campi anche con un *; 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 la selezione dei dati.
Semplici esempi di utilizzo di select
1. Campionamento normale dei dati:
> SELEZIONA * DA utenti
2. Recupero dati con l'unione di due tabelle (JOIN):
SELECT u.name, r. * FROM utenti u UNISCITI a users_rights r ON r.user_id = u.id
* in questo esempio stiamo recuperando i dati con l'unione di tabelle utenti e diritti_utenti... Sono uniti dai campi ID utente(nella tabella diritti_utenti) e ID(utenti). Recupera il campo del nome dalla prima tabella e tutti i campi dalla seconda.
3. Campionamento con intervallo di tempo e/o data
a) sono noti il punto di partenza e un certo intervallo di tempo:
* verranno selezionati i dati dell'ultima ora (campo Data).
b) la data di inizio e la data di fine sono note:
25.10.2017 e 25.11.2017 .
c) sono note le date di inizio e di fine + l'ora:
* seleziona i dati tra 25/03/2018 0 ore 15 minuti e 25/04/2018 15 ore 33 minuti e 9 secondi.
d) estraiamo i dati per un determinato mese e anno:
* estrarre i dati, dove nel campo Data ci sono valori per aprile 2018 dell'anno.
4. Campionamento dei valori massimo, minimo e medio:
> SELEZIONA max (area), min (area), avg (area) FROM country
* max- valore massimo; min- minimo; media- la media.
5. Utilizzo della lunghezza della linea:
* questa query dovrebbe mostrare tutti gli utenti il cui nome è composto da 5 caratteri.
Esempi di query più complesse o usate raramente
1. Combina con il raggruppamento dei dati selezionati in un'unica riga (GROUP_CONCAT):
* dal tavolo utenti recupera 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, eseguiamo la concatenazione dei campi in una riga con un separatore :: .
3. Combinazione dei risultati di due tabelle (UNION):
> (SELEZIONARE 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. Campione di medie, raggruppate per ogni ora:
SELECT avg (temperatura), DATE_FORMAT (datetimeupdate, "% Y-% m-% d% H") as hour_datetime FROM archivio GROUP BY DATE_FORMAT (datetimeupdate, "% Y-% m-% d% H")
* qui estraiamo la media del campo temperatura dal tavolo archivio e raggruppa per campo datetimeupdate(con divisione del tempo per ogni ora).
Inserisci (INSERIRE)
Sintassi 1:
> INSERIRE IN