Понеділок, 25.11.2024, 10:59
Головна Реєстрація RSS
Вітаю Вас, Гість
Меню сайту
Реклама
Категорії розділу
Архітектура ПК [1]
Архітектура та експлуатація персонального комп'ютера
СПЗ [12]
Системне програмне забезпечення та операційні системи
Комп'ютерна графіка [25]
КСМ [28]
Комп'ютерні системи та мережі
ІСІТО [1]
Інформаційні системи і технології обліку
Бухгалтерський облік [0]
АМтП [10]
Алгоритмічні мови та програмування
Копирайт рерайт [1]
СУБД [18]
Системи управління базами даних
ОКТ практикум [2]
Основи комп'ютерних технологій практикум
Інформатика (практ) [1]
інформатика практикум, практичні заняття
ТіОБВ [61]
Технологія і організація будівельного виробництва
ОСАПр [6]
Основи систем автоматизованого проектування, AutoCAD, ArchiCAD
ТіОБВ (заочники) [1]
Пошук
Статистика


Яндекс.Метрика
Онлайн всього: 1
Гостей: 1
Користувачів: 0
Форма входу
Календар
«  Вересень 2013  »
ПнВтСрЧтПтСбНд
      1
2345678
9101112131415
16171819202122
23242526272829
30
Головна » 2013 » Вересень » 5 » SQL урок 9 Підзапити
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, використавши повні назви стовпців (Табліця.Поле).

Категорія: СУБД | Переглядів: 1158 | Додав: Gryzley | Рейтинг: 0.0/0
Всього коментарів: 0
Ім`я *:
Email *:
Код *: