Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Інтервали




Інтервали значень в умові WHERE задаються логічною операцією BETWEEN, за допомогою якої можна задати, приміром, всі доставки, вартість яких потрапляє в інтервал від 1000 до 10 000.

Синтаксис операції BETWEEN:

BETWEEN <початкове значення> AND <кінцеве значення>

i Початкове й кінцеве значення включаються в інтервал.

За допомогою операції BETWEEN можна зчитувати записи, що відповідають часовим або строковим інтервалам. Вказівка ключового слова AND для поділу початкового й кінцевого значень обов’язково. Якщо, приміром, нам знадобиться список замовлень, розміщених з 1 по 15 липня 1996 р. включно, ми можемо скласти наступний запит:

SELECT КодЗаказа, ДатаРазмещения

FROM Заказы

WHERE ДатаРазмещения BETWEEN '7/1/1996' AND '7/15/1996'

Результат складе дев’ять рядків даних:

КодЗаказа ДатаРазмещения

----------- ------------------------------------------------------

10248 1996-07-04 00:00:00

10249 1996-07-05 00:00:00

10250 1996-07-08 00:00:00

10251 1996-07-08 00:00:00

10252 1996-07-09 00:00:00

10253 1996-07-10 00:00:00

10254 1996-07-11 00:00:00

10255 1996-07-12 00:00:00

10256 1996-07-15 00:00:00

 

(9 row(s) affected)

До речі, операцію BETWEEN можна віднести до звичайних логічних операцій, через які її можна виразити. Так, останній приклад можна було написати у вигляді:

SELECT КодЗаказа, ДатаРазмещения

FROM Заказы

WHERE ДатаРазмещения >= '7/1/1996' AND ДатаРазмещения <= '7/15/1996'

Це приклад різноманітності методів мови SQL, і далі ми побачити ще чимало таких прикладів.

3.4 Додавання логічних операцій в умову WHERE

В SQL визначено кілька логічних операцій, які можуть бути застосовані для логічних порівнянь. Для тих, хто ніколи не займався програмуванням, це може виявитися в диковинку.

Булева логіка – це система перевірки істинності або хибності множини тверджень при наявності певних відношень між цими твердженнями. Основні логічні операції булевих виразів: AND, OR й NOT. З погляду програмування булева логіка може здатися, на перший погляд, трохи плутаною, оскільки не завжди зрозуміло, як булеві операції повинні застосовуватися – зокрема, у якій внутрішній послідовності.

Ми обговоримо способи складання простих і наочних запитів.


SQL підтримує наступні логічні операції:

Операція Результат
ALL TRUE, якщо всі оператори повертають TRUE
AND TRUE, якщо всі вирази рівні TRUE; FALSE, якщо хоча б один вираз дорівнює FALSE
ANY TRUE, якщо хоча б один вираз дорівнює TRUE
EXISTS TRUE, якщо підзапит, що є операндом операції EXISTS, повертає які-небудь рядки
IN TRUE, якщо значення входить у зазначений список значень (ми розглянемо цю операцію далі)
LIKE TRUE, якщо трафарет збігається зі значенням; наприклад, LIKE Ін% означає будь-яке слово, що починається з Ін: Інна, Інеса, Інночка
NOT TRUE, якщо зворотна умова дорівнює TRUE; наприклад, якщо х = 1, то NOT х = 2 дорівнює TRUE
OR TRUE, якщо хоча б один з виразів дорівнює TRUE
SOME TRUE, якщо деякі з множини виразів рівні TRUE

Подивимося, як діють ці операції, на прикладі президента й прем’єр-міністра України, якими під час написання посібника були, відповідно, Віктор Ющенко і Віктор Єхануров:

Віктор Ющенко IS президент AND Юрій Єхануров IS прем’єр-міністр: TRUE

Юлія Тимошенко IS президент AND Юрій Єхануров IS прем’єр-міністр: FALSE

Юлія Тимошенко IS президент OR Юрій Єхануров IS прем’єр-міністр: TRUE

Юлія Тимошенко NOT президент AND Юрій Єхануров IS прем’єр-міністр: TRUE

Дуже важливий порядок виконання операцій. Припустимо, нам потрібно отримати список товарів категорій „М‘ясо/Птиця” і „Рибопродукти”, кількість якого на складі менше 10 одиниць виміру, чи то 10 штук по 200 г., чи це 5 кг упаковка. Для цього можна написати оператор наступного виду:

