SQL distinct: descriere, exemple, proprietăți

Adesea, atunci când se utilizează SQL pentru a prelua informații din tabele, utilizatorul primește date redundante, care constă în prezența unor rânduri dublate absolut identice. Pentru a exclude această situație, utilizați argumentul distinct SQL din clauza Selectare. În acest articol, vom examina exemple de utilizare a acestui argument, precum și situații în care este mai bine să abandonăm argumentul.

Înainte de a începe să luăm în considerare exemple specifice, vom crea câteva tabele necesare în baza de date. sql distinct

Pregătirea meselor

Imaginați-vă că avem în baza de date stocate informații despre tapet, prezentate în două tabele. Acest tabel oboi (tapet) cu câmpuri id (identificator unic), de tip (tip de tapet -. Hârtie, vinil, etc), culoare (culoare), struct (structură) și prețul (prețul). Și tabelul Ostatki (reziduuri) cu câmpuri id_oboi (o referire la identificatorul unic în tabelul Oboi) și numărul de (numărul de role în stoc).

Completați tabelele cu date. În tabelul cu tapet adăugați 9 intrări:

oboi

id

tip

culoare

struct

preț

1

hârtie

multicolor

în relief

56.9

2

Hârtie pe două straturi

bej

neted

114.8

3

vinilin

portocaliu

în relief

504

4

Mănuși din lână nețesute

bej

în relief

1020.9

5

Hârtie pe două straturi

bej

neted

150.6

6

hârtie

multicolor

neted

95.4

7

vinilin

maro

neted

372

8

Mănuși din lână nețesute

alb

în relief

980.1

9

pânză

roz

neted

1166.5

În tabelul cu restul sunt și nouă înregistrări:

Ostatki

id_oboi

conta

1

8

2

12

3

24

4

9

5

16

6

7

7

24

8

32

9

11

Să începem prin descrierea modului de utilizare distinct în SQL.

Locul distinct în clauza Selectare

Argumentul distinct ar trebui plasat imediat după cuvântul cheie Select în interogări. Se aplică imediat tuturor coloanelor specificate în clauza Select deoarece va exclude rânduri absolut identice din rezultatul interogării. Astfel, este suficient să specificați "selectați distinct" atunci când scrieți interogarea SQL. Singura excepție este utilizarea unor funcții distincte în interiorul funcțiilor agregate, pe care le vom lua în considerare mai târziu. sql selectați distinct

Trebuie reținut faptul că majoritatea DBMS nu vă recunoaște solicitarea în felul următor:

SELECT altki.Count diferit, distinct Oboi. *

Din Oboi

INNER JOIN Alteri pe Oboi.id = Ostatki.id_oboi

Aici, argumentul este specificat de mai multe ori sau specificat o dată, dar înainte de a doua, a treia sau a altei coloane selectabile. Veți primi o eroare cu o trimitere la inexactități în sintaxă.

Folosind distincte în interogările standard



Este evident că, odată cu construirea corectă a structurii meselor și a umplerii acestora, într-o singură masă situațiile sunt excluse atunci când sunt întâlnite șiruri identice. Prin urmare, executarea interogării "Select distinct *" cu o selecție dintr-o tabelă este practic imposibilă. distinct în sql

Imaginați-vă o situație în care trebuie să aflăm ce tip de tapet avem, doar pentru comoditate, sortați după tip:

SELECT Oboi.type

Din comanda Oboi după tip

Și obținem rezultatul:

tip

hârtie

hârtie

Hârtie pe două straturi

Hârtie pe două straturi

vinilin

vinilin

pânză

Mănuși din lână nețesute

Mănuși din lână nețesute

După cum puteți vedea, în tabel există rânduri duplicate. Dacă adăugăm la clauza distinctă Selectare:

SELECT un tip distinct Oboi

Din comanda Oboi după tip

atunci obținem rezultatul fără a repeta:

tip

hârtie

Hârtie pe două straturi

vinilin

pânză

Mănuși din lână nețesute

Astfel, în cazul în care introduceți corect datele într-un tabel, apoi imediat după un apel telefonic sau o cerere de cumpărători putem răspunde că tapet lichid, fibra de sticla si tapet acrilic disponibile în magazin nu sunt. Având în vedere că sortarea în magazine nu este, de obicei, limitată la o sută de tapet, ar fi destul de solicitant pentru a scana lista de tipuri non-unice.

Folosind funcții distincte în cadrul agregatelor

SQL distinct poate fi folosit cu orice funcție agregată. Dar pentru Min și Max, utilizarea lui nu va avea nici un efect și atunci când se calculează suma sau valoarea medie, este rareori posibil să ne imaginăm o situație în care nu ar fi necesar să ținem seama de repetiții.

Să presupunem că vrem să știm cât de mult depozitul nostru este plin, iar pentru aceasta trimitem o cerere care calculează numărul total de rulouri din depozit:

