877 Shares 7125 views

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:

  1. 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).
  2. 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.