Calculatoare, Tipuri de fișiere
SQL distincte: descriere, exemple, proprietăți
De multe ori, atunci când utilizați SQL pentru a prelua date din tabele, utilizatorul primește date redundante este existența unui duplicat rânduri absolut identice. Pentru a evita această situație, utilizați SQL argument distinct în propoziția Select. Acest articol va discuta exemple de utilizare a acestui argument, precum și situațiile în care cererea ar trebui să fie abandonate de argumentul.
Înainte de a continua să ia în considerare exemplele specifice, de a crea baza de date necesară o pereche de tabele.
masa de pregătire
Imaginați-vă că avem o bază de date stochează 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 tabelul de date. În tabelul de mai adăuga tapet 9 înregistrări:
oboi | ||||
id | tip | culoare | struct | preț |
1 | hârtie | multicolor | în relief | 56.9 |
2 | hârtie dublu stratificat | bej | neted | 114.8 |
3 | vinilin | portocaliu | în relief | 504 |
4 | lână | bej | în relief | 1020.9 |
5 | hârtie dublu stratificat | bej | neted | 150.6 |
6 | hârtie | multicolor | neted | 95.4 |
7 | vinilin | maro | neted | 372 |
8 | lână | alb | în relief | 980.1 |
9 | pânză | roz | neted | 1166.5 |
Tabelul cu rămâne - ș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 |
Vom proceda la descrierea ordinii distincte în SQL.
Loc distinct în Select clauza
Argumentul distinct trebuie plasat imediat după Select cuvântul cheie în interogări. El a aplicat toate coloanele specificate în propoziție Select, deoarece acesta va fi exclus din rezultatul interogării final este siruri de caractere absolut identice. Astfel, odată ce este suficient pentru a specifica atunci când scrieți SQL «selectați distinct» cerere. Excepția este utilizarea de diferite funcții agregate în interiorul care arata la un pic mai târziu.
Trebuie amintit faptul că cea mai mare parte a bazei de date și nu recunoaște tipul de cerere:
SELECT Ostatki.Count distincte, Oboi distincte. * DE LA oboi INTERIOARĂ TE Ostatki PE Oboi.id = Ostatki.id_oboi |
Acolo nu a fost considerat un argument de mai multe ori sau o dată specificată, dar înainte de a doua, a treia sau o altă coloană selectată. Veți primi o eroare referindu-se la o eroare de sintaxă.
Aplicație interogări distincte în standardul
Este evident că, cu mese adecvate structura cladirii si umplându-le într-un singur tabel exclusă situația în care există șiruri absolut identice. Prin urmare, executarea interogare «Select distincte *» cu o probă de un tabel este impracticabilă.
Luați în considerare o situație în care trebuie să știm ce tip avem tapet, doar pentru comoditate, pentru a sorta în funcție de tipul:
SELECT Oboi.type De la comanda Oboi în funcție de tipul |
Și obține rezultatele:
tip |
hârtie |
hârtie |
hârtie dublu stratificat |
hârtie dublu stratificat |
vinilin |
vinilin |
pânză |
lână |
lână |
După cum se vede în tabel sunt rânduri duplicate. Dacă adăugăm la propunerea Select distincte:
SELECT Oboi.type distincte De la comanda Oboi în funcție de tipul |
vom obține rezultatul fără repetiție:
tip |
hârtie |
hârtie dublu stratificat |
vinilin |
pânză |
lână |
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 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ă.
Aplicarea funcțiilor agregate distincte în cadrul
Argumentul distinct SQL poate fi utilizat cu orice funcție agregată. Dar pentru Min și Max aplicarea acesteia va avea nici un efect, dar atunci când se calculează suma sau valoarea medie este rareori o situație în care nimeni nu ar trebui să ia în considerare repetițiile.
Să presupunem că vrem să verifice capacitatea depozitul nostru și de a trimite această solicitare, calculează numărul total de bobine în stoc:
SELECT sum (Ostatki.count) DE LA Ostatki |
Cererea va da răspunsul 143. În cazul în care, cu toate acestea, vom schimba la:
sum SELECT (Ostatki.count distinct) DE LA Ostatki |
obținem total 119, ca imagine de fundal pentru numerele de partea 3 și 7 sunt în stoc în aceeași cantitate. Cu toate acestea, este evident că răspunsul este greșit.
Cel mai des folosit în SQL Count funcție distinctă. Deci, putem găsi cu ușurință cât de multe tipuri unice de tapet, avem:
SELECT COUNT (Oboi.type distincte) DE LA oboi |
Și a obține rezultatul 5 - hârtie obișnuită și vinil dublu strat și material nețesut. 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.
Este interesant faptul că, în aceeași interogare, puteți specifica mai multe funcții cum ar fi Contele atribut DISTINCT, și fără ea. Aceasta este singura situație în care în mod distinct Select'e poate fi prezent de mai multe ori.
Când să renunțe la utilizarea argumentului
Din utilizarea SQL argument distinct ar trebui să fie abandonată într-una din cele două cazuri:
- Efectuați o selecție de tabele și sunt încrezători în valoarea unică pe fiecare. În acest caz, utilizarea argumentul este inadecvat, deoarece este o sarcină suplimentară pe server sau client (în funcție de tipul de SGBD).
- Ți-e frică de a pierde datele. Să ne explicăm.
șeful vă cere să presupunem că lista de tapet pe care le aveți, cu indicarea numai două coloane - tipul și culoarea. Din obișnuință, vă dau un argument distinct:
SELECT Oboi.type distincte, Oboi.color DE LA oboi COMANDA PRIN Oboi.type |
Și - pierde anumite date:
tip | culoare |
hârtie | multicolor |
hârtie dublu stratificat | bej |
vinilin | maro |
vinilin | portocaliu |
pânză | roz |
lână | bej |
lână | 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 dublu stratificat | bej |
hârtie dublu stratificat | bej |
vinilin | maro |
vinilin | portocaliu |
pânză | roz |
lână | alb |
lână | bej |
Prin urmare, la fel ca în scris, orice solicitare cu necesitatea distinctă argument să fie atent și competent să decidă cu privire la aplicarea sa, în funcție de sarcina.
alternative distincte
Spre deosebire de argumentul distincte - toate argumentele. În cererea sa sunt stocate rânduri duplicate. Dar, ca baza de date implicită și constată că este necesar să se afișeze toate valorile, argumentul All - este mai degrabă un calificativ decât argumentul funcției actuale.
Similar articles
Trending Now