SQL erillinen: kuvaus, esimerkit, ominaisuudet
Usein, kun käytetään SQL-näytteenottoainformaatiota taulukoista, käyttäjä saa ylimääräisiä tietoja, jotka koostuvat täysin samanlaisten päällekkäisten rivien läsnäolosta. Jos haluat jättää tämän tilanteen pois, käytä SQL-erillistä argumenttia Select-lausekkeessa. Tässä artikkelissa tarkastelemme esimerkkejä tämän argumentin käyttämisestä sekä tilanteista, joissa on parempi hylätä argumentti.
Ennen kuin käsittelemme tiettyjä esimerkkejä, luodaan muutamia tarpeellisia taulukoita tietokantaan.
Taulukoiden valmistelu
Kuvittele, että olemme tallentaneet tietokantaammetietoa taustakuvasta, joka esitetään kahdessa taulukossa. Tämä on Oboi-taulukko (taustakuva), jossa kentät id (ainutkertainen tunniste), tyyppi (tapetit - paperi, vinyyli jne.), Väri, rakenne ja hinta. Ja Ostatki-taulukko (jäänteet) id_oboi-kenttien kanssa (viittaus Oboi-taulukon yksilölliseen tunnisteeseen) ja laskea (rullojen määrä varastossa).
Täytä taulukot tiedot. Taulussa taulukko lisätä 9 merkinnät:
oboi | ||||
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 | Ei-kudotut fleecekäsineet | beige | kohokuvioitu | 1020,9 |
5 | Kaksikerroksinen paperi | beige | sileä | 150,6 |
6 | paperi | monivärinen | sileä | 95,4 |
7 | vinyyli | ruskea | sileä | 372 |
8 | Ei-kudotut fleecekäsineet | valkoinen | kohokuvioitu | 980,1 |
9 | kangas | pinkki | sileä | 1166,5 |
Jäljelle jäävässä taulukossa on myös yhdeksän kirjaa:
Ostatki | |
id_oboi | laskea |
1 | 8 |
2 | 12 |
3 | 24 |
4 | 9 |
5 | 16 |
6 | 7 |
7 | 24 |
8 | 32 |
9 | 11 |
Aloitetaan kuvaamalla, miten käyttää erillistä SQL: ää.
Aseta erillinen valinta-lausekkeeseen
Erilainen argumentti olisi asetettava välittömästi sen jälkeenValitse avainsana kyselyissä. Sitä sovelletaan välittömästi kaikkiin Select-lausekkeeseen määriteltyihin sarakkeisiin, koska se sulkee pois täysin samanlaiset rivit kyselyn tuloksesta. Täten riittää, että määritetään "valitse erillinen" kirjoitettaessa SQL-kyselyä. Ainoa poikkeus on erillisten yhdistettyjen toimintojen käyttö, jota harkitsemme hieman myöhemmin.
On muistettava, että useimmat DBMS-järjestelmät eivät tunnista pyyntösi näin:
SELECT erillinen Ostatki.Count, erillinen Oboi. * Oboista INNER JOIN Ostatki ON Oboi.id = Ostatki.id_oboi |
Tässä argumentti määritellään useita kertoja tai määritetään kerran, mutta ennen toisen, kolmannen tai muun valittavissa olevaa saraketta. Saat virheen viittaamalla syntaksin epätarkkuuksiin.
Käyttämällä erillisiä vakiokyselyissä
Ilmeisesti, hyvin jäsennellyllä rakenteellataulukot ja niiden täyttö, yhdessä taulukossa, tilanteet suljetaan pois, kun täysin samanlaisia merkkijonoja esiintyy. Siksi "Valitse erillinen" -kyselyn suorittaminen, jossa on valinta yhdestä taulukosta, on käytännöllisesti katsoen epäkäytännöllinen.
Kuvittele tilanne, jossa meidän on selvitettävä, minkä tyyppinen taustakuva meillä on, vain mukavuus, lajitella tyypin mukaan:
SELECT Oboi.type Oboista tilauksesta |
Ja saamme tuloksen:
tyyppi |
paperi |
paperi |
Kaksikerroksinen paperi |
Kaksikerroksinen paperi |
vinyyli |
vinyyli |
kangas |
Ei-kudotut fleecekäsineet |
Ei-kudotut fleecekäsineet |
Kuten näet, taulukossa on päällekkäisiä rivejä. Jos lisäämme Valitse erillinen lauseke:
SELECT erillinen Oboi.type Oboista tilauksesta |
sitten saamme tuloksen toistamatta:
tyyppi |
paperi |
Kaksikerroksinen paperi |
vinyyli |
kangas |
Ei-kudotut fleecekäsineet |
Näin ollen, jos tiedot syötettiin oikeintaulukko, niin heti puhelun tai ostajien pyynnöstä voimme vastata siihen, että nestemäinen taustakuva, taustakuva ja akryylimaalaus ei ole saatavilla kaupassa. Koska valikoima kaupoissa ei tavallisesti rajoitu sataan taustakuvaan, olisi aivan työvoimavaltaista skannata luettelo ei-ainutlaatuisista tyypeistä.
Käytä erillisiä kokonaistoiminnoissa
SQL-erillistä argumenttia voidaan käyttää minkä tahansa kanssakokonaistoiminto. Mutta Min ja Max sen soveltaminen ei ole vaikutusta, mutta kun lasketaan summa tai keskiarvo on harvoin tilanne, jossa kukaan ei olisi otettava huomioon toistoja.
Sanotaan, että haluamme tietää, kuinka paljon varastomme on täynnä, ja lähetämme tämän vuoksi pyynnön, joka laskee telojen kokonaismäärän varastossa:
SELECT summa (Ostatki.count) FROM Ostatki |
Kysely palauttaa vastauksen 143. Jos muutetaan:
SELECT summa (erillinen Ostatki.count) FROM Ostatki |
niin saamme vain 119, koska 3 ja 7 artiklan tapetit ovat varastossa samassa määrin. On kuitenkin selvää, että tämä vastaus on väärä.
Useimmiten käytetään SQL-laskutoimintoa. Joten ilman vaikeuksia voimme selvittää, kuinka monta ainutlaatuista taustakuvaa meillä on yleensä:
SELECT-määrä (erillinen Oboi-tyyppi) Oboista |
Ja saat tuloksen 5 - paperi tavalliseksi jakaksikerroksinen, vinyyli, kangas ja kuitukangas. Varmasti kaikki nähneet mainoksia kuten: "Vain meillä on yli 20 erilaista tapetti" jolla tarkoitetaan sitä, että tämä kauppa ei ole vain pari tusinaa sämpylöitä ja erilaisia tapetti modernin tyyppejä.
Mielenkiintoista, voit määrittää yhdessä kyselyssäuseita laskutoimintoja erillisellä attribuutilla tai ilman sitä. Toisin sanoen tämä on ainoa tapaus, jossa Select ei ole läsnä useammin kuin kerran.
Milloin hylätä argumentin käyttö
SQL-erillisen argumentin käyttö on hylättävä kahdella tavalla:
- Valitset taulukoista ja olet varmaarvojen ainutlaatuisuus kussakin. Tässä tapauksessa argumentin käyttö on epätodennäköistä, koska tämä on lisäkuorma palvelimelle tai asiakkaalle (riippuen DBMS-tyypistä).
- Pelkäät menettää tarvittavat tiedot. Selitämme.
Oletetaan, että pomo pyytää sinua näyttämään luettelon taustakuvasta, joka osoittaa vain kaksi saraketta - tyyppiä ja väriä. Tyypillisesti määrität argumentin erilainen:
SELECT erillinen Oboi.type, Oboi.color Oboista ORDER BY Oboi.type |
Ja - menettää joitain tietoja:
tyyppi | väri |
paperi | monivärinen |
Kaksikerroksinen paperi | beige |
vinyyli | ruskea |
vinyyli | oranssi |
kangas | pinkki |
Ei-kudotut fleecekäsineet | beige |
Ei-kudotut fleecekäsineet | valkoinen |
Näyttää siltä, että meillä on vain yksi paperityyppinen tapetti (perinteinen ja kaksikerroksinen), vaikka itse asiassa pienessä pöydässäkin meillä on kaksi artikkelia (tulos ilman erillistä):
tyyppi | väri |
paperi | monivärinen |
paperi | monivärinen |
Kaksikerroksinen paperi | beige |
Kaksikerroksinen paperi | beige |
vinyyli | ruskea |
vinyyli | oranssi |
kangas | pinkki |
Ei-kudotut fleecekäsineet | valkoinen |
Ei-kudotut fleecekäsineet | beige |
Siksi, kuten kirjoitettaessa mitä tahansa kyselyä, erillisellä argumentilla täytyy olla varovainen ja oikein ratkaista ongelma sen sovelluksesta riippuen käsillä olevasta tehtävästä.
Vaihtoehtoinen erillinen
Argumentin vastakohta on argumenttiKaikki. Kun käytät sitä, kaksoiskappaleet tallennetaan. Mutta koska DBMS olettaa, että kaikkien arvojen tulostaminen on välttämätöntä, Kaikki argumentti on tarkempi kuin todellinen funktionaalinen argumentti.