Pri práci s relačnými DBMS, v ktorých dátaAk sú používatelia uložení v tabuľkovej forme, často čelia úlohe výberu hodnôt, ktoré sú v určitom rozsahu zahrnuté (nie sú súčasťou). Jazyk SQL vám umožňuje určiť množinu, ktorá by (nemala) patriť k hodnote s rôznymi možnosťami - operátor In, operátor Like, kombinácia podmienok viac - menej a tiež operátor SQL medzi operátormi. Popis a príklady v tomto článku sa zameriavajú na druhú možnosť.
Doslovne je operátor medzi SQL preložený nasledovne -"Medzi". Jeho použitie vám umožňuje nastaviť obmedzenie „Od a do“ na konkrétne pole, a ak ďalšia hodnota spadne do rozsahu, potom predikát vezme hodnotu „True“ a hodnota bude spadať do konečného výberu.
Syntax operátora je veľmi jednoduchá:
Vyberte * Z tabuľky t1 Kde t1.n medzi 0 a 7 |
Ako vidíte, po kľúčovom slove medzi musíte zadať hodnotu dolného okraja rozsahu, potom AND a hodnotu horného okraja.
Uveďme si, s akými typmi údajov môže operátor SQL pracovať:
Toto medzi operátorom SQL má určité zvláštnosti. Poďme sa s nimi zoznámiť:
Pri práci s textom sa do výberu nezaradí hodnota hornej hranice rozsahu, ak nie je zadaná čo najpresnejšie. V nasledujúcich častiach sa budeme touto funkciou zaoberať podrobnejšie.
Pripravme si tabuľku s údajmi o manažéroch pracujúcich v organizácii. Tabuľka bude mať nasledujúcu štruktúru:
Názov poľa | Dátový typ | popis |
kód | Počítadlo | Jedinečný identifikátor zamestnanca |
priezvisko | Text | Priezvisko zamestnanca |
Krstné meno | Text | Meno zamestnanca |
stredné meno | Text | Patronymia zamestnanca |
Paul | Text | Pohlavie zamestnanca (M / Ž) |
Dátum prijatia | Dátum Čas | Dátum prijatia zamestnanca |
Počet_detí | Číselné | Počet detí, ktoré má zamestnanec |
Vyplňte tabuľku nasledujúcimi údajmi:
kód | priezvisko | Krstné meno | stredné meno | Paul | Dátum prijatia | Počet_detí |
1 | Alexandrova | Irina | Nikolajevna | F | 01.05.2014 | 1 |
2 | Borovoy | Andrei | Stepanovič | M | 21.09.2013 | 0 |
3 | Vinogradov | Sergei | Pavlovič | M | 15.06.1998 | 1 |
4 | Shumilin | Alexander | Borisovič | M | 25.12.2004 | 2 |
5 | Višňakov | Leonid | Aleksandrovič | M | 09.10.2007 | 0 |
6 | Tropnikov | Bazalka | Sergejevič | M | 12.01.2016 | 3 |
7 | Perly | Nikita | Vasilevič | M | 11.01.2017 | 1 |
8 | Avdeeva | Nika | Konštantinovna | F | 31.03.2001 | 2 |
9 | Jakovlev | Leonid | Nikolajevič | M | 16.02.2009 | 0 |
Poďme zostaviť dotaz sql medzi, ktorý nám pomôže vybrať všetkých zamestnancov s 2 alebo 3 deťmi:
VYBERTE manažérov. * OD manažérov WHERE Manažéri. Deti od 2 do 3 |
Výsledkom budú tri riadky s údajmi o zamestnancoch s menami Shumilin, Tropnikov a Avdeeva.
Teraz vyberieme zamestnancov prijatých k 1. januáru2005 do 31.12.2016. Treba poznamenať, že rôzne DBMS vám umožňujú zapisovať dátumy v podmienkach rôznymi spôsobmi. Vo väčšine prípadov je dátum jednoducho nútený previesť na deň-mesiac-rok (alebo čokoľvek, čo je vhodnejšie) a napísať ho v jednoduchých alebo dvojitých úvodzovkách. V MS Access je dátum ohraničený znakom „#“. Uveďme si na základe toho príklad:
SELECT Managers. *, Managers.Reception_Date OD manažérov WHERE Manažéri. Reception_Date Between # 1/1/2005 # A # 31/12/2016 # |
Výsledkom bude päť zamestnancov prijatých v určenom období vrátane.
Ďalej sa pozrime, ako medzi SQL pracuje s reťazcami.
Veľmi častá úloha, ktorú musíte vyriešiťpri práci s menami zamestnancov je potrebné vyberať len tých, ktorých mená začínajú na určité písmeno. Skúsme a splníme požiadavku a vyberieme zamestnancov, ktorých priezviská začínajú priezviskami od A po B:
VYBERTE manažérov. * OD manažérov WHERE Manažéri. Priezvisko medzi „A“ a „B“ OBJEDNAJTE DO 2 |
Výsledok je nasledovný:
kód | priezvisko | Krstné meno | stredné meno | Paul | Dátum prijatia | Počet_detí |
8 | Avdeeva | Nika | Konštantinovna | F | 31.03.2001 | 2 |
1 | Alexandrova | Irina | Nikolajevna | F | 01.05.2014 | 1 |
2 | Borovoy | Andrei | Stepanovič | M | 21.09.2013 | 0 |
Ako vidíte, dvaja zamestnanci s priezviskompísmeno B nebolo zaradené do zoznamu. aký je na to dôvod? Ide o to, ako presne operátor porovnáva reťazce nerovnakej dĺžky. Riadok "B" je kratší ako riadok "Vinogradov" a je vyplnený medzerami. Ale pri abecednom triedení sa medzery ukážu ako vedúce znaky a priezvisko nebude zahrnuté do výberu. Rôzne DBMS ponúkajú rôzne riešenia tohto problému, ale často je najjednoduchšie špecifikovať nasledujúce písmeno abecedy v rozsahu pre spoľahlivosť:
VYBERTE manažérov. * OD manažérov WHERE Manažéri. Priezvisko medzi „A“ a „D“ OBJEDNAJTE DO 2 |
Pri vykonaní tohto dotazu nás výsledok úplne uspokojí.
Takáto nuansa existuje iba pri práci so symbolickými údajmi, ale ukazuje, že pri práci aj s takými jednoduchými operátormi, ako je medzi, treba byť opatrný.