WHERE Категория = 'Мясо/Птица' OR Категория = 'Рыбопродукты'

AND НаСкладе < 10.00

Можливо, цей оператор написаний правильно, однак потрібно розібратися, який порядок виконання перевірки кожної з умов – іншими словами, пріоритети операцій. Пріоритети операцій мови SQL показані в наступному списку:

1. + (позитивне значення), – (негативне значення), ~ (побітове NOT) 2. * (множення), / (ділення), % (по модулю) 3. + (додавання), + (з’єднання рядків) - (віднімання) 4. =, >, <, >=, <=, <>,!=,!>,!< (операції порівняння) 5. ^ (побітове виключне OR), & (побітове AND), | (побітове OR) 6. NOT 7. AND 8. ALL, ANY, BETWEEN, IN, LIKE, OR, SOME 9. = (оператор присвоювання)

Дещо в списку може здатися дивним, але саме так це працює. Не завадить змахнути пил зі шкільного підручника алгебри! Розглянемо приклад:

(3 * 2 + 6 / 2) <= (4 / 2 + 6 * 1)

Тут найвищий пріоритет (пункт 2) – в операцій множення й розподілу:

(6 + 3) <= (2 + 6)


Далі (пункт 3) виконуємо додавання й вирахування:

9 <= 8

Нарешті, відповідно до пункту 4, виконуємо логічну операцію. Зовсім очевидно, що результат дорівнює FALSE, оскільки 9 більше 8. В SQL-операторі все відбувається точно так само. Застосовуємо, зліва направо, викладені вище умови й одержуємо пріоритет виразів в SQL-операторі.

Отже, ми бачимо, що операція AND виконується раніше операції OR, і тому треба, щоб в нашій умові WHERE ми вказали знайти всі товари кількістю на складі менше 10 одиниць виміру, що відносяться до категорії „М‘ясо/Птиця”, і всі товари, що відносяться до категорії „Рибопродукти”. Звичайно, ви можете просто зателефонувати на склад, але це додатковий клопіт й, знову ж, можливі помилки. Краще скористатися алгебраїчними правилами групування складових виразів (не мають нічого загального з функцією GROUPING, що ми будемо розглядати далі). Маємо на увазі виведення у дужки частини вирази, щоб вказати порядок їхнього виконання. Перепишемо умову WHERE у вигляді:

WHERE (Категория = 'Мясо/Птица' OR Категория = 'Рыбопродукты')

AND НаСкладе < 10.00

Умова в дужках оцінюється незалежно від іншої умови, тому обмеження кількості стосується обох категорій.

СПРОБУЙТЕ – Багаторазова фільтрація

Припустимо, нам знадобилося визначити всіх клієнтів, що розташовуються в штатах Вашингтон й Орегон.

1 Ми вже ставили оператор пошуку клієнтів з Вашингтона:

SELECT КодКлиента, Название, Область

FROM Клиенты

WHERE Область = 'WA'

2 До цього залишається додати критерій «клієнт із Орегона», задавши логічну операцію OR:

SELECT КодКлиента, Название, Область

FROM Клиенты

WHERE Область = 'WA' OR Область = 'OR';

3 Як бачимо, список вийшов правильним:

КодКлиента Название Область

---------- ---------------------------------------- ---------------

GREAL Great Lakes Food Market OR

HUNGC Hungry Coyote Import Store OR

LAZYK Lazy K Kountry Store WA

LONEP Lonesome Pine Restaurant OR

THEBI The Big Cheese OR

TRAIH Trail's Head Gourmet Provisioners WA

WHITC White Clover Markets WA

 

(7 row(s) affected)


Як це працює

Якщо застосувати кілька умов WHERE, SQL буде оцінювати критерії по кожному рядку. У нашому прикладі ми відшукували рядки, у полі Область яких було записано ‘WA’ або ‘OR’. Інші рядки не задовольняли критерію пошуку, тому в результат не включалися.

У фільтрі необов’язково вказувати ті самі поля. Фільтр може вписувати кілька критеріїв – наприклад, клієнти, що витратили 50 000 і більше російських рублів на один товар і отримали знижку більше 20 % за одне замовлення:

SELECT КодЗаказа, Цена * Количество AS [Сума товару],

Скидка

FROM Заказано

WHERE Цена * Количество >= 50000 AND Скидка > 0.20

У результаті одержимо набір записів, що відповідає умові:

КодЗаказа Сума товару Скидка

----------- --------------------- ------------------------

10263 69903.0000 0.25

10372 84320.0000 0.25

10912 74274.0000 0.25

10993 61895.0000 0.25

11030 74274.0000 0.25

11030 55000.0000 0.25

 

(6 row(s) affected)

Тут рядки, для яких значення поля Сума товару становить 50 000 і більше російських рублів і знижка вище 20 %.

Наші запити стануть набагато складніші, коли ми почнемо застосовувати групування умови WHERE і багаторазові умови в логічних виразах.

Згадаємо, що не можна використати виражень виду <поле> = NULL – для порівняння зі значенням NULL застосовується ключове слово IS. Критерій <поле> = NULL не дозволить включити в результат ні один запис, оскільки NULL не можна дорівнювати до жодного значенню – навіть іншому значенню NULL.

Далі перераховані деякі помилки, що виникають при виконанні розглянутих операторів.

Розповсюджені помилки:

Помилка Повідомлення або причина
Неправильний результат Перевірте логічні умови WHERE. Оператор міг бути невірно інтерпретований через неправильне групування або помилку в логічних виразах
Використання знака рівності при пошуку значень NULL В операціях зі значенням NULL використовуйте ключове слово IS
Неправильні роздільники Дати й рядки в SQL Server потрібно вписувати в одинарні лапки

3.5 Операція LIKE

Дотепер ми ставили критерії пошуку на основі точної відповідності. Однак існує чимало ситуацій, коли пошук доводиться виконувати по частині строкового значення. Наприклад, нам може знадобиться список людей, прізвища яких починаються з букви «Я», або книг, у назві яких є присутнім слово «комп’ютер». Саме для запитів такого роду призначена операція LIKE.

Операція LIKE може виконуватися тільки над полями, у яких записані дані одного зі строкових типів. Операція LIKE незастосовна до дат і чисельних значень.

Операція LIKE застосовується в умові WHERE для пошуку неточної відповідності рядків у таблиці:

WHERE [поле] LIKE [вираз]

«Поле» означає будь-яке поле таблиці, «вираз» – рядок і вид пошуку. Вид пошуку звичайно вказується знаком відсотків (%) або зірочкою (*) – в Access.

Це символ-замінник, використовуваний в операції LIKE. Наприклад, щоб знайти список людей, імена яких починаються з букви «Я», можна використати наступну умову:

WHERE Фамилия LIKE ‘Я%’

У результаті буде отримано список імен, що починаються з букви «Я». Символ-замінник можна вказувати також і на початку пошукового рядка. Наприклад, якщо потрібно знайти адресу співробітника, який би проживав в 15 квартирі:

WHERE Адрес LIKE '%15'

Наприклад, якщо потрібно знайти адресу співробітника, який би проживав на бульварі, можна скористатися наступною умовою:

WHERE Адрес LIKE '%бульв.%'

Операція LIKE буде корисна при складанні складних SQL-операторів, оскільки вона дозволяє задавати неповний збіг без складних маніпуляцій з рядками. Потрібно пам’ятати, що це не найшвидша операція в SQL, і тому вона негативно позначається на загальній швидкості обчислень. Якщо рядок, який треба знайти, відомий точно, потрібно задавати умову рівності. Якщо поле індексоване, швидкість пошуку по ньому значно вище.

Крім знака відсотків (%), в операції LIKE використовуються ще два символи-замінники:

P Символ підкреслення (_).

P Квадратні дужки ([ ]).

Якщо символ (%) позначає будь-яке число символів на початку й (або) кінці рядка, то символ підкреслення позначає рівно один текстовий символ. Якщо рядок ‘%ова’ співпадає з прізвищами Воронова й Крылова, то ‘____ова’ співпаде тільки з Крылова – саме тому, що символ підкреслення заміняє рівно чотири текстових символи.

Можна ускладнювати умови пошуку, задаючи сполучення символів підстановки. Наприклад, для пошуку прізвищ, що починаються подібно прізвищу Кралев і мають довільну довжину, можна використати наступну умову:

WHERE Фамилия LIKE '_р%'

