Kai dirbate su reliacine DBVS, kuriame duomenyssaugomi lentelių pavidalu, vartotojai dažnai susiduria su užduotimi pasirinkti vertes, kurios yra įtrauktos (neįtrauktos) į tam tikrą diapazoną. SQL kalba leidžia nurodyti rinkinį, kuris turėtų (neturėtų) priklausyti reikšmei su skirtingomis parinktimis - operatoriumi In, panašiu operatoriumi, sąlygų deriniu daugiau - mažiau, taip pat operatoriumi SQL Between. Šiame straipsnyje aprašyme ir pavyzdžiuose dėmesys bus sutelktas į pastarąją parinktį.
Paprasčiau tariant, tarp SQL teiginių yra išverstas -"Tarp". Jo naudojimas leidžia nustatyti apribojimą „Nuo ir iki“ tam tikram laukui, o jei kita reikšmė patenka į intervalą, predikatas ims reikšmę „Tiesa“, o vertė pateks į galutinį pasirinkimą.
Operatoriaus sintaksė yra labai paprasta:
Pasirinkite * Iš t1 lentelės Kur t1.n tarp 0 ir 7 |
Kaip matote, po raktinio žodžio turite nurodyti apatinės diapazono ribos vertę, tada AND ir viršutinės ribos vertę.
Išvardinkime, su kokiais duomenų tipais gali dirbti SQL operatorius:
Tai tarp SQL operatoriaus turi tam tikrų ypatumų. Pažinkime juos:
Dirbant su tekstu, diapazono viršutinės ribos vertė nebus įtraukta į pasirinkimą, jei ji nebus nurodyta kuo tiksliau. Tolesniuose skyriuose mes apsvarstysime šią funkciją išsamiau.
Paruoškime lentelę su duomenimis apie organizacijoje dirbančius vadovus. Lentelės struktūra bus tokia:
Lauko pavadinimas | Duomenų tipas | Aprašymas |
Kodas | Skaitliukas | Unikalus darbuotojo identifikatorius |
Pavardė | Tekstas | Darbuotojo pavardė |
Vardas | Tekstas | Darbuotojo vardas |
Antras vardas | Tekstas | Darbuotojo tėvavardis |
Paulius | Tekstas | Darbuotojo lytis (M / F) |
Čekio data | Data Laikas | Darbuotojo priėmimo į darbą data |
Skaičius_vaikai | Skaitmeninis | Darbuotojo vaikų skaičius |
Užpildykime lentelę šiais duomenimis:
Kodas | Pavardė | Vardas | Antras vardas | Paulius | Čekio data | Skaičius_vaikai |
1 | Aleksandrova | Irina | Nikolajevna | F | 01.05.2014 | 1 |
2 | Borovojus | Andrejus | Stepanovičius | M | 21.09.2013 | 0 |
3 | Vinogradovas | Sergejus | Pavlovičius | M | 15.06.1998 | 1 |
4 | Šumilinas | Aleksandras | Borisovičius | M | 25.12.2004 | 2 |
5 | Višnyakovas | Leonidas | Aleksandrovičius | M | 09.10.2007 | 0 |
6 | Tropnikovas | Bazilikas | Sergeevičius | M | 12.01.2016 | 3 |
7 | Perlai | Nikita | Vasilevičius | M | 11.01.2017 | 1 |
8 | Avdeeva | Nika | Konstantinovna | F | 31.03.2001 | 2 |
9 | Jakovlevas | Leonidas | Nikolajevičius | M | 16.02.2009 | 0 |
Sudarykime SQL užklausą, kuri padės mums pasirinkti visus darbuotojus su 2 ar 3 vaikais:
PASIRINKITE valdytojus. * IŠ vadovų WHERE Vadybininkai. Vaiko numeris nuo 2 iki 3 |
Rezultatas bus trys eilutės su duomenimis apie darbuotojus, kurių vardai yra Šumilinas, Tropnikovas ir Avdeeva.
Dabar atrinkime darbuotojus, priimtus dirbti sausio 1 d2005 m. - 2016 m. Gruodžio 31 d. Reikėtų pažymėti, kad skirtingos DBVS leidžia rašyti datas į sąlygas skirtingais būdais. Daugeliu atvejų data yra tiesiog priversta paversti dieną-mėnesį-metus (ar dar kas patogiau) ir rašyti viena arba dviem kabutėmis. „MS Access“ data įrašyta „#“ ženklu. Pateiksime pagal jį pateiktą pavyzdį:
PASIRINKITE valdytojus. *, Vadybininkus. Priėmimo data IŠ vadovų KUR vadovai. Reception_Date between # 1/1/2005 # and 2016/12/12 # |
Rezultatas bus penki darbuotojai, įdarbinti per nurodytą laikotarpį, imtinai.
Tada pažiūrėkime, kaip tarp SQL veikia eilutės.
Labai dažna užduotis, kurią turite išspręstidirbant su darbuotojų pavardėmis, reikia pasirinkti tik tuos, kurių pavardės prasideda konkrečia raide. Pabandykime ir mes įvykdysime užklausą ir atrinksime darbuotojus, kurių pavardės prasideda pavardėmis nuo A iki B:
PASIRINKITE valdytojus. * IŠ vadovų WHERE vadovai. Pavardė tarp „A“ ir „B“ UŽSAKYTI 2 |
Rezultatas yra toks:
Kodas | Pavardė | Vardas | Antras vardas | Paulius | Čekio data | Skaičius_vaikai |
8 | Avdeeva | Nika | Konstantinovna | F | 31.03.2001 | 2 |
1 | Aleksandrova | Irina | Nikolajevna | F | 01.05.2014 | 1 |
2 | Borovojus | Andrejus | Stepanovičius | M | 21.09.2013 | 0 |
Kaip matote, du darbuotojai su pavarderaidė B nebuvo įtraukta į sąrašą. Kokia tai priežastis? Esmė ta, kaip tiksliai operatorius lygina nevienodo ilgio eilutes. „B“ linija yra trumpesnė už „Vinogradov“ liniją ir yra paminkštinta tarpais. Bet rūšiuojant abėcėlės tvarka, tarpai pasirodys kaip pagrindiniai simboliai, o pavardė nebus įtraukta į pasirinkimą. Skirtingos DBVS siūlo skirtingus šios problemos sprendimus, tačiau patikimumui dažnai lengviausia nurodyti šią abėcėlės raidę:
PASIRINKITE valdytojus. * IŠ vadovų WHERE vadovai. Pavardė tarp „A“ ir „D“ UŽSAKYTI 2 |
Vykdant šią užklausą rezultatas mus visiškai patenkins.
Toks niuansas egzistuoja tik dirbant su simboliniais duomenimis, tačiau tai rodo, kad dirbant net su tokiais paprastais operatoriais kaip tarp jų, reikia būti atsargiems.