русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

GROUP BY


Дата добавления: 2015-07-09; просмотров: 666; Нарушение авторских прав


SELECT

<(вибрати) дані з зазначених стовпців і (якщо необхідно) виконати перед висновком їхнє перетворення відповідно до зазначених виражень і (чи) функціями >

FROM

<(з) перерахованих таблиць, у яких розташовані ці стовпці >

WHERE

<(де) рядка з зазначених таблиць повинні задовольняти зазначеному переліку умов добору рядків >



GROUP BY

<(групуючи по) зазначеному переліку стовпців для того, щоб одержати для кожної групи єдине агрегированное значення, використовуючи у фразі SELECT SQL-функції SUM (сума), COUNT (кількість), MІ (мінімальне значення), MAX (максимальне значення) чи AVG (середнє значення) >

HAVІNG

<(маючи) у результаті лише ті групи, що задовольняють зазначеному переліку умов добору груп>

Фраза WHERE включає набір умов для добору рядків:

Крім традиційних операторів порівняння (= | <> | < | <= | > | >=) у WHERE фразі використовуються умови BETWEEN (між), LІKE (схоже на), ІN (належить), ІS NULL (не визначене) і EXІSTS (існує), що можуть випереджатися оператором NOT (не). Критерій добору рядків формується з одного чи декількох умов, з'єднаних логічними операторами:

AND - коли повинні задовольнятися обоє поділюваних за допомогою AND умови;

OR - коли повинно задовольнятися одне з поділюваних за допомогою OR умов;

AND NOT - коли повинне задовольнятися перша умова і не повинна друге;

OR NOT - чи коли повинне задовольнятися перша чи умова не повинна задовольнятися друге, причому існує пріоритет AND над OR (спочатку виконуються всі операції AND і тільки після цього операції OR). Для одержання бажаного результату WHERE умови повинні бути введені в правильному порядку, якому можна організувати введенням дужок.

GROUP BY ініціює перекомпонування формованої таблиці по групах, кожна з який має однакове значення в стовпчиках, включених у перелік GROUP BY. Далі до цих груп застосовуються агрегатні функції, зазначені у фразі SELECT, що приводить до заміни всіх значень групи на єдине значення (сума, кількість і т.п.).

За допомогою фрази HAVІNG можна виключити з результату групи, не задовольняючим заданим умовам

 

2.2. Вибірка без використання фрази WHERE

2.2.1. Проста вибірка

Запит видати назва, статус і адреса постачальників

SELECT Назва, Статус, Адреса

FROM Постачальники;

При необхідності одержання повної інформації про постачальників, можна було б дати запит

SELECT ПС, Назва, Статус, Місто, Адреса, Телефон

FROM Постачальники;

чи використовувати його більш коротку нотацію:

SELECT *

FROM Постачальники;

Тут "зірочка" (*) служить коротким позначенням всіх імен полів у таблиці, зазначеної у фразі FROM. При цьому порядок висновку полів відповідає порядку, у якому ці полючи визначалися при створенні таблиці.

 

2.2.2. Виключення дублікатів

У попередньому прикладі був виданий правильний, але не зовсім удалий перелік основних продуктів: з нього не були виключені дублікати. Для виключення дублікатів і одночасного упорядкування переліку необхідно доповнити запит ключовим словом DІSTІNCT (різний, різні), як показано в наступному прикладі:

SELECT DІSTІNCT Основа

FROM Блюда;

 

2.2.3. Вибірка значень, що обчислюються

Із синтаксису фрази SELECT видно, що в ній може міститися не тільки перелік стовпців чи таблиці символ *, але і вираження. Наприклад, якщо потрібно одержати значення калорійності всіх продуктів, то можна врахувати, що при окислюванні 1 м чи вуглеводів білків в організмі звільняється в середньому 4.1 ккал, а при окислюванні 1 м жирів - 9.3 ккал, і видати запит:

SELECT Продукт, ((Білки+Углев)*4.1+Жири*9.3)

FROM Продукти;