SELECT suma (Alteki.count)

Din Alteki

Interogarea va returna un răspuns 143. Dacă ne schimbăm la:

SELECT suma (distincta suma de casă)

Din Alteki

atunci vom obține numai 119, deoarece tapetul de la articolele 3 și 7 este în stoc în aceeași cantitate. Cu toate acestea, este evident că acest răspuns este incorect.

Cel mai adesea, SQL este utilizat cu funcția Count. Deci, fără dificultate, putem afla câte tipuri unice de tapet avem în general:

SELECT numărul (distinct Oboi.type)

Din Oboi

Și obțineți rezultatul 5 - de hârtie obișnuită și de două straturi, de vinil, țesături și nețesute. Cu siguranță văzut toate anunțurile, cum ar fi: „Doar avem peste 20 de tipuri diferite de tapet“, prin care se înțelege că acest magazin nu este doar câteva zeci de role și o varietate de tipuri de tapet moderne.

Interesant, într-o singură cerere, puteți specifica mai multe funcții Count cu sau fără atributul distinct. Asta este, aceasta este singura situație în care distinct în Select poate fi prezent de mai multe ori.

Când ar trebui să resping utilizarea unui argument

Utilizarea argumentului distinct SQL ar trebui să fie aruncată în unul din două moduri:

  1. Alegeți din tabele și sunteți siguri de unicitatea valorilor din fiecare. În acest caz, utilizarea argumentului este inexactă, deoarece aceasta este o încărcare suplimentară pe server sau client (în funcție de tipul de DBMS).
  2. Ți-e frică să pierzi datele necesare. Vom explica.

Să presupunem că șeful vă cere să afișați o listă de tapet pe care o aveți, indicând doar două coloane - tipul și culoarea. În mod obișnuit, specificați argumentul distinct:

SELECTAȚI Oboi.type distinct, Oboi.color

Din Oboi

ORDER DE Oboi.type

Și - pierdeți câteva date:

tip

culoare

hârtie

multicolor

Hârtie pe două straturi

bej

vinilin

maro

vinilin

portocaliu

pânză

roz

Mănuși din lână nețesute

bej

Mănuși din lână nețesute

alb

Acesta poate da impresia că tapet de hârtie (convențională și dual-layer) am doar o singură minte, de fapt, chiar și în tabelul nostru mic de două articol (fără rezultat distincte):

tip

culoare

hârtie

multicolor

hârtie

multicolor

Hârtie pe două straturi

bej

Hârtie pe două straturi

bej

vinilin

maro

vinilin

portocaliu

pânză

roz

Mănuși din lână nețesute

alb

Mănuși din lână nețesute

bej

Prin urmare, ca în scrierea oricărei interogări, cu argumentul distinct, trebuie să fim atenți și să rezolvăm corect problema cu aplicarea ei, în funcție de sarcina în mână.

Alternativ distinct

Opusul argumentului distinct este argumentul Toate. Când îl utilizați, se salvează linii duplicate. Dar, în mod implicit, DBMS crede că este necesar să tipăriți toate valorile, argumentul All este mai mult un specificator decât un argument funcțional real. descriere specifică sqlSperăm că acum înțelegeți când se utilizează o distincție (SQL). Descrierea vă oferă informații complete despre oportunitatea aplicării acestui argument în rezolvarea diferitelor probleme. La urma urmei, după cum sa dovedit, chiar și un astfel de argument simplu în aplicația sa ascunde o probabilitate foarte palpabilă de a pierde unele date și de a deduce informațiile inexacte.

Distribuiți pe rețelele sociale:

înrudit
Instrucțiunea Select (SQL)Instrucțiunea Select (SQL)
Imagine de fundal Flizeline: nu toate sunt dăunătoareImagine de fundal Flizeline: nu toate sunt dăunătoare
Crearea unui interior elegant: tapet pentru o cărămidăCrearea unui interior elegant: tapet pentru o cărămidă
Tapet pe bază nețesută: avantaje și caracteristici ale lipiriiTapet pe bază nețesută: avantaje și caracteristici ale lipirii
Cum de a alege un tapet competent?Cum de a alege un tapet competent?
Tapet pentru baie - o soluție neașteptatăTapet pentru baie - o soluție neașteptată
Cum de a alege un tapet combinat pentru un dormitorCum de a alege un tapet combinat pentru un dormitor
Wallpaper pentru pictura in interior. Cum să alegi una potrivită și care sunt avantajele?Wallpaper pentru pictura in interior. Cum să alegi una potrivită și care sunt avantajele?
Cum de a lipi tapet non-țesute: câteva sfaturiCum de a lipi tapet non-țesute: câteva sfaturi
Cum se compun interogările SQL - exemple detaliateCum se compun interogările SQL - exemple detaliate
» » SQL distinct: descriere, exemple, proprietăți