Come configurare smartphone e PC. Portale informativo

Espressioni tabellari. Query SQL semplici - Riferimento rapido ed esempi

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):

  • Le parole chiave sono scritte in maiuscolo.
  • SQL e altre condizioni speciali sono racchiuse tra parentesi angolari e in corsivo. (< e >)
  • Le parti facoltative dei comandi sono racchiuse tra parentesi quadre ().
  • I puntini di sospensione (....) indicano che la parte precedente di un comando può essere ripetuta un numero qualsiasi di volte.
  • Una barra verticale (|) significa che ciò che viene prima può essere sostituito da ciò che segue.
  • Le parentesi graffe ((e)) indicano che tutto al loro interno deve essere trattato nel suo insieme per poter valutare altri caratteri (ad esempio, strisce verticali o ellissi).
  • Doppi due punti e uguale (:: =) significano - ciò che segue è una definizione di ciò che viene prima di loro.

    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:

  • Per ogni sottolineatura< underscore >nel campione< pattern >che non è preceduto da un carattere finale< escapechar >, c'è un simbolo corrispondente< charvalue >.
  • Per ciascuno< percent sign >nel campione< pattern >che non è preceduto da< escapechar >, ci sono zeri o più caratteri corrispondenti in< charvalue >.
  • Per ciascuno< escapechar >v< pattern >che non precede l'altro< escapechar >, non c'è nessun carattere corrispondente in< charvalue >.
  • Per ogni altro carattere in< pattern >, lo stesso simbolo è posto in corrispondenza del segno corrispondente in< charvalue >.

    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:

  • Se< quantifier >= ALL, e ogni membro del set di risultati< result set >rende vero questo confronto,< quantified predicate >- è corretta.
  • Se< quantifier >= QUALSIASI e c'è almeno un membro dal set di risultati< result set >il che rende vero questo confronto, allora< quantified predicate >è corretta.
  • Se il risultato è impostato< result set >vuoto allora< quantified predicate >vero se< quantifier >= ALL e non valido se non diversamente.
  • Se< quantifier >= SOME, l'effetto è lo stesso di ANY.
  • Se< quantified predicate >non fedele e non scorretto, è sconosciuto.

    < 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:

  • Se non viene specificato né ALL né DISTINCT, ALL viene accettato.
  • Espressione< value expression >comprende< column spec >, funzione aggregata< aggregate funct >, funzione personalizzata< nonstandard fu nction >costante< constant >o qualsiasi combinazione di essi con operatori in espressioni valide.
  • Tabella di riferimento< table reference >, è costituito dal nome della tabella, incluso il prefisso del proprietario se l'utente corrente non è il proprietario o da un sinonimo (non standard) per la tabella. La tabella può essere una tabella di base o una vista. Fondamentalmente, un alias può indicare quale sinonimo viene utilizzato per una tabella solo per la durata del comando corrente. Il nome della tabella o il sinonimo deve essere separato dall'alias da uno o più caratteri di separazione< separator >.
  • Se viene utilizzato GROUP BY, tutte le colonne< column spec >usato nella clausola SELECT dovrà essere usato come un gruppo di colonne< grouping column >se non sono contenuti nella funzione aggregata< aggregate funct >... Intero gruppo di colonne< grouping column >deve essere rappresentato tra le espressioni< value expressions >specificato nella clausola SELECT. Per ogni combinazione distinta di valori del gruppo di colonne< grouping column >, ci sarà una e una sola riga di output.
  • Se si usa HAVING, il predicato< predicate >si applica a ogni riga prodotta dalla clausola GROUP BY e verranno stampate quelle righe che rendono vero questo predicato.
  • Se viene utilizzato ORDER BY, l'output è in una sequenza specifica. ID di ogni colonna< column identifer >si riferisce a quanto specificato< value expression >nella clausola SELECT. Se questo< value expression >è la colonna specificata< column spec >, < co lumn identifier >può essere lo stesso di< column spec >... Altrimenti< co lumn identifier >può essere un numero intero positivo che indica la posizione in cui< value expression >nella sequenza della clausola SELECT. L'output sarà formato per adattarsi ai valori contenuti in< column identifier >in ordine crescente se DESC non è specificato. Nome ID colonna< column identifier >il primo nella clausola ORDER BY precederà i nomi successivi nella definizione della sequenza di output.

    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:

  • Se c'è solo una tabella di riferimento< table reference >abilitato, ogni riga di questa tabella è a sua volta una riga candidata.
  • Se più di una tabella di riferimento< table reference >abilitata, ogni riga di ogni tabella deve essere combinata a turno con ogni combinazione di righe di tutte le altre tabelle. Ciascuna di queste combinazioni sarà a sua volta una stringa candidata.

    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

    () VALORI ( )

    Sintassi 2:

    > INSERIRE IN

    VALORI ( )

    * dove tavolo- il nome della tabella in cui inseriamo i dati; campi- enumerazione dei campi separati da virgole;valori- enumerazione dei valori separati da virgole.
    * la prima opzione consentirà di inserire solo i campi elencati - il resto riceverà i valori predefiniti. La seconda opzione richiederà l'inserimento per tutti i campi.

    Esempi di utilizzo di insert

    1. Inserisci più righe in una query:

    > INSERIRE VALORI nelle città ("nome", "paese") ("Mosca", "Russia"), ("Parigi", "Francia"), ("Funafuti", "Tuvalu");

    * in questo esempio, aggiungeremo 3 record con una query SQL.

    2. Incolla da un'altra tabella (copia di righe, INSERT + SELECT):

    * estrai tutti i record dalla tabella città, i cui nomi iniziano con "M" ed entrano nella tabella città-nuove.

    Aggiorna (AGGIORNAMENTO)

    Sintassi:

    * dove tavolo- nome della tabella; campo- il campo per il quale modificheremo il valore; valore- nuovo valore; condizioni- condizione (è pericoloso eseguire l'aggiornamento senza di essa - è possibile sostituire tutti i dati nell'intera tabella).

    Aggiornamento tramite sostituzione (REPLACE):

    AGGIORNARE

    SET = SOSTITUIRE ( , "<что меняем>", "<на что>");

    UPDATE città SET nome = REPLACE (nome, "Maskva", "Mosca");

    Se vogliamo andare sul sicuro, il risultato della sostituzione può essere prima controllato usando SELECT:

    Eliminazione (ELIMINA)

    Sintassi:

    * dove tavolo- nome della tabella; condizioni- condizione (come nel caso di UPDATE, è pericoloso usare DELETE senza una condizione - il DBMS non chiederà conferma, ma cancellerà semplicemente tutti i dati).

    Creare una tabella

    Sintassi:

    > CREA TABELLA

    ( , )

    > CREA TABELLA SE NON ESISTE `users_rights` (
    `id` int (10) unsigned NOT NULL,
    `user_id` int (10) unsigned NOT NULL,
    `diritti` int (10) unsigned NOT NULL
    ) ENGINE = InnoDB DEFAULT CHARSET = utf8;

    * dove tavolo- nome della tabella (nell'esempio diritti_utenti); campo1, campo2- il nome dei campi (nell'esempio vengono creati 3 campi - id, user_id, diritti); opzioni1, opzioni2- parametri di campo (nell'esempio int (10) unsigned NOT NULL); opzioni della tabella- parametri generali della tabella (nell'esempio ENGINE = InnoDB DEFAULT CHARSET = utf8).

    Utilizzo delle query in PHP

    Ci colleghiamo al database:

    mysql_connect ("localhost", "login", "password") or die ("errore di connessione MySQL");
    mysql_select_db ("nome_db");
    mysql_query ("IMPOSTA NOMI" utf8 "");

    * dove viene effettuata la connessione alla base sul server locale ( localhost); credenziali di connessione - Accedere e parola d'ordine(rispettivamente login e password); usato come base db_name; codifica usata UTF-8.

    Puoi anche creare una connessione permanente:

    mysql_pconnect ("localhost", "login", "password") or die ("errore di connessione MySQL");

    * tuttavia è possibile raggiungere il limite massimo di hosting consentito. Questo metodo dovrebbe essere utilizzato sui nostri server, dove noi stessi possiamo controllare la situazione.

    Fine connessione:

    * in PHP viene eseguito automaticamente, ad eccezione delle connessioni persistenti (mysql_pconnect).

    Una query a MySQL (Mariadb) in PHP viene eseguita dalla funzione mysql_query () e il recupero dei dati da una query viene eseguito da mysql_fetch_array ():

    $ risultato = mysql_query ("SELECT * FROM utenti");
    while ($ massa = mysql_fetch_array ($ risultato)) (
    echo $ massa. "
    ";
    }

    * in questo esempio, viene eseguita una query sulla tabella utenti... Il risultato della query viene inserito in una variabile $ risultato... Successivamente, viene utilizzato il ciclo mentre, ogni cui iterazione recupera un array di dati e lo inserisce in una variabile $ massa- in ogni iterazione lavoriamo con una riga del database.

    La funzione mysql_fetch_array() utilizzata restituisce un array associativo, con cui è conveniente lavorare, ma esiste un'altra alternativa: mysql_fetch_row(), che restituisce un array numerato regolare.

    Schermatura

    Se è necessario includere un carattere speciale nella stringa di query, ad esempio%, è necessario utilizzare l'escape utilizzando il carattere barra rovesciata - \

    Per esempio:

    * se esegui tale query senza l'escape, il segno % verrà interpretato come qualsiasi numero di caratteri dopo 100.

    È tutto. Se hai bisogno di aiuto per soddisfare la tua richiesta, scrivimi per posta

    Il linguaggio SQL viene utilizzato per recuperare i dati dal database. SQL è un linguaggio di programmazione molto simile all'inglese, ma progettato per programmi di gestione di database. SQL viene utilizzato in ogni query in Access.

    Comprendere il funzionamento di SQL consente di creare query più accurate e semplifica la correzione delle query che restituiscono risultati errati.

    Questo articolo fa parte di una serie su SQL per Access. Descrive le basi dell'utilizzo di SQL per recuperare i dati e fornisce esempi di sintassi SQL.

    In questo articolo

    Che cos'è SQL?

    SQL è un linguaggio di programmazione per lavorare con insiemi di fatti e relazioni tra di loro. I programmi di gestione di database relazionali come Microsoft Office Access utilizzano SQL per manipolare i dati. A differenza di molti linguaggi di programmazione, SQL è leggibile e comprensibile anche per i principianti. Come molti linguaggi di programmazione, SQL è uno standard internazionale riconosciuto da organismi di standard come ISO e ANSI.

    I set di dati sono descritti in SQL per aiutare a rispondere alle domande. È necessario utilizzare la sintassi corretta quando si utilizza SQL. La sintassi è un insieme di regole che ti permettono di combinare correttamente gli elementi di una lingua. La sintassi SQL si basa sulla sintassi inglese e condivide molti elementi con la sintassi di Visual Basic, Applications Edition (VBA).

    Ad esempio, una semplice istruzione SQL che recupera un elenco di cognomi di contatti denominati Mary potrebbe avere il seguente aspetto:

    SELECT Cognome
    DA Contatti
    WHERE First_Name = "Maria";

    Nota: Il linguaggio SQL viene utilizzato non solo per eseguire operazioni sui dati, ma anche per creare e modificare la struttura degli oggetti del database, come le tabelle. La parte di SQL utilizzata per creare e modificare gli oggetti del database è denominata Data Description Language DDL. DDL non è trattato in questo articolo. Per altre informazioni, vedere l'articolo Creare e modificare tabelle o indici tramite una query di definizione dei dati.

    Dichiarazioni SELECT

    L'istruzione SELECT viene utilizzata per descrivere un set di dati in SQL. Contiene una descrizione completa del set di dati da recuperare dal database, inclusi i seguenti:

      tabelle che contengono dati;

      collegamenti tra dati provenienti da fonti diverse;

      campi o calcoli in base ai quali vengono selezionati i dati;

      condizioni di selezione che devono essere soddisfatte dai dati inclusi nel risultato della query;

      la necessità e il metodo di smistamento.

    Frasi SQL

    Un'istruzione SQL è composta da diverse parti chiamate clausole. Ogni clausola in un'istruzione SQL ha uno scopo diverso. Sono necessari alcuni suggerimenti. Nella tabella seguente sono elencate le istruzioni SQL utilizzate più spesso.

    Clausola SQL

    Descrizione

    Obbligatorio

    Definisce i campi che contengono i dati desiderati.

    Definisce le tabelle che contengono i campi specificati nella clausola SELECT.

    Specifica i criteri per la selezione dei campi che devono essere soddisfatti da tutti i record inclusi nei risultati.

    Determina l'ordinamento dei risultati.

    In un'istruzione SQL che contiene funzioni aggregate, identifica i campi per i quali la clausola SELECT non calcola un valore di riepilogo.

    Solo se ci sono tali campi

    In un'istruzione SQL che contiene funzioni aggregate, definisce le condizioni che si applicano ai campi per i quali la clausola SELECT calcola un valore di riepilogo.

    termini SQL

    Ogni istruzione SQL è composta da termini che possono essere paragonati a parti del discorso. La tabella seguente elenca i tipi di termini SQL.

    Termine SQL

    Parte del discorso paragonabile

    Definizione

    Esempio

    identificatore

    sostantivo

    Il nome utilizzato per identificare l'oggetto del database, ad esempio il nome di un campo.

    Clienti. [Numero di telefono]

    operatore

    verbo o avverbio

    Una parola chiave che rappresenta o modifica un'azione.

    costante

    sostantivo

    Un valore che non cambia, ad esempio un numero o NULL.

    espressione

    aggettivo

    Una combinazione di identificatori, operatori, costanti e funzioni progettati per calcolare un singolo valore.

    > = Merce [Prezzo]

    Clausole SQL di base: SELECT, FROM e WHERE

    Formato generale delle istruzioni SQL:

    SELEZIONA campo_1
    DA tabella_1
    WHERE criterio_1
    ;

    Appunti:

      Access ignora le interruzioni di riga nelle istruzioni SQL. Indipendentemente da ciò, si consiglia di iniziare ogni frase su una nuova riga in modo che l'istruzione SQL sia facile da leggere, sia per la persona che l'ha scritta che per tutti gli altri.

      Ogni istruzione SELECT termina con un punto e virgola (;). Il punto e virgola può apparire alla fine dell'ultima frase o su una riga separata alla fine dell'istruzione SQL.

    Esempio in Access

    L'esempio seguente mostra come potrebbe apparire un'istruzione SQL in Access per una semplice query di selezione.

    1. Clausola SELECT

    2. Clausola FROM

    3. Clausola WHERE

    Esaminiamo l'esempio frase per frase per capire come funziona la sintassi SQL.

    clausola SELECT

    SELECT, Azienda

    Questa è una clausola SELECT. Contiene una dichiarazione (SELECT) seguita da due identificatori ("[Indirizzo e-mail]" e "Azienda").

    Se l'identificatore contiene spazi o caratteri speciali (ad esempio, "Indirizzo e-mail"), deve essere racchiuso tra parentesi quadre.

    Nella clausola SELECT non è necessario specificare le tabelle che contengono i campi e non è possibile specificare i criteri di selezione che devono essere soddisfatti dai dati inclusi nei risultati.

    In un'istruzione SELECT, la clausola SELECT viene sempre prima della clausola FROM.

    clausola FROM

    DA Contatti

    Questa è una clausola FROM. Contiene un operatore (FROM) seguito da un identificatore (Contatti).

    I campi per la selezione non sono specificati nella clausola FROM.

    Dove la clausola

    WHERE Città = "Seattle"

    Questa è una clausola WHERE. Contiene l'operatore (WHERE) seguito dall'espressione (City = "Rostov").

    Ci sono molte cose che puoi fare con le clausole SELECT, FROM e WHERE. Per ulteriori informazioni sull'utilizzo di questi suggerimenti, vedere i seguenti articoli:

    Ordinamento dei risultati: ORDINA PER

    Come con Microsoft Excel, Access può ordinare i risultati delle query in una tabella. Utilizzando la clausola ORDER BY, puoi anche specificare come vengono ordinati i risultati quando viene eseguita la query. Se viene utilizzata una clausola ORDER BY, deve apparire alla fine dell'istruzione SQL.

    La clausola ORDER BY contiene un elenco di campi da ordinare, nello stesso ordine in cui verrà applicato l'ordinamento.

    Si supponga, ad esempio, di voler prima ordinare i risultati in base al campo Società in ordine decrescente e quindi, se sono presenti record con lo stesso valore del campo Società, ordinarli in base al campo Indirizzo e-mail in ordine crescente. La clausola ORDER BY sarebbe simile a questa:

    ORDINA PER Azienda DESC,

    Nota: Per impostazione predefinita, Access ordina i valori in ordine crescente (dalla A alla Z, dal più piccolo al più grande). Per ordinare invece i valori in ordine decrescente, è necessario specificare la parola chiave DESC.

    Per maggiori informazioni sulla clausola ORDER BY, vedere l'articolo Clausola ORDER BY.

    Utilizzo dei dati pivot: clausole GROUP BY e HAVING

    A volte è necessario lavorare con dati aggregati, come le vendite mensili totali o gli articoli più costosi in magazzino. Per fare ciò, viene applicata una funzione di aggregazione al campo nella clausola SELECT. Ad esempio, se la query risulta nel numero di indirizzi e-mail per ogni azienda, la clausola SELECT potrebbe avere il seguente aspetto:

    La possibilità di utilizzare una particolare funzione di aggregazione dipende dal tipo di dati nel campo e dall'espressione desiderata. Per ulteriori informazioni sulle funzioni aggregate disponibili, vedere l'articolo Funzioni aggregate SQL.

    Specificare i campi non utilizzati in una funzione di aggregazione: la clausola GROUP BY

    Quando si utilizzano funzioni aggregate, in genere è necessario creare una clausola GROUP BY. La clausola GROUP BY specifica tutti i campi a cui non è applicata una funzione di aggregazione. Se le funzioni aggregate vengono applicate a tutti i campi di una query, non è necessario creare una clausola GROUP BY.

    La clausola GROUP BY deve seguire immediatamente la clausola WHERE o FROM se non è presente alcuna clausola WHERE. Nella clausola GROUP BY, i campi sono specificati nello stesso ordine della clausola SELECT.

    Continuiamo con l'esempio precedente. Se la clausola SELECT applica la funzione di aggregazione solo al campo [Indirizzo email], la clausola GROUP BY avrà il seguente aspetto:

    GRUPPO PER Azienda

    Per ulteriori informazioni sulla clausola GROUP BY, vedere l'articolo Clausola GROUP BY.

    Limitazione dei valori aggregati utilizzando condizioni di raggruppamento: la clausola HAVING

    Se è necessario specificare condizioni per limitare i risultati, ma il campo a cui si desidera applicare viene utilizzato in una funzione aggregata, non è possibile utilizzare la clausola WHERE. Utilizzare invece la clausola HAVING. La clausola HAVING funziona come la clausola WHERE, ma viene utilizzata per i dati aggregati.

    Ad esempio, supponiamo di applicare una funzione AVG (che calcola la media) al primo campo in una clausola SELECT:

    SELEZIONA COUNT (), Azienda

    Se si desidera limitare i risultati della query in base al valore della funzione COUNT, non è possibile applicare una condizione di filtro a quel campo nella clausola WHERE. Invece, la condizione dovrebbe essere inserita nella clausola HAVING. Ad esempio, se si desidera che la query restituisca righe solo se l'azienda dispone di più indirizzi e-mail, è possibile utilizzare la seguente clausola HAVING:

    AVERE CONTE ()> 1

    Nota: Una query può includere sia una clausola WHERE che una clausola HAVING, con i criteri per i campi non utilizzati nelle funzioni aggregate specificati nella clausola WHERE e le condizioni per i campi utilizzati nelle funzioni aggregate nella clausola HAVING.

    Per maggiori informazioni sulla clausola HAVING, vedere l'articolo Clausola HAVING.

    Combinazione dei risultati della query: Operatore UNION

    L'operatore UNION viene utilizzato per visualizzare tutti i dati restituiti da più query di selezione simili contemporaneamente a un insieme concatenato.

    L'operatore UNION consente di combinare due istruzioni SELECT in una. Le istruzioni SELECT da unire devono avere lo stesso numero e ordine di campi di output con tipi di dati uguali o compatibili. Quando si esegue una query, i dati di ogni set di campi corrispondenti vengono combinati in un unico campo di output, quindi l'output della query ha lo stesso numero di campi di ogni singola istruzione SELECT.

    Nota: Nelle query di unione, i tipi di dati numerici e di testo sono compatibili.

    Utilizzando l'operatore UNION, è possibile specificare se le righe duplicate, se presenti, devono essere incluse nei risultati della query. Per fare ciò, usa la parola chiave ALL.

    Una query per combinare due istruzioni SELECT ha la seguente sintassi di base:

    SELEZIONA campo_1
    DA tabella_1
    UNIONE
    SELECT campo_a
    FROM tabella_a
    ;

    Ad esempio, supponiamo di avere due tabelle denominate "Prodotti" e "Servizi". Entrambe le tabelle contengono campi con il nome del prodotto o servizio, informazioni sul prezzo e sulla garanzia, nonché un campo che indica l'esclusività del prodotto o servizio offerto. Sebbene ci siano diversi tipi di garanzie nelle tabelle Prodotti e Servizi, le informazioni di base sono le stesse (esiste una garanzia di qualità per i singoli prodotti o servizi). Puoi utilizzare la seguente query di unione per combinare quattro campi da due tabelle:

    SELEZIONA nome, prezzo, garanzia_disponibile, offerta_esclusiva
    DA Prodotti
    UNION ALL
    SELEZIONA nome, prezzo, garanzia_disponibile, offerta_esclusiva
    DA Servizi
    ;

    Per ulteriori informazioni sulla combinazione di istruzioni SELECT utilizzando l'operatore UNION, vedere l'articolo

    Principali articoli correlati