LA CAMPANA

C'è chi legge questa notizia prima di te.
Iscriviti per ricevere articoli freschi.
E-mail
Nome
Cognome
Come vuoi leggere The Bell
Niente spam

L'operatore del linguaggio SQL UNION ha lo scopo di combinare le tabelle del database risultanti ottenute utilizzando la parola SELECT. La condizione per combinare le tabelle risultanti è la coincidenza del numero, della sequenza e del tipo di dati delle colonne. ORDER BY deve essere applicato al risultato del join e posizionato solo alla fine di una query composta. L'operatore UNION ha la sintassi seguente:

SELEZIONA COLUMN_NAME (1..N) DA TABLE_NAME UNION SELEZIONA COLUMN_NAME (1..N) DA TABLE_NAME

In questo costrutto, le query di join potrebbero avere condizioni nella clausola WHERE, ma potrebbero non averle. Utilizzando l'operatore UNION, è possibile combinare le richieste di recupero dei dati da una tabella e da diverse.

Quando si utilizza l'operatore UNION senza la parola ALL, il risultato non contiene duplicati e con la parola ALL contiene duplicati.

Totali e singoli valori nella stessa tabella usando l'istruzione SQL UNION

Con una singola query, i singoli valori delle colonne possono essere derivati \u200b\u200bdalla tabella, ad esempio il numero di anni lavorati dai dipendenti dell'azienda, i loro stipendi e altri. Un'altra richiesta - utilizzo funzioni aggregate   - è possibile ottenere, ad esempio, la quantità di salari ricevuti dai dipendenti dei dipartimenti o che occupano determinate posizioni, o il numero medio di anni di esperienza lavorativa (in tali richieste il raggruppamento viene utilizzato utilizzando l'operatore GROUP BY).

E se dobbiamo inserire in una tabella sia un riepilogo di tutti i singoli valori, sia i valori totali? Qui è utile l'istruzione SQL UNION, con la quale vengono combinate le due query. È necessario applicare l'ordinamento al risultato del join utilizzando la clausola ORDER BY. Perché questo sia necessario sarà meglio compreso dagli esempi.

Esempio 1   Il database dell'azienda ha una tabella Staff contenente dati sui dipendenti dell'azienda. Ha le colonne Stipendio (stipendio), Lavoro (posizione) e Anni (durata del servizio). La prima query restituisce le singole dimensioni dei salari ordinate per posizione:

SELEZIONA Nome, Lavoro, Stipendio DA PERSONALE ORDINA PER Lavoro

NomeLavoroStipendio
SandersMons18357.5
MarenghiMons17506.8
PernalI saldi18171.2
MedicoI saldi12322.4
FattoreI saldi16228.7

La seconda query restituirà lo stipendio totale per i post. Stiamo già preparando questa query per connettersi con la prima, quindi ricorderemo che la condizione per la connessione è un numero uguale di colonne, la coincidenza dei loro nomi, ordine e tipi di dati. Pertanto, includiamo anche la colonna Nome con un valore arbitrario di "Z-TOTAL" nella tabella con i risultati:

SELEZIONA "Z-TOTAL" COME Nome, Lavoro, SOMMA (Salario) COME Salario DAL GRUPPO DI PERSONALE PER Lavoro

Il risultato della query sarà la seguente tabella:

NomeLavoroStipendio
Z-totaleMons35864.3
Z-totaleI saldi46722.3

Ora combina le query utilizzando l'operatore UNION e applica l'operatore ORDER BY al risultato del join. Dovrebbe essere raggruppato in due colonne: position (Job) e name (Name), in modo che le righe con valori totali (totali), in cui il valore del nome è "Z-TOTAL", siano al di sotto delle righe con singoli valori. La combinazione dei risultati della query sarà la seguente:

  (SELEZIONA Nome, Lavoro, Stipendio DA PERSONALE) UNIONE (SELEZIONA "Z-TOTALE" COME Nome, Lavoro, SOMMA (Salario) COME Salario DAL GRUPPO DI PERSONALE PER LAVORO) ORDINA PER LAVORO, NOME

Il risultato della query con l'operatore UNION sarà la tabella seguente, in cui ogni prima riga di ciascun gruppo di post conterrà lo stipendio totale dei dipendenti che lavorano in questa posizione:

NomeLavoroStipendio
MarenghiMons17506.8
SandersMons18357.5
Z-totaleMons35864.3
MedicoI saldi12322.4
FattoreI saldi16228.7
PernalI saldi18171.2
Z-totaleI saldi46722.3

Scrivi query utilizzando UNION tu stesso, quindi vedi la soluzione

Esempio 2   I dati sono gli stessi dell'esempio 1, ma l'attività è un po 'più complicata. È necessario derivare in una tabella non solo le singole dimensioni dei salari ordinate per posizione e il salario totale per posizione, ma il salario totale per tutti i dipendenti.

Esempio 3   Il database dell'azienda ha una tabella Staff contenente dati sui dipendenti dell'azienda. Ha le colonne Nome (cognome), Dipartimento (numero reparto) e Anni (durata del servizio).

NomeDipartimentoAnni
Sanders20 7
Pernal20 8
Marenghi38 5
Medico20 5
Fattore38 8

Derivare in una tabella la durata media del servizio per reparto e i singoli valori della durata del servizio per dipendenti raggruppati per numero reparto.

Altri casi di unione di query a una singola tabella utilizzando l'istruzione SQL UNION

Esempio 4   Il database aziendale ha una tabella Staff che contiene dati sui dipendenti dell'azienda. Ha le colonne Stipendio (stipendio), Lavoro (posizione) e Anni (durata del servizio). La prima richiesta è necessaria per ottenere dati sui dipendenti i cui salari sono superiori a 21.000:

Il risultato della query sarà la seguente tabella:

Ora sono richiesti dati che combinano i criteri di selezione applicati nelle due query. Unire le query utilizzando l'operatore UNION:

Il risultato dell'esecuzione della query con l'operatore UNION sarà la tabella seguente:

IDNome
10 Sanders
30 Marenghi
100 Plotz
140 Fraee
160 Molinare
240 Daniels
260 Jones

Una query con un operatore UNION può anche restituire un numero maggiore di colonne, è importante ripetere che il numero di colonne, il loro ordine e i tipi di dati coincidono nelle query da unire.

Supponiamo di voler prima ottenere dati su categorie e parti di categorie di annunci in cui vengono inviati più di 100 annunci a settimana. Scriviamo la seguente query:

Il risultato della query sarà la seguente tabella:

Il risultato della query sarà la seguente tabella:

Ora è necessario estrarre i dati che soddisfano i criteri della prima e della seconda query. Unire le query utilizzando l'operatore UNION:

Il risultato della query sarà la seguente tabella:

Combinazione dei risultati della query per due tabelle con l'istruzione SQL UNION

Finora abbiamo esaminato le domande con l'operatore UNION, che ha combinato i risultati da un'unica tabella. Ora uniremo i risultati da due tabelle.

Esempio 6   Esiste un database di magazzino di materiali da costruzione. Ha una tabella contenente dati sullo sfondo. La tabella Vinil contiene dati su sfondi in vinile, la tabella Paper contiene sfondi in carta. È necessario per scoprire i dati sui prezzi dello sfondo dall'una e dall'altra tabella.

Per estrarre dati non duplicati sui prezzi degli sfondi in vinile, componiamo una query con la parola DISTINCT:

SELEZIONA DISTINCT Prezzo DA VINIL

Il risultato della query sarà la seguente tabella:

Ora fai una query combinata con l'operatore UNION:

SELEZIONA DISTINCT Prezzo DA UNIONE VINIL SELEZIONA DISTINCT Prezzo DA CARTA

Poiché non utilizziamo la parola ALL, i duplicati di 400, 500 e 530 non verranno visualizzati. Il risultato della query sarà la seguente tabella:

Prezzo
300
320
360
400
430
500
530
610
720
800
850

Esempio 7   Il database e le tabelle sono le stesse dell'esempio precedente.

Sono richiesti tutti i dati sui prezzi, inclusi quelli ricorrenti. La query per combinare i risultati utilizzando l'operatore UNION sarà simile alla query nell'esempio precedente, ma anziché UNION scriviamo UNION ALL:

SELEZIONA DISTINCT Prezzo DA VINIL UNION TUTTI SELEZIONA DISTINCT Prezzo DA CARTA

Il risultato della query sarà la seguente tabella:

Prezzo
300
320
360
400
400
430
500
500
530
530
610
720
800
850

Utilizzando l'istruzione SQL UNION, è possibile combinare sia query semplici che query contenenti sottoquery (sottoquery)   . Considera l'esempio corrispondente.

Esempio 8 Esiste un database di "Teatro". La sua tabella Play contiene spettacoli (i nomi sono nella colonna Nome), la tabella Director contiene informazioni sui registi (nella colonna Fname è il nome, nella colonna Lname è il cognome). La chiave primaria della tabella Director è dir_id, il numero di identificazione del director. Dir_id è anche la chiave esterna della tabella Play, si riferisce alla chiave primaria della tabella Director. Sono richieste le esibizioni dei registi John Barton e Trevor Nunn.

Decisione. Combina i risultati di due domande: una restituisce le performance del regista John Barton, l'altra restituisce il regista Trevor Nunn. E ciascuna di queste query combinate alla tabella di gioco viene eseguita con una sottoquery alla tabella di regista, che restituisce dir_id in base al nome e al cognome del regista. Ogni richiesta esterna accetta il valore della chiave dir_id dalla sotto-richiesta e restituisce i nomi delle impostazioni (Nome):

Database relazionali e SQL

La lezione tratterà l'argomento dell'utilizzo delle operazioni di unione, intersezione e differenza di query. Esempi di come usare SQL query Union, Exist, nonché l'uso di parole chiave SOME, ANY e All. Funzioni stringa considerate


È possibile eseguire operazioni di unione, differenza e prodotti cartesiani su un set. Le stesse operazioni possono essere utilizzate nelle query sql (eseguire operazioni con query).

Utilizzare una parola di servizio per combinare più query UNIONE.
  Sintassi:

< запрос 1 >    UNIONE [TUTTO]< запрос 2 >

<запрос 1>   UNIONE<запрос 2>

La query Union SQL viene utilizzata per combinare le righe di output di ciascuna query in un set di risultati.

Se usato parametro ALLquindi vengono salvati tutti i duplicati delle righe di output. Se il parametro è assente, nel set di risultati rimangono solo righe univoche.

È possibile combinare un numero qualsiasi di query insieme.

L'uso dell'operatore UNION richiede diverse condizioni:

  1. il numero di colonne di output di ciascuna query dovrebbe essere lo stesso;
  2. le colonne di output di ciascuna query devono essere comparabili tra loro per tipo di dati (nell'ordine della loro priorità);
  3. il set finale utilizza i nomi di colonna specificati nella prima query;
  4. ORDER BY può essere utilizzato solo alla fine di una query composta, poiché si applica al risultato del join.

Esempio:   Visualizza i prezzi per computer e laptop, nonché i loro numeri (ovvero scarica da due diverse tabelle in una query)


✍ Soluzione:
1 2 3 4 5 6   SELEZIONA `Numero`,` Prezzo` DA PC UNION SELEZIONA `Numero`,` Prezzo` DA notebook ORDINA PER `Prezzo`

SELEZIONA `Numero`,` Prezzo` DA PC UNION SELEZIONA `Numero`,` Prezzo` DA notebook ORDINA PER `Prezzo`

Risultato:

Considera un esempio più complesso con join interno:

Esempio:   Trova il tipo di prodotto, il numero e il prezzo di computer e laptop


✍ Soluzione:
1 2 3 4 5 6 7 8   SELEZIONA prodotto. "Tipo", pz. `Numero`,` Prezzo` DA PC INNER JOIN prodotto SU pc. "Numero" \u003d prodotto. Prodotto `Numero` UNION SELECT. Tipo, taccuino. `Numero`,` Prezzo` DA notebook INNER JOIN prodotto SU notebook. "Numero" \u003d prodotto. `Camera` ORDINA PER` Prezzo`

SELEZIONA prodotto. Tipo`, pc`Numero`, `Prezzo` DA pc INNER JOIN prodotto SU pc`Numero` \u003d prodotto`Numero` UNION SELEZIONA prodotto` Tipo, taccuino`Numero`,` Prezzo` DA notebook INNER UNISCITI al prodotto ON notebook. Numero` \u003d prodotto.` Numero` ORDINA PER `Prezzo`

Risultato:

SQL Union 1.   Trova il produttore, il numero e il prezzo di tutti i laptop e stampanti

SQL Union 2.   Trova i numeri e i prezzi di tutti i prodotti emessi dal produttore Russia

Predicato EXISTS SQL

In SQL sono disponibili strumenti per l'esecuzione di query di intersezione e differenza: la clausola INTERSECT (intersezione) e la clausola EXCEPT (differenza). Queste frasi funzionano in modo simile a come funziona UNION: solo quelle righe presenti in entrambe le query - INTERSECT - o solo quelle righe della prima query che non sono nella seconda - EXCEPT, rientrano nel set di risultati. Ma il problema è che molti DBMS non supportano queste proposte. Ma c'è una via d'uscita: usare il predicato EXISTS.

Il predicato EXISTS assume il valore TRUE (true) se la sottoquery restituisce almeno un numero di righe, altrimenti EXISTS assume il valore FALSE. Esiste anche il predicato NOT EXISTS, che agisce in modo opposto.

In genere, EXISTS viene utilizzato nelle sottoquery dipendenti (ad es. IN).

EXISTS (tabella secondaria)

Esempio:   Trova produttori di computer che producono anche laptop


✍ Soluzione:

SELEZIONA DISTINCT Produttore DAL prodotto AS pc_product DOVE Tipo \u003d "Computer" ED ESISTI (SELEZIONA Produttore DAL prodotto DOVE Tipo \u003d "Computer" E Produttore \u003d pc_product. Produttore)

Risultato:

Trova produttori di computer che non producono stampanti

Parole chiave SQL ALCUNI | Ogni e qualsiasi

Le parole SOME e ANY sono sinonimi, quindi puoi usarne una qualsiasi nella tua query. Il risultato di una tale query sarà una singola colonna di quantità.

Sintassi:

< выражение>< оператор сравнения>   ALCUNI | QUALUNQUE (< подзапрос> )

<выражение><оператор сравнения>ALCUNI | QUALUNQUE (<подзапрос>)

Se per un valore di X ottenuto dalla sottoquery, il risultato dell'operazione "" restituisce VERO, allora anche il predicato ANY è uguale a VERO.

Esempio:   Trova fornitori di computer i cui numeri non sono disponibili per la vendita (ovvero non si trovano nella tabella dei PC)


✍ Soluzione:

Tabelle dei dati di origine:

Risultato:

Nell'esempio, il predicato Numero \u003d QUALSIASI (SELEZIONA Numero DA PC) restituirà VERO quando il Numero dalla query principale viene trovato nell'elenco dei numeri sulla tabella del PC (restituito dalla sottoquery). Inoltre, NON viene utilizzato. Il set di risultati sarà composto da una colonna - Produttore. In modo che un produttore non venga visualizzato più volte, viene introdotta la parola di servizio DISTINCT.
  Ora considera di usare la parola chiave ALL:

Esempio:   Trova numeri e prezzi di laptop che costano di più rispetto a qualsiasi computer


✍ Soluzione:

Importante:   Vale la pena notare che nel caso generale, una query con QUALSIASI restituisce molti valori. Pertanto, l'utilizzo di una sottoquery in una clausola WHERE senza le istruzioni EXISTS, IN, ALL e ANY che forniscono un valore booleano (booleano) può causare un errore di runtime della query


Esempio:   Trova i numeri e i prezzi dei computer che costano più del costo minimo dei laptop


✍ Soluzione:


  Questa query è corretta per il motivo per cui l'espressione scalare Price viene confrontata con una sottoquery che restituisce un singolo valore

Funzioni stringa in SQL

La funzione SINISTRA taglia il numero di caratteri specificato dal secondo argomento a sinistra della stringa:

SINISTRA (<строка>,<число>)

La funzione DESTRA restituisce il numero specificato di caratteri a destra dell'espressione stringa:

GIUSTO (<строка>,<число>)

Esempio:   Stampa le prime lettere dei nomi di tutti i produttori


✍ Soluzione:

SELEZIONA DISTINCT SINISTRA ("Produttore", 1) DA "Prodotto"

Risultato:

Esempio:   Stampa i nomi dei produttori che iniziano e finiscono con la stessa lettera


✍ Soluzione:

Funzione di sostituzione SQL

Sintassi:

SELEZIONA `name`, REPLACE (` name`, "а", "аа") DA `docenti`

Ho già scritto. E lì, l'output di una tabella dipendeva dal contenuto di un'altra. Ma a volte è necessario quando è richiesta la completa indipendenza dell'output di una tabella da un'altra. Tutto quello che vuoi è giusto in una query, estrarre i record da più tabelle contemporaneamente, non piu. E per questo utilizzato nella parola chiave SQL UNION.

Trattiamoci Query SQL tramite UNION:

SELEZIONA `login`,` quantità` DA `datori di lavoro` UNION SELECT` login`,` quantità` DA` staff`;

Questa richiesta restituirà accessi e importi sugli account di tutti i datori di lavoro e dipendenti di un determinato sito. Cioè, i dati erano in diverse tabelle, ma la loro somiglianza consente di visualizzarli immediatamente. Da qui, a proposito, arriva la regola d'uso Domande UNION: Il numero e l'ordine dei campi devono corrispondere in tutte le parti della richiesta.

Come Parti dell'Unione   forse molto, ma soprattutto dopo l'ultima UNIONE è necessario inserire un punto e virgola.

Un'altra bella caratteristica UNIONE   è la mancanza di ripetizione. Ad esempio, se la stessa persona è sia tra i dipendenti che tra i datori di lavoro, ovviamente, con lo stesso importo nel conto, allora nel campione sarà non 2 volte, ma solo 1, che di solito è richiesto. E se hai ancora bisogno di ripetizione, allora c'è UNION ALL:

SELEZIONA `login`,` importo` DA `datori di lavoro` UNIONE TUTTO SELEZIONA` accesso`,` importo` DA` staff`;

Come questo utilizza un'istruzione UNION abbastanza semplice in una query SQL, semplificando la procedura per l'output immediato da molte tabelle dello stesso tipo di dati, che a sua volta avrà un ottimo effetto sulle prestazioni.

LA CAMPANA

C'è chi legge questa notizia prima di te.
Iscriviti per ricevere articoli freschi.
E-mail
Nome
Cognome
Come vuoi leggere The Bell
Niente spam