SQL distinti: descrizione, esempi, proprietà
Spesso, quando si utilizza SQL per recuperare i dati dalle tabelle, l'utente riceve i dati ridondanti è l'esistenza di un assolutamente identiche righe duplicate. Per evitare questa situazione, utilizzare SQL argomento distinto nella frase Select. Questo articolo discuterà esempi dell'uso di questa tesi, così come le situazioni in cui l'applicazione deve essere abbandonato dall'argomento.
Prima di procedere a considerare gli esempi specifici, creare il database richiesto un paio di tavoli.
tavolo di preparazione
Immaginiamo che abbiamo un database memorizza le informazioni relative alla carta da parati presentati in due tabelle. Questo oboi tavolo (carta da parati) con campi ID (identificativo univoco), del tipo (tipo di carta da parati -. Carta, vinile, etc.), il colore (colore), una struttura (struttura) e il prezzo (prezzo). E tavolo Ostatki (residui) con campi id_oboi (un riferimento per l'identificatore univoco nella tabella Oboi) e la conta (il numero di rotoli in magazzino).
Riempire la tabella di dati. Nella tabella aggiungere la carta da parati 9 record:
Oboi |
||||
id |
tipo |
colore |
struct |
prezzo |
1 |
carta |
multicolore |
sbalzato |
56,9 |
2 |
carta a doppio strato |
beige |
liscio |
114.8 |
3 |
vinile |
arancione |
sbalzato |
504 |
4 |
vello |
beige |
sbalzato |
1.020,9 |
5 |
carta a doppio strato |
beige |
liscio |
150.6 |
6 |
carta |
multicolore |
liscio |
95.4 |
7 |
vinile |
marrone |
liscio |
372 |
8 |
vello |
bianco |
sbalzato |
980.1 |
9 |
panno |
rosa |
liscio |
1.166,5 |
La tabella con i resti – e nove record:
Ostatki |
|
id_oboi |
contare |
1 |
8 |
2 |
12 |
3 |
24 |
4 |
9 |
5 |
16 |
6 |
7 |
7 |
24 |
8 |
32 |
9 |
11 |
Si procede alla descrizione dell'ordine distinto SQL.
Posto distinto nella clausola Select
argomento distinto deve essere posto immediatamente dopo la parola chiave di selezionare nelle query. Ha applicato a tutte le colonne specificate nella frase Select, perché sarà escluso dal risultato della query finale è stringhe assolutamente identici. Così, una volta è sufficiente per specificare quando si scrive SQL «selezionare distinta» richiesta. L'eccezione è l'uso di distinte funzioni aggregate all'interno che guardano un po 'più tardi.
Va ricordato che la maggior parte del database e non riconosce il tipo di richiesta:
SELEZIONA Ostatki.Count distinti, Oboi distinti. * DA Oboi INNER JOIN Ostatki ON Oboi.id = Ostatki.id_oboi |
Non v'è stato considerato argomento più volte o una volta specificati, ma prima del secondo, terzo o un'altra colonna selezionata. Si otterrà un errore riferendosi a un errore di sintassi.
Applicazione interroga distinti nello standard
È evidente che con appropriate tabelle struttura dell'edificio e riempiendole all'interno di una singola tabella esclusa la situazione quando ci sono stringhe assolutamente identiche. Pertanto, l'esecuzione di query «SELECT DISTINCT *» con un campione di una tabella è impraticabile.
Si consideri una situazione in cui abbiamo bisogno di sapere che tipo che abbiamo carta da parati, solo per comodità, per ordinare per tipologia:
SELEZIONA Oboi.type DA Oboi ordine per tipo |
E ottenere i risultati:
tipo |
carta |
carta |
carta a doppio strato |
carta a doppio strato |
vinile |
vinile |
panno |
vello |
vello |
Come si vede nella tabella ci sono le righe duplicate. Se aggiungiamo la proposta Seleziona distinti:
SELEZIONA Oboi.type distinta DA Oboi ordine per tipo |
otteniamo il risultato senza ripetizione:
tipo |
carta |
carta a doppio strato |
vinile |
panno |
vello |
Così, se adeguatamente inserire dati in una tabella, poi subito dopo una telefonata o richiesta di acquirenti possiamo rispondere che la carta da parati liquido, fibra di vetro e carta da parati acrilica disponibili nel negozio non lo sono. Dato che la gamma di negozi di solito non è limitato ad un centinaio di carta da parati, visualizzare l'elenco dei tipi non univoci sarebbe abbastanza alta intensità di lavoro.
Applicazione di funzioni di aggregazione distinte all'interno
argomento distinto SQL può essere utilizzato con qualsiasi funzione di aggregazione. Ma per il Min e Max la sua applicazione non avrà alcun effetto, ma quando si calcola la somma o il valore medio è raramente una situazione in cui nessuno avrebbe dovuto tener conto delle ripetizioni.
Supponiamo di voler verificare la capacità del nostro magazzino e di inviare questa richiesta, calcola il numero totale di bobine in magazzino:
SELECT SUM (Ostatki.count) DA Ostatki |
Richiesta darà la risposta 143. Se, tuttavia, cambierà in:
sum SELECT (Ostatki.count distinti) DA Ostatki |
si ottiene il totale 119, come sfondo per i codici 3 e 7 sono disponibili a magazzino nella stessa quantità. Tuttavia, è evidente che la risposta è sbagliata.
Più spesso utilizzato in funzione distinta SQL Conte. Così, si può facilmente scoprire come molti tipi unici di carta da parati, noi abbiamo:
SELECT count (Oboi.type distinti) DA Oboi |
E ottenere il risultato di 5 – carta normale e vinile doppio strato e tessuto non tessuto. Sicuramente visto tutti gli annunci del tipo: "Solo noi abbiamo più di 20 tipi diversi di carta da parati", con il quale si intende che questo negozio non è solo un paio di dozzine di panini e una varietà di carta da parati moderni tipi.
E 'interessante notare che nella stessa query, è possibile specificare più funzioni come il conte attributo DISTINCT, e senza di essa. Questa è l'unica situazione in cui distinto Select'e può essere presente più volte.
Quando abbandonare l'uso dell'argomento
Dall'utilizzo di SQL argomento distinto dovrebbe essere abbandonato in uno dei due casi:
- Si esegue una selezione di tabelle e sono fiducioso nel valore unico ciascuno. In questo caso, l'uso del ragionamento è inadeguato, perché si tratta di un carico aggiuntivo sul server o client (a seconda del tipo di DBMS).
- Hai paura di perdere i dati. Cerchiamo di spiegare.
Supponiamo capo chiede di elencare la carta da parati che si ha, con l'indicazione di due soli colonne – il tipo e il colore. Per abitudine, si dà un argomento distinti:
SELEZIONA Oboi.type distinti, Oboi.color DA Oboi ORDER BY Oboi.type |
E – perdere alcuni dati:
tipo |
colore |
carta |
multicolore |
carta a doppio strato |
beige |
vinile |
marrone |
vinile |
arancione |
panno |
rosa |
vello |
beige |
vello |
bianco |
Può dare l'impressione che la carta da parati carta (convenzionale e doppio strato) che hanno una sola mente, infatti, anche nel nostro piccolo tavolo di due articolo (risultato senza distinti):
tipo |
colore |
carta |
multicolore |
carta |
multicolore |
carta a doppio strato |
beige |
carta a doppio strato |
beige |
vinile |
marrone |
vinile |
arancione |
panno |
rosa |
vello |
bianco |
vello |
beige |
Pertanto, come per iscritto ogni richiesta con l'argomento distinta necessità di essere attenti e competenti a decidere sulla sua applicazione, a seconda del compito.
alternativa distinta
Contrariamente a quanto sostiene distinti – Tutto argomento. Nel ricorso righe duplicate vengono memorizzati. Ma, come il database predefinito e scopre che è necessario per visualizzare tutti i valori, l'argomento Tutti – è piuttosto un qualificatore che l'argomento della funzione attuale. Speriamo che ora capisce che distinti (SQL) è usato. Descrizione vi darà tutte le informazioni circa la possibilità di utilizzare questo argomento per risolvere i problemi differenti. Dopo tutto, come si è scoperto, anche una semplice argomentazione tale nella sua applicazione si nasconde la possibilità molto concreta di perdere alcuni dati e visualizzare informazioni imprecise.