Casa / Accesso / Come utilizzare l'operatore SQL UNION per combinare i risultati della query. Operatore per lavorare con gli insiemi UNION Organizza le query con l'unione

Come utilizzare l'operatore SQL UNION per combinare i risultati della query. Operatore per lavorare con gli insiemi UNION Organizza le query con l'unione

Più Query SQL una singola istruzione viene utilizzata per restituire dati da una o più tabelle. SQL consente inoltre di eseguire più query separate contemporaneamente e visualizzare il risultato come un unico set di dati. Tali query combinate vengono generalmente chiamate combinazioni o interrogazioni complesse.

1. Utilizzando l'operatore UNION

Richieste in lingua SQL combinato con l'operatore UNIONE. Per fare ciò, è necessario specificare ogni richiesta SELEZIONARE e inserire la parola chiave tra di loro UNIONE. Limitazioni al numero di operatori utilizzati UNIONE in una richiesta generale non lo è. Nella sezione precedente, lo abbiamo notato Accesso incapace di creare join esterno completo, ora vedremo come possiamo raggiungere questo obiettivo tramite l'operatore UNIONE.

SELEZIONARE *
DA Sumproduct SINISTRA UNISCITI a Sellers ON Sumproduct.City = Sellers.City
UNIONE
SELEZIONARE *

DA Sumproduct DESTRA UNISCITI a Sellers SU Sumproduct.City = Sellers.City

Vediamo che la query ha visualizzato sia tutte le colonne della prima tabella che dell'altra, indipendentemente dal fatto che tutti i record abbiano corrispondenze in un'altra tabella.

Va inoltre notato che in molti casi, invece di UNIONE possiamo usare l'offerta DOVE con molte condizioni e ottenere un risultato simile. Tuttavia, a causa di UNIONE i record sembrano più concisi e comprensibili. È inoltre necessario seguire alcune regole quando si scrivono query combinate:

  • richiesta UNIONE deve includere due o più operatori SELEZIONARE separati dalla parola chiave UNIONE(ad esempio, se la query utilizza quattro istruzioni SELECT, devono esserci tre parole chiave UNION)
  • ogni richiesta nell'operatore UNIONE deve avere le stesse colonne, espressioni o aggregati e deve anche essere elencato nello stesso ordine
  • i tipi di dati delle colonne devono essere compatibili. Non devono essere necessariamente dello stesso tipo, ma per poterlo fare devono essere di un tipo simile DBMS potrebbe convertirli in modo inequivocabile (ad esempio, potrebbero essere diversi tipi di dati numerici o diversi tipi di data).

2. Abilita o disabilita le righe ripetute

