/ / SQL distinct: descriere, exemple, proprietăți

SQL distinct: descriere, exemple, proprietăți

Adesea, atunci când se utilizează SQL pentru eșantionareinformații din tabele, utilizatorul primește date redundante, constând în prezența unor linii duplicate 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ă am păstrat în baza noastră de dateinformații despre tapet, prezentate în două tabele. Acesta este tabelul Oboi (tapet) cu câmpul id (identificator unic), tipul (tipul tapetului - hârtie, vinil etc.), culoarea, structura și prețul. Și tabelul Ostatki (resturi) cu câmpurile id_oboi (referință la identificatorul unic din tabelul Oboi) și numărul (numărul de rulouri din depozit).

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ăselectați cuvântul cheie din 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

Evident, cu o structură bine structuratătabelele și umplerea acestora, într-o singură masă, situațiile sunt excluse atunci când se întâlnesc ș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, dacă datele au fost corect introdusemese la o dată la un apel sau cererea de cumpărători putem răspunde că lichidul tapet, fibra de sticla si tapet acrilic disponibile în magazin nu sunt. Având în vedere faptul că gama de magazine este, de obicei, nu se limitează la o sută de tapet, vizualiza lista tipurilor de non-unice ar fi destul de muncă intensivă.

Folosind funcții distincte în cadrul agregatelor

Argumentul distinct SQL poate fi folosit cu oriceagregate. 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 - hârtie obișnuită șidouă straturi, vinil, țesătură și nețesute. Desigur, toată lumea a văzut o reclamă precum: "Numai noi avem mai mult de 20 de feluri de wallpapere diferite!", Ceea ce înseamnă că în acest magazin nu sunt câteva zecimi de roluri de tot, dar tapetul celor mai diverse tipuri moderne.

Interesant, într-o singură interogare, puteți specificamai multe funcții Count cu sau fără atributul distinct. Aceasta este singura situație în care distinct în Select nu 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 siguriunicitatea 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

Se pare că avem doar un tip de tapet de hârtie (convențional și două straturi), deși chiar și în masa noastră mică au două articole (rezultatul fără distincție):

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 argumentulToate. 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ă sql
Sperăm că acum înțelegeți cânddistinct (SQL) este utilizat. 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.

Citește mai mult: