Архітектура ПК [1] |
СПЗ [12] |
Комп'ютерна графіка [25] |
КСМ [28] |
ІСІТО [1] |
Бухгалтерський облік [0] |
АМтП [10] |
Копирайт рерайт [1] |
СУБД [18] |
ОКТ практикум [2] |
Інформатика (практ) [1] |
ТіОБВ [61] |
ОСАПр [6] |
ТіОБВ (заочники) [1] |
15:53 SQL урок 9 Підзапити |
До цих пір ми отримували дані з бази даних за допомогою простих запитів і одного оператора SELECT. Однак, все ж, частіше нам потрібно буде вибирати дані, відповідні багатьом умовам, і тут не обійтися без розширених запитів. Для цього в SQL існують підзапити або вкладені вкладені запити, коли один оператор SELECT укладається в інший. 1. Фільтрація з допомогою підзапитівТаблиці баз даних, які використовуються в СУБД Access є реляційними таблицями, тобто усі таблиці можна зв'язати між собою за загальними полям. Допустимо у нас зберігаються дані в двох різних таблицях і нам потрібно вибрати дані в одній з них, залежно від того, які дані в іншій. Для цього створимо ще одну таблицю у нашій базі даних. Це буде, наприклад, таблиця Sellers з інформацією про постачальників: Тепер ми маємо дві таблиці - Sumproduct і Sellers, які мають однакове поле City. Припустимо, нам потрібно порахувати скільки товарів було продано тільки в Канаді. Зробити це нам допоможуть підзапити. Отже, спочатку напишемо запит для вибірки міст, які знаходяться в Канаді: SELECT City FROM Sellers WHERE Country = 'Canada' Тепер передамо ці дані в наступний запит, який буде вибирати дані з таблиці Sumproduct: SELECT SUM(Quantity) AS Qty_Canada FROM Sumproduct WHERE City IN ('Montreal','Toronto') Також ми можемо об'єднати ці два запити в один. Таким чином, один запит, який виводить дані буде головним, а другий запит, которий передає вхідні дані, буде допоміжним (підзапитом). Для вкладення підзапиту використовуємо конструкцію WHERE ... IN (...), про яку говорилося в розділі Розширене фільтрування: SELECT SUM(Quantity) AS Qty_Canada FROM Sumproduct WHERE City IN (SELECT City FROM Sellers WHERE Country = 'Canada') Бачимо, що ми отримали аналогічні дані, як і за допомогою двох окремих запитів. Таким же чином, ми можемо збільшувати глибину вкладеності запитів, вкладаючи підзапити скільки завгодно разів. 2. Використання підзапитів в якості розрахункових полівМи також можемо використовувати вкладені запити в якості розрахункових полів. Відобразимо, наприклад, кількість реалізованої продукції за кожним продавцеві за допомогою наступного запиту: SELECT Seller_name, (SELECT SUM(Quantity) FROM Sumproduct WHERE Sellers.City = Sumproduct.City) AS Qty FROM Sellers Перший оператор SELECT відображає два стовпці - Seller_name і Qty. Поле Qty є розрахунковим, воно формується в результаті виконання підзапиту, який взятий в круглі дужки. Цей подзапрос виконується по одному разу для кожного запису в полі Seller_name і в загальному буде виконаний чотири рази, оскільки вибрано імена чотирьох продавців. Також у підзапиті, конструкція WHERE виконує функцію об'єднання, оскільки за допомогою WHERE ми з'єднали дві таблиці по полю City, використавши повні назви стовпців (Табліця.Поле). |
|
Всього коментарів: 0 | |