Теоретичний матеріал та презентація до Теми №5
3. Запити з умовами та об’єднаннями
Ефективний аналіз даних у реляційних СУБД базується на здатності прецизійно фільтрувати записи за певною сукупністю умов та комплексувати інформацію з декількох пов'язаних таблиць схеми бази геоданих [8; 14].
Запити до кількох таблиць
Усі розглянуті досі приклади мають суттєве обмеження: стовпці, що мають відображатися в результуючій таблиці, повинні походити з однієї таблиці. У багатьох випадках цього недостатньо. Щоб об’єднати стовпці з кількох таблиць у результуючу таблицю, необхідно використовувати операцію з’єднання (join). Операція з’єднання в SQL об’єднує інформацію з двох таблиць, утворюючи пари пов’язаних рядків із цих таблиць. До результуючої таблиці потрапляють ті пари рядків, у яких відповідні стовпці обох таблиць мають однакові значення.
Якщо потрібно отримати інформацію з більш ніж однієї таблиці, вибір стоїть між використанням підзапиту та операції з’єднання. Якщо результуюча таблиця повинна містити стовпці з різних таблиць, необхідно використовувати з’єднання. Для виконання з’єднання достатньо вказати кілька імен таблиць у реченні FROM, розділивши їх комами, і, як правило, додати речення WHERE для визначення стовпця (або стовпців), за якими здійснюється з’єднання. Також можна використовувати псевдонім (аліас) для таблиці, зазначеної в реченні FROM. У такому разі псевдонім відокремлюється від імені таблиці пробілом. Псевдонім можна використовувати для уточнення імені стовпця, якщо виникає неоднозначність щодо джерела цього стовпця. Його також можна використовувати як скорочене позначення імені таблиці. Якщо псевдонім визначено, його можна використовувати замість імені таблиці в будь-якому місці запиту.
Концептуально процедура формування результату оператора SELECT із використанням з’єднання виглядає так:
1) Утворюється декартів добуток таблиць, зазначених у реченні FROM.
2) Якщо присутнє речення WHERE, до кожного рядка отриманої таблиці застосовується умова пошуку; зберігаються лише ті рядки, що задовольняють цю умову. З погляду реляційної алгебри ця операція являє собою обмеження декартового добутку.
3) Для кожного з отриманих рядків визначаються значення всіх елементів зі списку SELECT, що формує один рядок результуючої таблиці.
4) Якщо вказано SELECT DISTINCT, із результуючої таблиці видаляються всі дубльовані рядки. У реляційній алгебрі кроки 3 і 4 еквівалентні операції проекції результату обмеження на стовпці, зазначені у списку SELECT.
5) Якщо присутній оператор ORDER BY, слід відсортувати результуючу таблицю відповідним чином.
Об'єднання результуючих таблиць (UNION, INTERSECT, EXCEPT)
У SQL для об'єднання результатів двох або більше запитів в одну результуючу таблицю можна використовувати стандартні теоретико-множинні операції: об'єднання (Union), перетин (Intersection) та різницю (Difference):
• Об'єднання (Union) двох таблиць, A та B, — це таблиця, що містить усі рядки, які є в першій таблиці A, у другій таблиці B або в обох таблицях.
• Перетин (Intersection) двох таблиць, A та B, — це таблиця, що містить усі рядки, спільні для обох таблиць A та B.
• Різниця (Difference) двох таблиць, A та B, — це таблиця, що містить усі рядки, які є в таблиці A, але відсутні в таблиці B.
Існують обмеження щодо таблиць, які можна об'єднувати за допомогою цих операцій; найважливіше з них полягає в тому, що таблиці повинні бути сумісними для об'єднання (union-compatible), тобто мати однакову структуру. Це означає, що таблиці повинні містити однакову кількість стовпців, а відповідні стовпці — мати однакові типи даних і розміри. Користувач самостійно відповідає за те, щоб значення даних у відповідних стовпцях належали до одного й того самого домену.
ПРИКЛАД
Вибірка ділянок із вмістом гумусу від 3.0 до 5.0% та високою кислотністю (pH < 5.5)
SELECT polygon_id, soil_type, humus_pct, ph_water
FROM soil_chemistry_samples
WHERE (humus_pct BETWEEN 3.0 AND 5.0)
AND ph_water < 5.5
AND land_use_type IN ('Рілля', 'Пасовище')
AND inspector_notes IS NOT NULL;
Шрифти
Розмір шрифта
Колір тексту
Колір тла
Кернінг шрифтів
Видимість картинок
Інтервал між літерами
Висота рядка
Виділити посилання
Вирівнювання тексту
Ширина абзацу