Richiesta da UNIONE rimuove automaticamente tutte le righe duplicate dal set di risultati della query (ovvero, si comporta come DOVE con più condizioni in un'unica affermazione SELEZIONARE). Questo comportamento dell'operatore UNIONE per impostazione predefinita, ma possiamo cambiarlo se vogliamo. Per fare ciò, dovremmo usare l'operatore UNIONE TUTTI invece di UNIONE.

3. Ordinamento dei risultati di query combinate

Risultati dell'esecuzione dell'istruzione SELEZIONARE ordinati per frase ORDINATO DA. Quando si combinano le query con UNIONE una sola offerta ORDINATO DA può essere utilizzato e deve essere incluso nell'ultima affermazione SELEZIONARE. In effetti, in pratica non ha molto senso ordinare parte dei risultati in un ordine e l'altra parte in un altro. Quindi alcuni suggerimenti ORDINATO DA non è consentito presentare domanda.

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

SELECT COLUMNNAMES (1..N) DA TABLE_NAME UNION SELECT COLUMN_NAMES (1..N) DA TABLE_NAME

In questo costrutto, le query che vengono unite possono avere o meno condizioni nella clausola WHERE. Utilizzando l'operatore UNION, puoi combinare le query per recuperare i dati sia dalla stessa tabella che da diverse.

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

Totali e singoli valori in una tabella utilizzando l'istruzione SQL UNION

Con una query, puoi visualizzare i valori delle singole colonne della tabella, ad esempio il numero di anni di lavoro dei dipendenti dell'azienda, i loro salari e altri. Un'altra richiesta: l'utilizzo funzioni aggregate- è possibile ottenere, ad esempio, l'importo delle retribuzioni percepite dai dipendenti dei reparti o che ricoprono determinate posizioni, oppure il numero medio di anni di esperienza lavorativa (in tali query viene utilizzato il raggruppamento tramite l'operatore GROUP BY).

Ma cosa succede se abbiamo bisogno di ottenere sia un riepilogo di tutti i valori individuali che i valori totali in una tabella? È qui che viene in soccorso l'operatore SQL UNION, con l'aiuto del quale vengono combinate due query. L'ordine deve essere applicato al risultato del join utilizzando la clausola ORDER BY. Perché questo è necessario sarà meglio compreso dagli esempi.

Esempio 1 Il database dell'azienda contiene una tabella Staff contenente i dati sui dipendenti dell'azienda. Ha le colonne Stipendio (stipendio), Lavoro (posizione) e Anni (anzianità di servizio). La prima query restituisce i singoli stipendi ordinati per posizione:

SELEZIONA Nome, Lavoro, Stipendio DALLO STAFF ORDINA PER Lavoro

NomelavoroStipendio
Sandersmons18357.5
Marenghimons17506.8
PernaleI saldi18171.2
medicoI saldi12322.4
fattoreI saldi16228.7

La seconda query restituirà lo stipendio totale per posizione. Stiamo già preparando questa query per l'unione con la prima, quindi ricorderemo che la condizione di unione è 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 "Z-TOTAL" nella tabella con i totali:

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

Il risultato della query sarà la seguente tabella:

NomelavoroStipendio
Z-TOTALEmons35864.3
Z-TOTALEI saldi46722.3

Ora uniamo le query utilizzando l'operatore UNION e applichiamo l'operatore ORDER BY al risultato dell'unione. Dovrebbe essere raggruppato in due colonne: lavoro (Lavoro) e nome (Nome), in modo che le righe con valori totali (totali), in cui il valore del nome è "Z-TOTAL", siano sotto le righe con valori individuali. La combinazione dei risultati della query sarà la seguente:

(SELEZIONA Nome, Lavoro, Stipendio DALLO STAFF) UNION (SELEZIONA "Z-TOTAL" COME Nome, Lavoro, SUM (Stipendio) COME Stipendio DALLO STAFF GRUPPO PER Lavoro) ORDINA PER Lavoro, Nome

Il risultato dell'esecuzione di una query con l'operatore UNION sarà la seguente tabella, in cui ogni prima riga in ogni gruppo di posizioni 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
PernaleI saldi18171.2
Z-TOTALEI saldi46722.3

Scrivi tu stesso le domande usando UNION e poi vedi la soluzione

Esempio 2 I dati sono gli stessi dell'esempio 1, ma il compito è un po' più complicato. È necessario visualizzare in una tabella non solo le retribuzioni individuali ordinate per posizione e le retribuzioni totali per posizioni, ma anche le retribuzioni totali per tutti i dipendenti.

Esempio 3 Il database dell'azienda contiene una tabella Staff contenente i dati sui dipendenti dell'azienda. Ha le colonne Nome (cognome), Reparto (numero reparto) e Anni (anzianità di servizio).

NomeDipartimentoanni
Sanders20 7
Pernale20 8
Marenghi38 5
medico20 5
fattore38 8

Visualizza in una tabella l'anzianità media di servizio per reparto e i singoli valori della durata dell'anzianità di servizio dei dipendenti, raggruppati per numero di reparto.

Altri casi di unione di query sulla stessa tabella utilizzando l'operatore SQL UNION

Esempio 4 Il database dell'azienda contiene una tabella Staff contenente i dati sui dipendenti dell'azienda. Ha le colonne Stipendio (stipendio), Lavoro (posizione) e Anni (anzianità di servizio). La prima query è necessaria per ottenere dati sui dipendenti il ​​cui stipendio è superiore a 21000:

Il risultato della query sarà la seguente tabella:

Ora abbiamo bisogno di dati che combinino i criteri di selezione applicati nelle due query. Combiniamo le query utilizzando l'operatore UNION:

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

IDNome
10 Sanders
30 Marenghi
100 Plotz
140 Fray
160 Molinare
240 Daniele
260 Jones

Una query con l'operatore UNION può restituire più colonne, è importante, ripetiamo, che nelle query combinate il numero di colonne, il loro ordine e i tipi di dati corrispondano.

Per prima cosa otteniamo dati sulle categorie e parti di categorie di annunci che hanno 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 vogliamo recuperare i dati che corrispondono ai criteri della prima e della seconda query. Combiniamo le query utilizzando l'operatore UNION:

Il risultato della query sarà la seguente tabella:

Combinazione di risultati di query su due tabelle utilizzando l'operatore SQL UNION

Finora, abbiamo esaminato le query UNION che combinano i risultati della stessa tabella. Ora uniremo i risultati di due tabelle.

Esempio 6 C'è un database di magazzino di materiali da costruzione. Ha una tabella contenente i dati dello sfondo. La tabella Vinil contiene dati sulle carte da parati in vinile, la tabella Paper - sulle carte da parati in carta. È necessario scoprire i dati sui prezzi degli sfondi dell'uno e dell'altro tavolo.

Per recuperare i dati sui prezzi della carta da parati in vinile non ripetuti, creeremo una query con la parola DISTINCT:

SELEZIONA DISTINTO Prezzo DA VINIL

Il risultato della query sarà la seguente tabella:

Ora facciamo una query combinata con l'operatore UNION:

SELECT DISTINCT Prezzo DA VINIL UNION SELECT DISTINCT Prezzo DA CARTA

Poiché non stiamo usando la parola TUTTO, non ci saranno valori duplicati per 400, 500 e 530. 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 gli stessi dell'esempio precedente.

Vuoi ottenere tutti i dati sui prezzi, compresi quelli ricorrenti. La query per combinare i risultati utilizzando l'operatore UNION sarà simile alla query nell'esempio precedente, ma invece di solo UNION scriviamo UNION ALL:

SELEZIONA DISTINTO Prezzo DA VINIL UNION TUTTI SELEZIONA DISTINTO 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'operatore SQL UNION, puoi combinare sia query semplici che query contenenti sottoquery (query nidificate). Consideriamo un esempio corrispondente.

Esempio 8 C'è un database "Teatro". La sua tabella Play contiene dati sulle produzioni (titoli - nella colonna Nome), nella tabella Regista - dati 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 direttore. Dir_id è anche una chiave esterna della tabella Play, si riferisce alla chiave primaria della tabella Director. È necessario mostrare spettacoli diretti da John Barton e Trevor Nunn.

Soluzione. Uniamo i risultati di due query - una restituisce le performance del regista John Barton, l'altra - il regista Trevor Nunn. E eseguiamo ciascuna di queste query combinate alla tabella Play con una sottoquery alla tabella Director, che restituisce dir_id dal nome e cognome del regista. Ogni query esterna prende il valore della chiave dir_id dalla sottoquery e restituisce i nomi delle produzioni (Nome):

Database relazionali e linguaggio SQL

L'operatore del set di dati UNION combina i set di risultati di due o più query e mostra tutte le righe di tutte le query come un set di risultati.

UNION appartiene alla classe degli operatori per lavorare con set di dati (operatore set). Altri operatori di questo tipo includono INTERSECT ed EXCERT (EXCEPT e MINUS sono equivalenti funzionali, ma EXCEPT è nello standard ANSI).Tutti gli operatori di set di dati vengono utilizzati per manipolare i set di risultati di due o più query contemporaneamente, da cui il loro nome.

Sintassi S0L2003

Non esiste un limite tecnico al numero di query in un operatore UNION. La sintassi generale è la seguente.

UNIONE

UNIONE

Parole chiave

UNIONE

Indica che i set di risultati verranno uniti in un unico set di risultati. Le righe duplicate vengono rimosse per impostazione predefinita.

TUTTO

Vengono unite anche le righe duplicate di tutti i set di risultati.

DISTINTO

Le righe duplicate vengono rimosse dal set di risultati. Le colonne contenenti valori NULL sono considerate duplicate. (Se le parole chiave ALL e DISTINCT non vengono utilizzate, l'impostazione predefinita è DISTINCT.)

Regole generali

C'è solo una regola importante da tenere a mente quando si utilizza l'operatore UNION: l'ordine, il numero e il tipo di dati delle colonne devono essere identici in tutte le query.

I tipi di dati non devono essere identici, ma devono essere compatibili. Ad esempio, i tipi CHAR e VARCHAR sono compatibili. Per impostazione predefinita, lo zabor risultante utilizza la dimensione del più grande dei tipi compatibili e in una query che combina tre colonne CHAR - CHAR(5), CHAR(IO) e CHAR(12), i risultati saranno in CHAR(12 ) e nelle colonne le dimensioni più piccole aggiungeranno spazi extra.

Sebbene lo standard ANSI dia all'operatore INTERSECT la precedenza su altri operatori di insiemi, molte piattaforme trattano questi operatori come aventi la stessa precedenza. Puoi controllare in modo esplicito la precedenza degli operatori usando le parentesi. In caso contrario, molto probabilmente il DBMS li eseguirà in ordine da sinistra a destra.

La clausola DISTINCT può (a seconda della piattaforma) avere un costo di prestazioni significativo perché spesso richiede un passaggio aggiuntivo attraverso il set di risultati per rimuovere i record duplicati. La clausola ALL può essere utilizzata per migliorare le prestazioni in tutti i casi in cui non sono previsti duplicati (o se sono consentiti duplicati).

Secondo lo standard ANSI, in una query può essere utilizzata una sola clausola ORDER BY. Mettilo alla fine dell'ultima istruzione SELECT. Per evitare ambiguità quando si specificano colonne e tabelle, assicurarsi di assegnare alias appropriati a tutte le colonne in tutte le tabelle. Tuttavia, quando si specificano i nomi di colonna in una query SELECT ... UNION, viene utilizzato solo l'alias della prima query. Per esempio:

SELECT au_lname AS cognome, au_fname AS nome DA autori UNION SELECT emp_lname AS cognome, emp_fname AS nome DA dipendenti ORDINA PER cognome, nome;

Inoltre, poiché le query dell'operatore UNION possono contenere colonne con tipi di dati compatibili, il comportamento del codice può variare tra le piattaforme, soprattutto per quanto riguarda la lunghezza del tipo di dati della colonna. Ad esempio, se la colonna au_fname della prima query è notevolmente più lunga della colonna emplname della seconda query, piattaforme diverse potrebbero avere regole diverse per determinare quale lunghezza utilizzare. Tuttavia, in generale, le piattaforme scelgono un tipo di dati più lungo (e meno restrittivo) per il set di risultati.

Ciascun RDBMS può applicare le proprie regole per determinare il nome di una colonna se colonne in tabelle diverse hanno nomi diversi. Di norma vengono utilizzati i nomi della prima query.

DB2

La piattaforma DB2 supporta le parole chiave ANSI UNION e UNION ALL più la clausola VALUES.

[, (espressione-!, espressione2, …)] […] […]

Consente di specificare uno o più set di valori definiti manualmente per i record nel set di risultati combinato. Ciascuno di questi valori deve contenere esattamente lo stesso numero di colonne delle query dell'operatore UNION. Le stringhe di valori nel set di risultati sono separate da virgole.

Sebbene la clausola UNION DISTINCT non sia supportata, l'equivalente funzionale è la clausola UNION. La clausola CORRESPONDING non è supportata.

I tipi di dati come VARCHAR, LONG VARGRAPHIC, BLOB, CLOB, DBCLOB, DATALINK e i tipi di struttura non possono essere utilizzati con la parola chiave UNION (ma possono essere usati con la clausola UNION ALL).

Se tutte le tabelle utilizzano lo stesso nome di colonna, il set di risultati utilizza quel nome. Se i nomi di colonna sono diversi, DB2 genera un nuovo nome di colonna. Dopodiché, questa colonna non può essere utilizzata in una clausola ORDER BY o FOR UPDATE.

Se vengono utilizzati più operatori di set di dati in una singola query, quelli racchiusi tra parentesi vengono eseguiti per primi. Successivamente, le istruzioni vengono eseguite in ordine da sinistra a destra. Tuttavia, tutte le operazioni INTERSECT vengono eseguite prima delle operazioni UNION o EXCERT. Per esempio:

SELECT empno FROM impiegato DOVE reparto di lavoro COME "E%" UNION SELECT empno FROM emp_act WHERE projno IN ("IF1000", "IF2000", "AD3110") UNION VALUES ("AA0001), (AB0002"), ("AC0003")

In questo esempio, otteniamo tutti gli ID dei dipendenti dalla tabella dei dipendenti che si trovano in qualsiasi reparto con un nome che inizia con "E", nonché gli ID di tutti i dipendenti dalla tabella contabile emp_act che lavorano nei progetti IF1000", "IF2000" e "AD3110". Inoltre, il dipendente ID "AA000T, "AB0002" e "AC00031.

MySQL

Non supportato.

Oracolo

La piattaforma Oracle supporta le parole chiave UNION e UNION ALL dello standard ANSI SQL. La sintassi è la seguente.

Oracle non supporta la clausola CORRESPONDING. La clausola UNION DISTINCT non lo fa. è supportato, ma l'equivalente funzionale è la clausola UNION. La piattaforma Oracle non supporta l'uso delle clausole UNION ALL e UNION nelle seguenti situazioni.

Se la prima query nell'istruzione contiene espressioni nell'elenco di elementi, alias quella colonna utilizzando la clausola AS. Inoltre, solo l'ultima query in un'istruzione può contenere una clausola ORDER BY. Ad esempio, puoi ottenere tutti gli ID negozio univoci (store_id) senza duplicati utilizzando la query seguente.

SELECT stor_id DA negozi UNION SELECT stor_id DA vendite;

PostgreSQL

La piattaforma PostgreSQL supporta le parole chiave UNION e UNION ALL nella sintassi ANSI standard.

SELECT 2 UNION dichiarazione

La piattaforma PostgreSQL non supporta l'uso delle clausole UNION e UNION ALL nelle query con una clausola FOR UPDATE. PostgreSQL non supporta la clausola CORRESPONDING. La clausola UNION DISTINCT non è supportata; l'equivalente funzionale è la clausola UNION.

La prima query in un'istruzione non può contenere clausole ORDER BY o LIMIT. Le query successive con le clausole UNION e UNION ALL possono contenere queste clausole, ma tali query devono essere racchiuse tra parentesi. In caso contrario, la clausola ORDER BY o LIMIT a destra si applicherà all'intera operazione.

SELECT a.au_lname FROM autori AS a WHERE a.au_lnanie LIKE "P%" UNI0N SELECT e.lname FROM impiegato AS e WHERE e.lname LIKE "P%";

server SQL

La piattaforma SQL Server supporta le parole chiave UNION e UNION ALL nella sintassi ANSI standard.

SELECT 1 UNION dichiarazione

SELECT 2 UNION dichiarazione

SQL Server non supporta la clausola CORRESPONDING. La clausola UNION DISTINCT non è supportata, ma la clausola UNION è l'equivalente funzionale.

Con le clausole UNION e UNION ALL, è possibile utilizzare l'istruzione SELECT…INTO, ma la parola chiave INTO deve trovarsi nella prima query dell'operatore union. Parole chiave speciali come SELECT TOP e GROUP BY…WITH CUBE possono essere utilizzate in tutte le query di join. Tuttavia, assicurati di includere queste clausole in tutte le richieste di unione. Se si utilizzano le clausole SELECT TOP o GROUP BY... WITH CUBE nella stessa query, l'operazione avrà esito negativo.

Tutte le query in un join devono contenere lo stesso numero di colonne. Non è necessario che i tipi di dati delle colonne siano identici, ma devono essere eseguibili tra loro in modo implicito. Ad esempio, sono consentite entrambe le colonne CHAR e VARCHAR. Durante l'output dei dati, SQL Server utilizza la dimensione della colonna più grande per determinare la dimensione del tipo di dati per una colonna del set di risultati. Pertanto, se entrambe le colonne CHAR(5) e CHAR(IO) vengono utilizzate in un'istruzione SELECT... UNION, entrambe le colonne verranno visualizzate nella colonna CHAR(IO). I tipi di dati numerici vengono trasmessi e visualizzati come il tipo con la massima precisione.

Ad esempio, la query seguente combina i risultati di due query indipendenti che utilizzano la clausola GROUP BY...WITH CUBE.

Ho già scritto di . E lì l'output di una tabella dipendeva dal contenuto di un'altra. Ma succede quando è necessaria la completa indipendenza dell'output di una tabella da un'altra. Tutto quello che vuoi è solo recuperare record da più tabelle in una query, non più. E per questo utilizzato nella parola chiave SQL UNION.

Scopriamolo con te Query SQL utilizzando UNION:

SELECT `login`, `amount` FROM `datori di lavoro` UNION SELECT `login`, `amount` FROM `staff`;

Questa query restituirà i dati di accesso e gli importi sui conti di tutti i datori di lavoro e dipendenti di un determinato sito. Cioè, i dati erano in tabelle diverse, ma la loro somiglianza consente di visualizzarli immediatamente. Da qui, tra l'altro, arriva la regola dell'uso Richieste dell'UNIONE: il numero e l'ordine dei campi devono corrispondere in tutte le parti della query.

Tale UNION-parti può essere molto, ma il più importante dopo l'ultima UNION, devi mettere un punto e virgola.

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

SELECT `login`, `amount` FROM `datori di lavoro` UNION ALL SELECT `login`, `amount` FROM `staff`;

Come questo un operatore UNION piuttosto semplice viene utilizzato in una query SQL, che semplifica la procedura per visualizzare dati dello stesso tipo da più tabelle contemporaneamente, il che a sua volta avrà un ottimo effetto sulle prestazioni.

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


Su un set è possibile eseguire operazioni di unione, differenza e prodotto cartesiano. Le stesse operazioni possono essere utilizzate nelle query sql (eseguire operazioni con query).

Una parola funzione viene utilizzata per combinare più query UNIONE.
Sintassi:

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

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

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

Se usato parametro TUTTI, tutte le righe di output duplicate vengono mantenute. Se il parametro è assente, nel set di risultati rimangono solo righe univoche.

È possibile combinare un numero qualsiasi di query.

L'utilizzo dell'operatore UNION richiede il rispetto di diverse condizioni:

  1. il numero di colonne di output di ciascuna delle query deve essere lo stesso;
  2. le colonne di output di ciascuna delle query devono essere comparabili tra loro in termini di tipi di dati (in ordine di priorità);
  3. il set risultante utilizza i nomi di colonna specificati nella prima query;
  4. ORDER BY può essere utilizzato solo alla fine di una query multipart, poiché si applica al risultato di un join.

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


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

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

Risultato:

Considera un esempio più complesso con un inner join:

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`, pc. `Numero` , `Prezzo` DA pc INNER JOIN prodotto SU pc. `Numero` = prodotto. Prodotto UNION SELECT `Numero`. `Tipo` , taccuino. `Numero` , `Prezzo` DA notebook INNER JOIN prodotto SU notebook. `Numero` = prodotto. `Numero` ORDINA PER `Prezzo`

SELEZIONA prodotto.`Tipo` , pc.`Numero` , `Prezzo` DA pc INNER JOIN prodotto SU pc.`Numero` = prodotto.`Numero` UNION SELECT prodotto.`Tipo` , notebook.`Numero` , `Prezzo` DA notebook INNER JOIN prodotto SU notebook.`Numero` = prodotto.`Numero` ORDINA PER `Prezzo`

Risultato:

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

Unione SQL 2. Trova i numeri e i prezzi di tutti i prodotti fabbricati dal produttore Russia

Il predicato di esistenza SQL ESISTE

Il linguaggio SQL ha strutture per eseguire operazioni di intersezione e differenza di query: la clausola INTERSECT (intersezione) e la clausola EXCEPT (differenza). Queste clausole funzionano allo stesso modo di UNION funziona: solo le righe che sono presenti in entrambe le query - INTERSECT o solo quelle righe della prima query che sono assenti nella seconda - EXCEPT entrano 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 è TRUE se la sottoquery restituisce un numero qualsiasi di righe, altrimenti EXISTS è FALSE. C'è anche un predicato NOT EXISTS che fa il contrario.

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

EXISTS(sottoquery tabella)

Esempio: Trova quei produttori di computer che producono anche laptop


✍ Soluzione:

SELECT DISTINCT Produttore DAL prodotto COME pc_product DOVE Tipo = "Computer" ED ESISTE (SELEZIONA Produttore DAL prodotto DOVE Tipo = "Notebook" AND Produttore = pc_product.Fabbricante)

Risultato:

Trova quei produttori di computer che non producono stampanti

Parole chiave SQL ALCUNI | Ogni e qualsiasi

Le parole chiave SOME e ANY sono sinonimi, quindi entrambe possono essere utilizzate in una query. Il risultato di tale query sarà una colonna di valori.

Sintassi:

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

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

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

Esempio: Trova i fornitori di computer che non hanno numeri di parte in vendita (cioè non nella tabella del PC)


✍ Soluzione:

Dati iniziali delle tabelle:

Risultato:

Nell'esempio, il predicato Number = ANY(SELECT Number FROM pc) restituirà TRUE se il numero della query principale viene trovato nell'elenco dei numeri nella tabella pc (restituito dalla sottoquery). Inoltre, viene utilizzato NOT. Il set di risultati consisterà in una colonna - Produttore. Per evitare che lo stesso produttore venga visualizzato più volte, è stata introdotta la parola chiave DISTINCT.
Consideriamo ora l'uso della parola chiave ALL:

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


✍ Soluzione:

Importante: Vale la pena notare che, in generale, una query con ANY restituisce un insieme di valori. Pertanto, l'utilizzo di una sottoquery in una clausola WHERE senza gli operatori EXISTS , IN , ALL e ANY che producono un valore booleano (booleano) può causare un errore di runtime della query


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


✍ Soluzione:


Questa query è corretta perché l'espressione scalare Price viene confrontata con una sottoquery che restituisce un singolo valore

Funzioni di stringa SQL

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

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

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

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

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


✍ Soluzione:

SELECT DISTINCT LEFT(`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:

SELECT `name` , REPLACE(`name` , "a", "aa") DA `insegnanti`