Usein, kun noutaa SQL: täTietoja taulukoista, käyttäjä saa redundantin datan, joka koostuu ehdottoman samanlaisten toistuvien rivien läsnäolosta. Voit poistaa tämän tilanteen käyttämällä SQL-selkeää argumenttia Select-lauseessa. Tässä artikkelissa käsitellään esimerkkejä väitteen käytöstä sekä tilanteita, joissa on parempi kieltäytyä käyttämästä väitettä.
Ennen kuin alamme harkita tiettyjä esimerkkejä, luomme pariin tarvittavia taulukoita tietokantaan.
Kuvitellaan, että tietokanta tallentaatiedot taustakuvasta, esitetty kahdessa taulukossa. Tämä on Oboi-taulukko (taustakuva), jossa on kentät id (yksilöivä tunniste), tyyppi (taustakuvan tyyppi - paperi, vinyylilaji jne.), Väri (väri), rakenne (rakenne) ja hinta (hinta). Ja Ostatki-taulukko (jäännökset) kentillä id_oboi (linkki yksilölliseen tunnisteeseen Oboi-taulukossa) ja count (rullien määrä varastossa).
Täytä taulukot tiedoilla. Lisää taulukkoon 9 merkintää taustakuvilla:
tapetti | ||||
id | tyyppi | väri | struct | hinta |
1 | paperi | monivärinen | kohokuvioitu | 56,9 |
2 | Kaksikerroksinen paperi | beige | sileä | 114,8 |
3 | Vinyyli | Oranssi | kohokuvioitu | 504 |
4 | Kuitukangas | beige | kohokuvioitu | 1020,9 |
5 | Kaksikerroksinen paperi | beige | sileä | 150,6 |
6 | paperi | monivärinen | sileä | 95,4 |
7 | Vinyyli | Ruskea | sileä | 372 |
8 | Kuitukangas | Valkoinen | kohokuvioitu | 980,1 |
9 | Kudos | Vaaleanpunainen | sileä | 1166,5 |
Taulukossa on myös yhdeksän jäännösmerkintää:
Ostatki | |
id_oboi | Kreivi |
1 | 8 |
2 | 12 |
3 | 24 |
4 | 9 |
5 | 16 |
6 | 7 |
7 | 24 |
8 | 32 |
9 | 11 |
Aloitetaan kuvaamaan kuinka erottuvuutta käytetään SQL: ssä.
Erillinen tulisi sijoittaa heti sen jälkeenValitse avainsana kyselyissä. Sitä käytetään välittömästi kaikkiin Select-lausekkeessa määritettyihin sarakkeisiin, koska se sulkee ehdottomasti identtiset rivit lopullisesta kyselytuloksesta. Siksi riittää, että määrität "Valitse erillinen" kerran kirjoittaessasi SQL-kyselyä. Poikkeuksena on erillisten sisäisten aggregaattitoimintojen käyttö, jota tarkastelemme hieman myöhemmin.
On syytä muistaa, että useimmat DBMS: t eivät tunnista lomakkeen kyselyäsi:
VALITSE erillinen Ostatki.Count, erillinen Oboi. * Oboilta SISÄINEN LIITTYMINEN Ostatki ON Oboi.id = Ostatki.id_oboi |
Kyseinen argumentti on määritelty tässä useita kertoja tai se on määritelty kerran, mutta ennen toista, kolmatta tai muuta valittavaa saraketta. Saat virheilmoituksen syntaksissa olevasta epätarkkuudesta.
On selvää, että rakenteen pätevällä rakenteellataulukot ja niiden täyttö, yhden taulukon sisällä, suljetaan pois tilanteista, joissa esiintyy täysin samanlaisia rivejä. Siksi kyselyn "Valitse erillinen *" suorittaminen valinnalla yhdestä taulukosta on käytännössä epäkäytännöllistä.
Kuvittele tilanne, kun meidän on selvitettävä, minkä tyyppinen taustakuva meillä on, mukavuuden vuoksi lajittelemme heti tyypin mukaan:
Valitse Oboi.type Oboi-tilauksesta tyypin mukaan |
Ja saamme tuloksen:
tyyppi |
paperi |
paperi |
Kaksikerroksinen paperi |
Kaksikerroksinen paperi |
Vinyyli |
Vinyyli |
Kudos |
Kuitukangas |
Kuitukangas |
Kuten näette, taulukossa on päällekkäisiä rivejä. Jos lisäämme Valitse erillinen lauseke:
VALITSE erillinen Oboi-tyyppi Oboi-tilauksesta tyypin mukaan |
saamme tuloksen ilman toistoja:
tyyppi |
paperi |
Kaksikerroksinen paperi |
Vinyyli |
Kudos |
Kuitukangas |
Jos tiedot on syötetty oikeinPöydät, niin vastaamme heti puhelun tai asiakkaan pyynnöstä, että nestemäiset tapetit, lasitapetit ja akryylitapetit eivät ole saatavilla kaupassa. Ottaen huomioon, että valikoima myymälöissä ei yleensä rajoitu sadaan taustakuvaan, olisi melko työlästä etsiä luetteloa ei-ainutlaatuisista tyypeistä.
SQL-erillistä argumenttia voidaan käyttää minkä tahansa kanssaaggregaattitoiminto. Mutta Minille ja Maxille sillä ei ole vaikutusta, ja laskettaessa summaa tai keskiarvoa voit harvoin kuvitella tilanteen, jossa ei olisi tarpeen ottaa huomioon toistoja.
Oletetaan, että haluamme tietää, kuinka täynnä varastoamme on, ja lähetämme tätä varten pyynnön, joka laskee rullien kokonaismäärän varastossa:
SELECT summa (Ostatki.count) Ostatkilta |
Pyyntö palauttaa vastauksen 143. Jos muutamme seuraavaksi:
SELECT summa (erillinen Ostatki.count) Ostatkilta |
saamme vain 119, koska artikkelien 3 ja 7 alla olevia taustakuvia on varastossa samalla määrällä. Tämä vastaus ei kuitenkaan selvästikään ole oikea.
Useimmiten käytetään SQL-toiminnossa erillään Count-funktiosta. Joten voimme helposti selvittää, kuinka monta ainutlaatuista tapettityyppiä meillä on yleensä:
SELECT-määrä (erillinen Oboi.type) Oboilta |
Ja saat tuloksen 5 - paperi säännöllinen jakaksikerroksinen, vinyyli, kangas ja kuitukangas. Varmasti kaikki ovat nähneet mainoksen, kuten: "Vain meillä on yli 20 erilaista taustakuvaa!", Mikä tarkoittaa, että tässä myymälässä ei ole pari tusinaa rullaa kaikkea, vaan taustakuvia monenlaisista moderneista.
On mielenkiintoista, että yhdessä pyynnössä voit määrittääuseita laskutoimintoja, sekä erillisinä että ilman erillisiä. Toisin sanoen tämä on ainoa tilanne, jossa erillinen Select-valikossa voi näkyä useita kertoja.
SQL: n erillinen argumentti on hylättävä yhdessä kahdesta tapauksesta:
Oletetaan, että pomosi pyytää sinua luetteloimaan taustakuvat, joissa on vain kaksi saraketta - tyyppi ja väri. Tottumuksestasi käytät erillistä argumenttia:
VALITSE erillinen Oboi-tyyppi, Oboi-väri Oboilta TILAA Oboi.tyyppi |
Ja - menetät osan tiedoista:
tyyppi | väri |
paperi | monivärinen |
Kaksikerroksinen paperi | beige |
Vinyyli | Ruskea |
Vinyyli | Oranssi |
Kudos | Vaaleanpunainen |
Kuitukangas | beige |
Kuitukangas | Valkoinen |
Saattaa näyttää siltä, että meillä on vain yksi paperityyppityyppi (tavallinen ja kaksikerroksinen), vaikka itse asiassa jopa pienessä pöydässä on kumpikin kaksi artikkelia (tulos on ilman erillistä):
tyyppi | väri |
paperi | monivärinen |
paperi | monivärinen |
Kaksikerroksinen paperi | beige |
Kaksikerroksinen paperi | beige |
Vinyyli | Ruskea |
Vinyyli | Oranssi |
Kudos | Vaaleanpunainen |
Kuitukangas | Valkoinen |
Kuitukangas | beige |
Siksi, kuten kirjoitat mitä tahansa kyselyä, erillisellä argumentilla, sinun on oltava varovainen ja ratkaistava asia pätevästi sen sovelluksella tehtävän tehtävän mukaan.
Erillisen päinvastainen on argumenttiKaikki. Päällekkäiset viivat säilyvät, kun niitä käytetään. Mutta koska oletusarvoisesti DBMS: n mielestä kaikkien arvojen pitäisi näkyä, All-argumentti on pikemminkin määrittelijä kuin todellinen toiminnallinen argumentti.