У результаті, серед перерахованих прізвищ можуть бути, приміром, Кралев й Крылова.

Квадратні дужки ([ ]) застосовуються для звуження інтервалу текстових символів. У дужках указуються символи, які можуть перебувати в певній позиції. Наприклад, для збігу зі словом Анна та Инна можна скористатися критерієм

WHERE Имя LIKE '_нна'

Та можна це зробити, звузивши діапазон, указавши в першій позиції рядка букви А та И. Установимо їх саме в цьому місці, записаними у квадратні дужки:

WHERE Имя LIKE '[АИ]нна'

По цій умові будуть знайдені всі слова, що починаються з А або И і що кінчаються ‘нна’. Потрібно пам‘ятати, що в дужки записують тільки окремі букви, і даний синтаксис не застосуємо для рядків. Це найбільший недолік даного елемента, що не применшує, втім, інших його достоїнств.

СПРОБУЙТЕ – Застосування операції LIKE

Припустимо, нам треба скласти список товарів, найменування яких починаються з ‘Chef’.

1 Почнемо з найпростішого оператора SELECT, що повертає всі записи таблиці Товары:

SELECT КодТовара, Марка

FROM Товары

2 Додамо до цього фільтр, що залишає в списку тільки товари, що починаються з ‘Chef’:

SELECT КодТовара, Марка

FROM Товары

WHERE Марка LIKE 'Chef%'

3 Одержимо потрібну інформацію:

КодТовара Марка

----------- ----------------------------------------

67 Chef Anton's Cajun Seasoning

68 Chef Anton's Gumbo Mix

 

(2 row(s) affected)

У цьому запиті символ % використається в операції LIKE для перевірки перших чотирьох букв у найменуванні кожного товару. Результат виконання запиту містить два записи.

Як це працює

Знак відсотків – це символ підстановки, що заміняє будь-яке число текстових символів. Якби нам потрібен був список товарів, найменування яких містять послідовність букв ‘Chef, пошуковий рядок повинна була б мати вигляд ‘%Chef %‘; якби тільки тих товарів, найменування яких кінчаються цією послідовністю, потрібно було б використати рядок ‘%Chef’.

Як і у всіх наших прикладах, запит виконується послідовно по рядках. Він неефективний на більших таблицях, через велику тривалість операції порівняння рядків. У випадку таблиці великого обсягу потрібно пошукати спосіб попередньої фільтрації, щоб зменшити число записів, на яких буде виконуватися пошук.

4 Сортування записів

На даний момент ми навчилися зчитувати записи з таблиць і фільтрувати їх при зчитуванні. У цьому розділі ми розглянемо ще одне ключове слово, яке застосовується для сортування записів, що повертаються запитом – ORDER BY. Як ми переконаємось, це дуже гнучкий засіб сортування.

В SQL-операторі умова ORDER BY вказується, як правило, у самому кінці. Синтаксис цієї умови особливий, тому що воно, подібно операторові SELECT, може діяти на декількох таблицях. Крім цього, сортування по полях може виконуватися як зверху вниз, так і знизу нагору:

ORDER BY [поле1] [ASC/DESC], [поле2] [ASC/DESC],..., [полеn] [ASC/DESC]

Необов’язковий параметр ASC/DESC у кожного поля вказує напрямок сортування по відповідному стовпці: зверху-вниз, зі зниженням (ASC) або знизу-нагору, зі зростанням (DESC). Якщо цей параметр не зазначений, сортування виконується, за замовчуванням, зверху вниз. Упорядкування відбудеться так, як зазначено в умові ORDER BY, навіть якщо в списку оператора SELECT зазначений інший порядок. Значення NULL при сортуванні розглядаються як найменші. Запит без умови ORDER BY виводить записи в тому порядку, у якому вони розташовуються в таблиці.

СПРОБУЙТЕ – Упорядкування записів

Відсортуємо таблицю Сотрудники спочатку по прізвищах співробітників.

1 Потрібно витягти з таблиці Сотрудники стовпці КодСотрудника, Фамилия й Имя. Для цього годиться наступний запит:

SELECT КодСотрудника, Фамилия, Имя

FROM Сотрудники

2 Однак результат у цьому випадку буде несортованим:

КодСотрудника Фамилия Имя

------------- -------------------- ----------

1 Белова Мария

2 Новиков Павел

3 Бабкина Ольга