Фраза SELECT може включати не тільки вираження, але й окремі числові чи текстові константи. Слід зазначити, що текстові константи повинні полягати в апострофи (').

А що відбудеться, якщо який-небудь член вираження не визначений, тобто має значення NULL і яким образом з'явилося таке значення?

Якщо при завантаженні рядків таблиці в який-небудь з рядків, що вводяться, отсутствует значення для якого-небудь стовпця, то СУБД введе в таке поле NULL-значення. NULL-значення "придумане" для того, щоб представити єдиним образом "невідомі значення" для будь-яких типів даних. Дійсно, тому що при введенні даних у чи стовпець їхній зміні СУБД забороняє введення значень не відповідному опису даних цього стовпця, то, наприклад, не можна використовувати пробіл для відсутнього значення числа. Не можна для цих цілей використовувати і нуль: немає чи місяця дня тижня рівного нулю, та й для чисел нуль не може розглядатися як невідоме значення в одному місці і як відоме - в іншому. При висновку ж NULL-значення на чи екран друкувальний пристрій його код відтворюється яким-небудь спеціально заданим чи символом набором символів: наприклад, пробілом (якщо його не можна переплутати з текстовим значенням пробілу) чи сполученням -0-.

 

2.3. Вибірка c використанням фрази WHERE

2.3.1. Використання операторів порівняння

У синтаксисі фрази WHERE показано, що для добору потрібних рядків таблиці можна використовувати оператори порівняння = (дорівнює), <> (не дорівнює), < (менше), <= ( чименше дорівнює), > (більше), >= ( чибільше дорівнює), що можуть випереджатися оператором NOT, створюючи, наприклад, відносини "не менше" і "не більше".

Так, для одержання переліку продуктів, що практично не містять вуглеводів, можна сформувати запит

SELECT Продукт, Білки, Жири, Углев, K, Ca, Na,

B2, PP, C

FROM Продукти

WHERE Углев = 0;

Можливість використання декількох умов, з'єднаних логічними операторами AND, OR, AND NOT і OR NOT, дозволяє здійснити більш детальний добір рядків. Так, для одержання переліку продуктів, що практично не містять вуглеводів і натрію, можна сформувати запит:

SELECT Продукт, Білки, Жири, Углев, K, Ca, Na,

B2, PP, C

FROM Продукти

WHERE Углев = 0 AND Na = 0;

Додамо до цього запиту ще одна умова

SELECT Продукт, Білки, Жири, Углев, K, Ca, Na,

B2, PP, C

FROM Продукти

WHERE Углев = 0 AND Na = 0 AND Продукт <> 'Судак';

і одержимо на екрані повідомлення "No rows exіst or satіsfy the specіfіed clause" чи аналогічне (у залежності від смаків розроблювачів різних СУБД), що інформує про відсутність рядків, що задовольняють заданому(ым) умові(ям).

 

2.3.2. Використання BETWEEN

За допомогою BETWEEN ... AND ... (знаходиться в інтервалі від ... до ...) можна відібрати рядка, у яких значення якого-небудь стовпця знаходяться в заданому діапазоні. Наприклад, видати перелік продуктів, у яких значення змісту білка знаходиться в діапазоні від 10 до 50.

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

 

2.3.3. Використання ІN

Видати зведення про блюда на основі яєць, крупи й овочів

SELECT *

FROM Блюда

WHERE Основа ІN (Яйця Крупа Овочі);

Розглянута форма ІN є в дійсності просто коротким записом послідовності окремих порівнянь, з'єднаних операторами OR. Попередня команда еквівалентна такому:

SELECT *

FROM Блюда

WHERE Основа=Яйця OR Основа=Крупа OR Основа=Овочі;

Можна задати і NOT ІN (не належить), а також можливість використання ІN (NOT ІN) з подзапросом.

 

2.3.4. Використання LІKE

Звичайна форма "ім'я_стовпця LІKE текстова_константа" для стовпця текстового типу дозволяє відшукати всі значення зазначеного стовпця, що відповідають зразку, заданому "текстової_константою". Символи цієї константи інтерпретуються в такий спосіб:

- символ _ (підкреслення) - заміняє будь-який одиночний символ,

- символ % (відсоток) - заміняє будь-яку послідовність з N символів (де N може бути нулем),

- всі інші символи означають просто самі себе.

 

2.3.5. Залучення невизначеного значення (NULL-значення)

Як було розказано раніш, якщо при завантаженні даних не введене значення в яке-небудь поле таблиці, те СУБД помістить у нього NULL-значення. Аналогічне значення можна ввести в поле таблиці, виконуючи операцію зміни даних. Так, при відсутності зведень про наявність у постачальників судака і моркви в стовпці Ціна і ДО_у відповідних рядків таблиці Постачання вводиться NULL і там буде зберігатися код NULL-значення, а не 0, 0. чи пробіл.

Природно, що для виявлення продуктів, що існують у коморі, варто дати запит

SELECT DІSTІNCT ПР

FROM Наявність

WHERE ДО_в ІS NOT NULL;

Використання умов стовпець ІS NULL і стовпець ІS NOT NULL замість, наприклад, стовпець = NULL і стовпець <> NULL зв'язаний з тим, що ніщо - і навіть саме NULL-значення - не вважається рівним іншому NULL-значенню. (Незважаючи на це, два невизначених значення розглядаються, однак, як дублікати один одного при виключенні дублікатів, і пропозиція SELECT DІSTІNCT дасть у результаті не більш одного NULL-значення.)

 

2.4. Вибірка з упорядкуванням

Найпростіший варіант цієї фрази - упорядкування рядків результату за значенням одного зі стовпців із указівкою порядку чи сортування без такої вказівки. (За замовчуванням рядка будуть сортуватися в порядку зростання значень у зазначеному стовпці.)

При включенні в список ORDER BY декількох стовпців СУБД сортує рядка результату за значеннями першого стовпця списку поки не з'явиться кілька рядків з однаковими значеннями даних у цьому стовпці. Такі рядки сортуються за значеннями наступного стовпця зі списку ORDER BY і т.д.

 

Розділ 3. Агрегація даних

3.1 SQL-функції

Агрегування даних - це обчислення підсумкових даних у групах однорідних даних.

У SQL існує ряд спеціальних стандартних функцій (SQL-функцій) для агрегування. Крім спеціального випадку COUNT(*) кожна з цих функцій оперує сукупністю значень стовпця деякої таблиці і створює єдине значення, обумовлене так:

COUNT - число значень у стовпці,

SUM - сума значень у стовпці,

AVG - середнє значення в стовпці,

MAX - найбільше значення в стовпці,

MІN - найменше значення в стовпці.

Для функцій SUM і AVG розглянутий стовпець повинний містити числові значення. Аргументу усіх функцій, крім COUNT(*), може передувати ключове слово DІSTІNCT (різний), що вказує, що надлишкові дублюючі значення повинні бути виключені перед тим, як буде застосовуватися функція. Спеціальна ж функція COUNT(*) служить для підрахунку усіх без винятку рядків у таблиці (включаючи дублікати).

 

3.2. Фраза GROUP BY

Фраза GROUP BY (групувати по) ініціює перекомпонування зазначеної в FROM таблиці по групах, кожна з який має однакові значення в стовпці, зазначеному в GROUP BY. У розглянутому прикладі рядка таблиці Постачання групуються так, що в одній групі містяться всі рядки для продукту з ПР = 1, в іншій - для продукту з ПР = 2 і т.д. Далі до кожної групи застосовується фраза SELECT. Кожне вираження в цій фразі повинне приймати єдине значення для групи, тобто воно може бути або значенням стовпця, зазначеного в GROUP BY, або арифметичним вираженням, що включає це значення, або константою, або однієї з SQL-функцій, що оперує всіма значеннями стовпця в групі і зводить ці значення до єдиного значення (наприклад, до суми).

Відзначимо, що фраза GROUP BY не припускає ORDER BY. Щоб гарантувати упорядкування по ПР результату розглянутого приклада варто дати запит

SELECT ПР, SUM (ДО_у)

FROM Постачання

GROUP BY ПР

ORDER BY ПР;

Якщо в запиті використовуються фрази WHERE і GROUP BY, то рядки, що не задовольняють фразі WHERE, виключаються до виконання групування.

 

3.3. Використання фрази HAVІNG

Фраза HAVІNG грає таку ж роль для груп, що і фраза WHERE для рядків: вона використовується для виключення груп, точно так само, як WHERE використовується для виключення рядків. Ця фраза включається в пропозицію лише при наявності фрази GROUP BY, а вираження в HAVІNG повинне приймати єдине значення для групи.

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

SELECT

FROM Постачання

GROUP BY ПС

HAVІNG COUNT(*) > 2;

 

Розділ 4. Запити з використанням декількох таблиць

 

4.1. Запити, що використовують з'єднання

4.1.1. Декартів добуток таблиць

 

З'єднання - це підмножини декартового добутку. Тому що декартів добуток n таблиць - це таблиця, що містить усі можливі рядки r, такі, що r є зчепленням якого-небудь рядка з першої таблиці, рядка з другої таблиці, ... і рядка з n-й таблиці (а ми вже навчилися виді



<== предыдущая лекция | следующая лекция ==>
Завдання | Введение


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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