Datori, Failu tipi
SQL atšķiras: apraksts, piemēri, īpašības
Bieži vien, kad jūs izmantojat SQL iegūt datus no tabulām, lietotājs saņem lieki dati ir esamība nosaka absolūti identiski dublikātu rindās. Lai izvairītos no šādas situācijas, izmantojiet SQL atsevišķu argumentu teikumā Select. Šis raksts apspriedīs piemērus, izmantojot šo argumentu, kā arī situācijas, kad pieteikums būtu pamestu ar argumentu.
Pirms mēs turpinām izskatīt konkrētus piemērus, izveidot datu bāzi nepieciešamo pāris tabulas.
preparāts tabula
Iedomājieties, ka mums ir datu bāze tiek glabāta informācija par fonu, kas sniegta divos tabulās. Šī tabula oboi (tapetes), ar ID laukiem (unikāls identifikators), no veida (veidu tapetes -. Papīrs, vinila, uc), krāsu (krāsa), kas struktūrai (struktūra) un cena (cena). Un galds Ostatki (atlikumi) ar id_oboi laukiem (atsauce uz unikālo identifikatoru tabulā Oboi) un skaits (skaits rullīšiem krājumā).
Aizpildiet datu tabulu. Tabulā pievienot tapeti 9 ieraksti:
Oboi | ||||
id | tips | krāsa | struct | cena |
1 | papīrs | daudzkrāsains | reljefi | 56,9 |
2 | papīrs double-slāņu | bēšs | gluds | 114.8 |
3 | vinyl | oranžs | reljefi | 504 |
4 | aitas vilna | bēšs | reljefi | 1020,9 |
5 | papīrs double-slāņu | bēšs | gluds | 150,6 |
6 | papīrs | daudzkrāsains | gluds | 95,4 |
7 | vinyl | brūns | gluds | 372 |
8 | aitas vilna | balts | reljefi | 980,1 |
9 | audums | sārts | gluds | 1166,5 |
Tabula ar paliekām - un deviņām ierakstiem:
Ostatki | |
id_oboi | skaitīt |
1 | 8 |
2 | 12 |
3 | 24 |
4 | 9 |
5 | 16 |
6 | 7 |
7 | 24 |
8 | 32 |
9 | 11 |
Mēs pārejam pie aprakstu atsevišķu rīkojuma SQL.
Vieta atšķirīga Select klauzulā
atšķirīgs arguments jānovieto tūlīt pēc Izvēlēties atslēgvārdu vaicājumiem. Viņš piemēro visām kolonnām norādītas teikuma Select, jo tas tiks izslēgts no gala vaicājuma rezultāts ir absolūti identiski stīgas. Tātad, kad ir pietiekami, lai norādītu, rakstot SQL «izvēlēties atšķirīgu» pieprasījumu. Izņēmums ir izmantot atšķirīgu iekšpusē apkopojuma funkcijas, kas izskatās pēc nedaudz vēlāk.
Būtu jāatceras, ka lielākā daļa no datubāzes un neatpazīst jūsu veida pieprasījumu:
SELECT atšķirīgu Ostatki.Count, atšķirīgu Oboi. * NO oboi INNER JOIN Ostatki ON Oboi.id = Ostatki.id_oboi |
Tur netika uzskatīts par argumentu vairākas reizes vai reizi norādīts, bet pirms otrā, trešā vai citu izvēlētajā kolonnā. Jūs saņemsiet kļūdu, atsaucoties uz kļūdu sintaksi.
Pieteikuma atšķirīgi vaicājumi standarts
Ir skaidrs, ka ar pareizu ēku struktūru galdiem un aizpildot tos vienā tabulā izslēgt situāciju, kad ir absolūti identiski stīgas. Tāpēc vaicājuma izpildes «Izvēlieties atšķirīgs *» ar paraugu vienā tabulā ir nepraktiska.
Aplūkosim situāciju, kad mums ir nepieciešams zināt, kāda veida mums ir tapetes, tikai ērtības, lai kārtotu pēc veida:
SELECT Oboi.type NO Oboi secībā pēc veida |
Un iegūt rezultātus:
tips |
papīrs |
papīrs |
papīrs double-slāņu |
papīrs double-slāņu |
vinyl |
vinyl |
audums |
aitas vilna |
aitas vilna |
Kā redzams tabulā ir dublēt rindas. Ja mēs pievienot priekšlikumu Atlasīt atšķirīgi:
SELECT atšķirīgu Oboi.type NO Oboi secībā pēc veida |
mēs iegūtu rezultātu bez atkārtošanās:
tips |
papīrs |
papīrs double-slāņu |
vinyl |
audums |
aitas vilna |
Tādējādi, ja pareizi ievadīt datus tabulā, tad uzreiz pēc tālruņa zvanu vai lūguma pircējiem, mēs varam atbildēt, ka šķidrums tapetes, stikla un akrila tapetes pieejami veikalā nav. Ņemot vērā, ka klāsts veikalu parasti neaprobežojas tikai ar vienu simts tapetes, skatīt sarakstu bez unikālu veidu, būtu diezgan darbietilpīga.
Piemērošana atsevišķu kopējo funkcijām
SQL atšķirīgs argumentu var lietot ar jebkuru kopējo funkciju. Bet Min un Max tās piemērošanu būs spēkā, bet, aprēķinot summu, vai vidējo vērtību, ir reti situācija, kad neviens būtu jāņem vērā atkārtojumus.
Pieņemsim, ka mēs vēlamies, lai pārbaudītu spējas mūsu noliktavā un nosūtīt šo lūgumu, aprēķina kopskaits ruļļu noliktavā:
SELECT summa (Ostatki.count) NO Ostatki |
Pieprasījums dos atbildi 143. Tomēr, ja mēs mainīsies uz:
SELECT summa (atšķirīgi Ostatki.count) NO Ostatki |
mēs iegūstot kopējo 119, kā fonu daļu numuriem 3 un 7 ir noliktavā tādā pašā apmērā. Tomēr ir skaidrs, ka atbilde ir nepareiza.
Visbiežāk izmanto SQL atšķirīgi funkciju skaits. Tātad, mēs varam viegli uzzināt, cik daudz unikālu veidu tapetes, mums ir:
SELECT skaits (atšķirīgs Oboi.type) NO oboi |
Un iegūt rezultātu 5 - parasto papīru un divslāņu vinila un neausta auduma. Protams visi redzējuši reklāmu, piemēram: "Tikai mums ir vairāk nekā 20 dažādu veidu tapetes", kas nozīmē, ka šis veikals ir ne tikai pāris ducis ruļļi un dažādi tapešu mūsdienu veidiem.
Tas ir interesanti, ka tajā pašā vaicājumu, jūs varat norādīt vairākas funkcijas, piemēram, Count atribūtu DISTINCT, un bez tā. Tas ir vienīgais situācija, kad atšķirīga Select'e var būt klāt vairākas reizes.
Kad atteikties izmantot argumentu
No izmantošana SQL atšķirīgu argumentu jāatsakās vienā no diviem gadījumiem:
- Jums veikt izvēli tabulu, un ir pārliecināti par unikālu vērtību katram. Šajā gadījumā, izmantojot argumentu ir nepiemērots, jo tas ir papildu slodze uz servera vai klienta (atkarībā no DBVS veida).
- Vai jums bail zaudēt savus datus. Ļaujiet mums paskaidrot.
Pieņemsim, ka boss lūdz jūs uzskaitīt tapetes, kas jums ir, ar norādi tikai divas kolonnas - veidu un krāsu. No ieradumu, jūs piešķirat arguments atšķirīgs:
SELECT atšķirīgu Oboi.type, Oboi.color NO oboi ORDER BY Oboi.type |
Un - zaudēt dažus datus:
tips | krāsa |
papīrs | daudzkrāsains |
papīrs double-slāņu | bēšs |
vinyl | brūns |
vinyl | oranžs |
audums | sārts |
aitas vilna | bēšs |
aitas vilna | balts |
Tas var radīt iespaidu, ka papīra tapetes (parasto un dual-layer) mums ir tikai viens prātā, patiesībā, pat mūsu mazajā tabulā divu rakstu (kā rezultātā bez atšķiras):
tips | krāsa |
papīrs | daudzkrāsains |
papīrs | daudzkrāsains |
papīrs double-slāņu | bēšs |
papīrs double-slāņu | bēšs |
vinyl | brūns |
vinyl | oranžs |
audums | sārts |
aitas vilna | balts |
aitas vilna | bēšs |
Tādēļ, kā rakstiski jebkuru pieprasījumu ar argumentu atšķirīgu nepieciešamību būt uzmanīgiem un ir kompetenta lemt par tās piemērošanu, atkarībā no uzdevuma.
alternatīva atšķiras
Pretēji atsevišķu - Visi argumentu. Savā pieteikumā dublikāti rindas tiek glabāti. Bet kā noklusējuma datu bāzē un uzskata, ka tas ir nepieciešams, lai parādītu visas vērtības, argumentu visi - tas ir drīzāk kvalifikācijas par faktisko funkciju argumentu.
Similar articles
Trending Now