4 Воронова Дарья

5 Кротов Андрей

6 Акбаев Иван

7 Кралев Петр

8 Крылова Анна

9 Ясенева Инна

 

(9 row(s) affected)

i Чесно кажучи, стовпець КодСотрудника нам не потрібний, однак завжди потрібно виводити стовпець, що містить унікальні ідентифікатори записів, оскільки це забезпечує додаткові можливості маніпуляції результатом. Наприклад, по ідентифікатору легше визначити, коли та або інша людина була прийнята на роботу, чим по імені й прізвищу, які іноді можуть збігатися. Цей унікальний ідентифікатор іменується первинним ключем, і далі ми ще будемо обговорювати важливість наявності його в результаті. Поки ж тільки зауважимо, що наявність первинного ключа в результаті – ознака добре складеного SQL-onepaтopa.

3 Тепер додамо в оператор умова сортування ORDER BY:

SELECT КодСотрудника, Фамилия, Имя

FROM Сотрудники

ORDER BY Фамилия


4 Маємо результат, відсортований належним чином:

КодСотрудника Фамилия Имя

------------- -------------------- ----------

6 Акбаев Иван

3 Бабкина Ольга

1 Белова Мария

4 Воронова Дарья

7 Кралев Петр

5 Кротов Андрей

8 Крылова Анна

2 Новиков Павел

9 Ясенева Инна

 

(9 row(s) affected)

Як це працює

Умова ORDER BY обробляється після складання результату, пере упорядковуючи його знизу нагору або зверху вниз. Результат може бути відсортований декількома способами, кожний з яких повинен бути зазначений в умові ORDER BY через кому.


Висновки

У цій темі ми навчилися ставити оператори отримання даних з окремих таблиць. Ми почали з найпростіших операторів SELECT, потім розглянули перейменування полів у результаті для більше виразного подання даних. Далі, ми навчилися фільтрувати інформацію за допомогою умови WHERE, у сполученні з деякими умовами й логічними операціями, потім освоїли багаторазове застосування фільтрів і виділення потрібних даних за допомогою умови WHERE. Ми розглянули порядок обробки SQL-операторів, що дозволило нам програмувати їх точніше й ефективніше. Після цього ми визначили значення NULL і розглянули приклади його застосування. Нарешті, ми освоїли логічну операцію LIKE, що забезпечила нам ряд додаткових можливостей у програмуванні SQL-операторів, і функцію ORDER BY, яку застосовують для впорядкування даних.

У наступній темі ми розглянемо додаткові методи роботи з окремими таблицями за допомогою операторів SELECT, у наступних темах займемося більше складними питаннями, які доповнять матеріал, викладений тут, і який потрібно ґрунтовно засвоїти, щоб не загубитися у світі SQL. Однак саме матеріал цієї теми складе основу програмування SQL-операторів.

Один із кращих способів вивчення SQL на ранньому етапі – розгляд прикладів і практичних програм. Щодо цього багато цікавого можна знайти в базі даних Борей. Зверніть увагу на структурування й упорядкування SQL-операторів. Копіюйте все це в аналізатор запитів і випробуйте по черзі. Іноді буває потрібно придивитися до чужої роботи, оскільки це допомагає не тільки засвоїти основи, але також отримати уявлення про розмаїтість підходів до рішення тих або інших завдань. Як й інші мови програмування, SQL допускає різні підходи в рішенні тих самих завдань, і знайомство з ними може виявитися небезкорисним.

Розглянутий дотепер матеріал послужить основою для подальшої роботи. По ходу посібника ми переконаємося, наскільки гнучким і потужним засобом є оператор SELECT, який є основою SQL-програмування. Значна частина SQL-операторів – це саме оператори SELECT.

Складні оператори потрібно ставити в кілька прийомів. Не слід намагатися робити все одним махом. Склавши частину запиту, протестуйте її, потім додавайте наступну частину. Такий підхід не просто знижує час налагодження, але він й сприяє засвоєнню основ SQL.

У наступній темі ми продовжимо вивчати способи застосування SQL-операторів. Поступово ми почнемо з’єднувати розрізнені знання в одне ціле, і до кінця посібника опануємо предметом досконально. Та наразі, однак, основи.


Література

 




Поделиться с друзьями:


Дата добавления: 2014-12-07; Просмотров: 387; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.081 сек.