Postgresql eliminare duplicat și cuvinte cheie distincte

Ștergeți duplicate și DISTINCT

Cuvântul cheie DISTINCT opțional exclude duplicatele din setul final. Dacă cuvântul cheie ON nu este prezent, înregistrările cu valori duplicate ale câmpurilor vizate sunt excluse din rezultatele interogării cu cuvântul cheie DISTINCT. Sunt verificate doar câmpurile incluse în lista de direcții SELECT.







Listing 4.31. DISTINCT cuvânt cheie

booktown = # SELECT DISTINCT autor_id

booktown- # FROM cărți;

booktown = # SELECT DISTINCT ON (autor_id)

booktown- # author_id. titlu

booktown- # FROM cărți;

16 | Femeile mici

115 | Inima Tell-Tale

1212 | PostgreSQL practice

1644 | Anatomia dinamică

1809 | Pisica din pălărie

2031 | Luna bună de noapte

4156 | Lumina strălucitoare

7805 | Programarea Python

7806 | Perl Cookbook

Franklin în întuneric

25041 | Velveteen Rabbit

În cea de-a doua interogare, se folosește o altă formă de DISTINCT cu o enumerare explicită a câmpurilor (sau a expresiilor) care sunt verificate pentru duplicate. În acest caz, interogarea returnează și 13 înregistrări, deoarece secțiunea ON indică faptul că duplicatele sunt verificate pentru valoarea câmpului autor_i d. Fără secțiunea ON, interogarea este corectă) și ar avea toate cele 15 înregistrări, deoarece în mod implicit PostgreSQL verifică o potrivire completă a tuturor câmpurilor.

În general, PostgreSQL selectează înregistrările excluse din setul final dacă există o secțiune ON, la discreția sa. Dacă interogarea împreună cu DISTINCT include clauza ORDER BY, puteți seta manual ordinea selectării câmpurilor astfel încât înregistrările necesare să fie la început. Sortarea înregistrărilor este considerată în subsecțiunea "Înregistrări de sortare".

În cazul în care, în loc de a elimina toate duplicate suficient pentru înregistrările de grup cu valori duplicate ale unui grup secțiune interogare de căutare, așa cum este descris în subsecțiunea „Gruparea de înregistrări.“

Clauza WHERE specifică condiția logică pe care trebuie să o îndeplinească înregistrările totale. În practică, comanda SELECT aproape întotdeauna conține cel puțin o secțiune clarificatoare a clauzei WHERE.

Să presupunem că doriți să obțineți o listă a tuturor cărților despre tehnologia calculatoarelor din baza de date a cărților de carte. În aceste cărți, domeniul subject_id este 4. În consecință, clauza WHERE include operatorul =, care verifică această condiție. Un exemplu este prezentat în Lista 4.32.







Listing 4.32. Secțiune simplă WHERE

booktown = # SELECT * FROM cărți

booktown- # WHERE subiect_id = 4;

id | titlu | autor_id | subject_id

41472 | Practic PostgreSQL 1212 | 4

41473 | Programarea Python | 7805 | 4

41477 | Învățarea PostgreSQ L | 7805 | 4

41478 | Perl Cookbook | 7806 | 4

Interogarea din lista 4.32 returnează numai acele înregistrări ale căror câmpuri subject_id se potrivesc cu constanta întregului 4. Setul rezultat conține doar 4 intrări pentru cărți despre computere, în loc de cele 15 intrări afișate în lista 4.23.

Clauza WHERE poate conține mai multe condiții care sunt asociate de operatorii logici (de exemplu, AND sau OR) și returnează o valoare logică. Să presupunem că sunteți interesat de toate intrările pentru cărți despre computere, care, pe lângă computere, sunt scrise de Mark Lutz. Interogarea este specificată prin combinarea celor două condiții folosind operatorul AND. O altă opțiune este posibilă - de exemplu, căutarea tuturor cărților dedicate tehnologiei informatice sau a artei; În acest caz, cele două condiții sunt combinate de operatorul logic OR. Listing 4.33 demonstrează atât cuvintele cheie AND, cât și OR.

Listing 4.33. Combinarea condițiilor în clauza WHERE

booktown = # SELECT title din cărți

booktown- # WHERE subject_id = 4

booktown- # AND author_id = 7805;

booktown = # SELECT title din cărți

booktown- # WHERE subject_id = 4

booktown- # AND author_id = 0;

În al doilea SELECT din listingul 4.33 este în continuare prima condiție (cărți pe teme de calculator), combinate cu a doua condiție: cărți de artă (câmp subject_id este 0). Ca urmare, volumul setului final este mărit la cinci înregistrări, fiecare dintre acestea satisfăcând cel puțin una dintre aceste condiții.

Numărul de condiții, combinate în cazul în care secțiunea nu este limitată, deși prezența a două sau mai multe condiții în mod obișnuit gruparea cu paranteze, care arată în mod clar relația logică dintre condiții. Listing 4.34 arată cum adăugarea simplă a parantezelor afectează ieșirea comenzii.

Listing 4.34. Condițiile de grupare folosind paranteze

booktown = # SELECT * FROM cărți

booktown- # WHERE autor_id = 1866

booktown- # AND subject_id = 15

booktown- # OR subject_id = 3;

id | titlu | autho_id | subject_id

4513 | Dune | 1866 | 15

1234 | The Rabbit Velveteen 25041 | 3

booktown = # SELECT * FROM cărți

booktown- # WHERE autor_id = 1866

booktown- # ȘI (subiect_id = 15

booktown- # OR subject_id = 3);

id | titlu | autor_id | subject_id

4513 | Dune | 1866 | 15

Acest exemplu demonstrează două încercări de preluare a datelor de la booktown înregistrările bazei de date a căror câmp author_id egal cu 1866. În plus, câmpul trebuie să fie egală subject_id fie 15 sau 3. După cum se vede din rezultatele primei echipe, în timp ce enumerând toate cele trei condiții, fără comandă paranteze este interpretată incorect. Adăugarea parantezelor duce la efectuarea calculelor în paranteze înainte de a verifica condițiile externe.







Articole similare

Trimiteți-le prietenilor: