Кампутары, Праграмаванне
Between SQL: прыклады, апісанне
Пры працы з рэляцыйнымі СКБД, у якіх дадзеныя захоўваюцца ў таблічным выглядзе, карыстальнікі часта сутыкаюцца з задачай выбаркі значэнняў, якія ўваходзяць (не ўваходзяць) у пэўны дыяпазон. Мова SQL дазваляе задаць мноства, якому павінна (не павінна) належаць значэнне рознымі варыянтамі - аператарам In, аператарам Like, камбінацыяй умоў больш - менш, а таксама аператарам SQL Between. Апісанне і прыклады ў дадзеным артыкуле будуць прысвечаны апошняму варыянту.
Аператар «Паміж» у SQL: сінтаксіс, абмежаванні
Даслоўна аператар between SQL так і перакладаецца - «паміж». Яго выкарыстанне дазваляе задаць абмежаванне «Ад і Да» да пэўнага полі, і калі чарговае значэнне патрапіць у дыяпазон, то прэдыкатаў прыме значэнне «Ісціна», і значэнне патрапіць у выніковую выбарку.
Сінтаксіс ў аператара гранічна просты:
Select * From table t1 Where t1.n between 0 and 7 |
Як бачым, пасля ключавога слова between неабходна ўказаць значэнне ніжняй мяжы дыяпазону, затым AND і значэнне верхняй мяжы.
Пералічым, з якімі тыпамі дадзеных можа працаваць аператар between SQL:
- З лікамі - цэлымі і дробавымі.
- З датамі.
- З тэкстам.
У дадзенага аператара between SQL ёсць пэўныя асаблівасці. Пазнаёмімся з імі:
- Пры працы з лікамі і датамі значэння абмежаванняў «Ад і Да» ўключаюцца ў выбарку.
- Значэнне ніжняй мяжы дыяпазону павінна быць менш значэння верхняй мяжы, інакш не будзе выведзена нічога, бо ўмова лагічна не дакладна. Асабліва ўважлівым трэба быць, калі замест канкрэтных значэнняў у ўмова ўключаюцца зменныя.
Пры працы з тэкстам значэнне верхняй мяжы дыяпазону не будзе ўключана ў выбарку, калі яно не пазначана гранічна дакладна. У наступных раздзелах разгледзім дадзеную асаблівасць падрабязней.
Выбарка лікаў і дат у вызначаным дыяпазоне
Падрыхтуем табліцу з дадзенымі па менеджэрам, якія працуюць у арганізацыі. Табліца будзе мець наступную структуру:
Імя поля | тып дадзеных | апісанне |
код | лічыльнік | Унікальны ідэнтыфікатар супрацоўніка |
прозвішча | тэкставы | Прозвішча супрацоўніка |
Імя | тэкставы | Імя супрацоўніка |
імя па бацьку | тэкставы | імя па бацьку супрацоўніка |
падлогу | тэкставы | Пол супрацоўніка (М / Ж) |
Дата_приема | Дата / час | Дата прыёму супрацоўніка на працу |
Число_детей | лікавы | Колькасць дзяцей у супрацоўніка |
Запоўнім табліцу наступнымі дадзенымі:
код | прозвішча | Імя | імя па бацьку | падлогу | Дата_приема | Число_детей |
1 | Аляксандрава | Ірына | Мікалаеўна | Ж | 2014/05/01 | 1 |
2 | Баравой | Андрэй | Сцяпанавіч | М | 2013/09/21 | 0 |
3 | Вінаградаў | Сяргей | Паўлавіч | М | 1998/06/15 | 1 |
4 | Шумілін | Аляксандр | Барысавіч | М | 2004/12/25 | 2 |
5 | Вішнякоў | Леанід | Аляксандравіч | М | 09.10.2007 | 0 |
6 | Тропников | Васіль | Сяргеевіч | М | 2016/01/12 | 3 |
7 | жамчугоў | Мікіта | Васільевіч | М | 2017/01/11 | 1 |
8 | Аўдзеева | Ніка | Канстанцінаўна | Ж | 2001/03/31 | 2 |
9 | Якаўлеў | Леанід | Мікалаевіч | М | 16.02.2009 | 0 |
Складзем sql запыт between, які дапаможа нам выбраць ўсіх супрацоўнікаў, якія маюць 2 ці 3 дзіцяці:
SELECT Мэнэджары. * FROM Мэнэджары WHERE Менеджеры.Число_детей between 2 and 3 |
Вынікам стане тры радкі з дадзенымі па супрацоўнікам з прозвішчамі Шумілін, Тропников і Аўдзеева.
Цяпер абярэм супрацоўнікаў, прынятых з 1 студзеня 2005 года па 31 снежня 2016 года. Варта адзначыць, што розныя СКБД па-рознаму дазваляюць запісваць ва ўмовы даты. У большасці выпадкаў дату проста прымусова прыводзяць да выгляду дзень-месяц-год (ці як зручней) і запісваюць у адзінарныя або двайныя двукоссі. У СКБД MS Access дату складаюць у знак «#». Выканаем прыклад як раз на яе аснове:
SELECT Мэнэджары. *, Менеджеры.Дата_приема FROM Мэнэджары WHERE Мэнэджары. Дата_приема Between # 1/1/2005 # And # 31/12/2016 # |
Вынікам стануць пяць супрацоўнікаў, прынятых на працу ў названы перыяд уключна.
Далей паглядзім, як працуе between SQL з радкамі.
Праца ў between з радкамі
Вельмі частая задача, якую даводзіцца вырашаць пры працы з прозвішчамі супрацоўнікаў, - гэта неабходнасць выбраць толькі тых, чые прозвішчы пачынаюцца на пэўную літару. Паспрабуем і мы выканаць запыт і выбраць супрацоўнікаў, чые прозвішчы пачынаюцца на прозвішчы з А да В:
SELECT Мэнэджары. * FROM Мэнэджары WHERE Менеджеры.Фамилия between "А" and "В" ORDER BY 2 |
Вынік наступны:
код | прозвішча | Імя | імя па бацьку | падлогу | Дата_приема | Число_детей |
8 | Аўдзеева | Ніка | Канстанцінаўна | Ж | 2001/03/31 | 2 |
1 | Аляксандрава | Ірына | Мікалаеўна | Ж | 2014/05/01 | 1 |
2 | Баравой | Андрэй | Сцяпанавіч | М | 2013/09/21 | 0 |
Як бачым, двое супрацоўнікаў, якія маюць прозвішча на літару В, у спіс не патрапілі. З чым гэта звязана? Справа ў тым, якім менавіта чынам аператар параўноўвае радкі няроўнай даўжыні. Радок "В" карацей запісы з "Вінаградаў» і дапаўняецца прабеламі. Але пры сартаванні па алфавіце прабелы апынуцца апераджальнымі сімваламі, і прозвішча ў выбарку не патрапіць. Розныя СКБД па-рознаму прапануюць вырашаць дадзеную праблему, але часцяком прасцей за ўсё для надзейнасці ўказваць наступную літару алфавіту ў дыяпазоне:
SELECT Мэнэджары. * FROM Мэнэджары WHERE Менеджеры.Фамилия between "А" and "Г" ORDER BY 2 |
Пры выкананні дадзенага запыту вынік нас цалкам задаволіць.
Такі нюанс існуе толькі пры працы з сімвальнымі дадзенымі, аднак ён паказвае, што пры працы нават з такімі простымі аператарамі, як between, трэба быць пільнымі.
Similar articles
Trending Now