7603

Поєднані набори даних

Лекция

Информатика, кибернетика и программирование

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

Украинкский

2013-01-26

91 KB

1 чел.

PAGE  4

Об’єднані набори даних

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

SELECT [ALL | DISTINCT [ON (вираз [, ...])]] мета [AS альтернативне_імя] [, ...]

[INTO [ TEMPORARY | TEMP ] [ TABLE ] нова_таблиця ]

[FROM джерело [, | CROSS JOIN ...]]

[[NATURAL] тип_обєднання [ON умова_обєднання | USING (список_полів обєднання)]][, ...]

[WHERE умова відбору записів]

[GROUP BY критерій групування[, ...]]

[HAVING агрегатна умова [, ...]]

[{UNION | INTERSECT | EXCEPT} [ALL] підзапит]

[ORDER BY вираз [ASC | DESC | USING оператор] [, ...]]

[FOR UPDATE [OF таблиця [, ...]]]

[LIMIT {число | ALL} [{OFFSET |. } початок]]

        Тут:

        

  •  ALL – у вибірку включаються всі знайдені записи;
  •  DISTINCT [ON (вираз [, ...])]  – поле або вираз, значення якого повинні входити в підсумковий набір не більш одного разу. Ключове слово DISTINCT означає, що за наявності дублікатів у декількох записах до вибірки включиться тільки один запис. ALL означає, що у вибірку включаються всі записи незалежно від наявності дублікатів (використовується за замовчуванням). Ключове слово ON, наступне за словом DISTINCT, дозволяє задати один або декілька виразів;
  •  мета [AS альтернативне ім’я] [, ...] – в якості мети зазвичайно вказується ім’я поля джерела, хоча вона також може бути й константою, ідентифікатором, функцією або загальним виразом. Перелік мети розділяється комами. Скороченим позначенням усіх полів є зірочка (*), разом з нею в списку можуть бути присутні й інші цілі. Альтернативне ім’я використовується тут для посилань у секціях ORDER BY і GROUP BY. Однак, у секціях WHERE і HAVING повинні використовуватися справжні імена;
  •  FROM джерело [, ...] – джерело, з якого вибираються задані цілі, це імена таблиць або вкладеного запиту (підзапиту);
  •  CROSS JOIN – розділення перелічених джерел комами або словами CROSS JOIN;
  •  [NATURAL] тип_об’єднання [ON умова | USING (список полів)]. Джерела можуть групуватися залежно від типу об’єднання: [INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] | CROSS] JOIN. Ключове слово NATURAL означає, що об’єднання двох джерел проводиться за всіма однойменними полями. Його наявність виключає необхідність об’єднання за явно заданими умовами;
  •  умова_об’єднання аналогічна умові секції WHERE, вказується після ключового слова ON;
  •  WHERE умова – обмеження підсумкового набору заданим критерієм. Умова повинна повертати просте логічне значення (true або false), вона може складатися й з декількох внутрішніх умов, об’єднаних логічними операторами, такими, наприклад, як AND або OR;
  •  GROUP BY критерій [, ... ] –  групування записів за заданим критерієм, який може бути простим іменем поля або виразом;
  •  HAVING умова [, ... ]. Секція HAVING схожа на секцію WHERE, але умова перевіряється на рівні цілих груп, а не окремих записів;
  •  {UNION | INTERSECT | EXCEPT} [ALL] підзапит – виконання однієї з трьох операцій, в яких беруть участь два запити (основний і додатковий). Підсумкові дані повертаються у вигляді набору, з якого видаляються дублікати записів, якщо не було задано ключове слово ALL. Тут:
  •  UNION – злиття двох підсумкових наборів, які мають сумісну структуру, в один об’єднаний підсумковий набір,
  •  INTERSECT – з підсумкового набору виключаються всі записи, які не входять до підсумкового набіру наступного підзапиту (тобто результатом є перетин двох множин записів),
  •  EXCEPT – з підсумкового набору виключаються всі записи, які входять у підсумковий набір наступного підзапиту (тобто результатом є різниця двох множин записів). Підзапит являє собою повну команду SELECT. Якщо підзапит містить секції ORDER BY, FOR UPDATE і LIMIT, то він має бути обрамлений круглими дужками;
  •  ORDER BY вираз – сортування у полях, заданих виразом, за зростанням (ASC) або за спаданням (DESC). З ключовим словом USING може задаватися оператор, який визначає порядок сортування (наприклад, OR). Секція USING вказує оператор (наприклад >), який використовується в подальших порівняннях;
  •  FOR UPDATE [OF таблиця [, ... ]] – монопольне блокування типу ROW SHARE MODE записів зазначеної таблиці до завершення транзакції, якщо секція FROM містить декілька таблиць; 
  •  LIMIT {число | ALL} – обмеження максимального числа повернених записів або повернення всієї вибірки (ALL);
  •  OFFSET |. початок, тобто точка відліку записів. Наприклад, якщо в секції LIMIT встановлено обмеження в 100 записів, а в секції OFFSET стоїть число 50, то запит поверне записи з номерами від 50 до150 (якщо, звичайно, вони знайдуться). Ключове слово OFFSET може замінюватися комами після ключового слова LIMIT. Воно означає, що в підсумковому наборі ігнорується задана кількість записів.

 

        Зауважимо, що, крім вищеперелічених секцій, команда SELECT може мати й інші, такі, наприклад, як WINDOW і FETCH.

        З метою отримання більш наглядного запиту рекомендується явно перелічувати всі необхідні поля замість повної вибірки з символом *. Це особливо актуально при використанні секції JOIN, коли тих полів багато.  Тоді поля, включені в підсумковий набір, перераховуються після ключового слова SELECT. Запит повертає дані лише тих полів, які входять до цього списку. Порядок переліку полів не обовязково повинен збігатися з їх порядком у таблиці. Допускається як багаторазове входження, так і відсутність деяких полів у списку. Це показано в прикладі, де змінений порядок полів у вибірці, а дані поля naz_g виводяться двічі:

SELECT naz_g, kod_g, naz_g  FROM gazpr;

        Наведемо декілька прикладів запиту для видачі об’єднаних наборів даних.

  •  у нижченаведених 3 варіантах будуть видані назви газопроводів і відповідні їм кількості газу, де код підприємства дорівнює 2, тих записів, коди яких є в обох таблицях: gazpr та oblik (перетин множин). Результати будуть однакові. Варіант із секцією INNER JOIN вигідний тим, що дозволяє розділити умову об’єднання джерел від умови відбору записів. Варіанти 2, 3 вважаються застарілими:

  1.  SELECT gazpr.naz_g, oblik.kilk  AS kilkist, oblik.data FROM oblik INNER JOIN gazpr ON(oblik.kod_g  = gazpr.kod_g) WHERE oblik.kod_p=2;
    1.  SELECT gazpr.naz_g, oblik.kilk  AS kilkist, oblik.data FROM oblik CROSS JOIN gazpr WHERE gazpr.kod_g = oblik.kod_g AND oblik.kod_p=2;  
    2.  SELECT oblik.kod_g, gazpr.naz_g, kilk  AS kilkist, oblik.data FROM oblik, gazpr WHERE gazpr.kod_g = oblik.kod_g AND oblik.kod_p=2;

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

SELECT gazpr.naz_g AS nazva_g, count(oblik.kod_g) AS kil_day FROM oblik

RIGHT JOIN gazpr ON(oblik.kod_g = gazpr.kod_g)

WHERE extract(year from current_date) = extract(year from oblik.data)

GROUP BY gazpr.naz_g

ORDER BY gazpr.naz_g;

  •  виявити в таблиці oblik коди фантом-газопроводів, тобто відсутніх у таблиці gazpr, та кількість облікованого в них газу:

SELECT oblik.kod_g, sum(oblik.kilk) AS kilkist FROM oblik

FULL JOIN gazpr ON(oblik.kod_g = gazpr.kod_g)

WHERE gazpr.naz_g IS NULL

GROUP BY oblik.kod_g;

 

  •  видати підсумовану кількість транспортованого газу усіма газопроводами за весь період обліку. У вибірку внести назви лише тих газопроводів, які працювали:

SELECT gazpr.naz_g, sum(oblik.kilk)  AS kilkist FROM oblik

INNER JOIN gazpr ON(oblik.kod_g = gazpr.kod_g)

GROUP BY gazpr.naz_g;

  •  видати підсумовану кількість транспортованого газу усіма газопроводами за останні 5 років:

SELECT extract(year from oblik.data) AS rik, gazpr.naz_g, sum(oblik.kilk) AS kilkist FROM oblik

INNER JOIN gazpr ON(oblik.kod_g = gazpr.kod_g)

WHERE extract(year FROM current_date) - extract(year from oblik.data) <= 5

GROUP BY gazpr.naz_g, rik

ORDER BY rik ASC;

  •  видати підсумовану кількість транспортованого газу усіма газопроводами і підприємствами за поточний день поточного місяця поточного року:

SELECT oblik.kod_g, gazpr.naz_g, pidpr.naz_p, sum(oblik.kilk) AS kilkist FROM oblik

INNER JOIN gazpr ON(oblik.kod_g = gazpr.kod_g)

INNER JOIN pidpr ON(oblik.kod_p = pidpr.kod_p)

WHERE extract(day FROM current_date) = extract(day from oblik.data)

     AND extract(month FROM current_date) = extract(month from oblik.data)

     AND extract(year FROM current_date) = extract(year from oblik.data)

GROUP BY gazpr.naz_g, oblik.kod_g, pidpr.naz_p;

  •  обчислити преміальний фонд для персоналу тих 3-х газопроводів, які відтранспортували найбільшу кількість газу у поточному місяці поточного року. Преміальний фонд дорівнює сумарній кількості газу, помноженій на 1.6:

SELECT oblik.kod_g, gazpr.naz_g, sum(oblik.kilk)*1.6 AS premia FROM oblik

INNER JOIN gazpr ON(oblik.kod_g = gazpr.kod_g)

WHERE extract(month FROM current_date) = extract(month from oblik.data)

     AND extract(year FROM current_date) = extract(year from oblik.data)

GROUP BY gazpr.naz_g, oblik.kod_g

ORDER BY premia DESC

LIMIT 5;

  •  видати підсумовану кількість газу для всіх газопроводів за друге півріччя поточного року. Секцію CASE можна вважати аналогом вкладеної тренарної операції мовою C. Зауважимо, що секція WHERE не сприймає альтернативного імені pivrik, тому умову  відбору записів (секцію CASE) прийшлося дублювати:

SELECT gazpr.naz_g,

(CASE WHEN extract(month FROM oblik.data) < 7 THEN 1 ELSE 2 END) AS pivrik,

sum(oblik.kilk) AS kilkist

FROM oblik

INNER JOIN gazpr ON(oblik.kod_g = gazpr.kod_g)

WHERE ((CASE WHEN extract(month FROM oblik.data) < 7 THEN 1 ELSE 2 END) = 2

                                AND extract(year FROM current_date) = extract(year from oblik.data))          

GROUP BY gazpr.naz_g, pivrik

ORDER BY pivrik;

  •  видати підсумовану за кожні 20 років кількість транспортованого газу:

SELECT CASE WHEN extract(year FROM data) < 1990 THEN '1 група'

                          WHEN extract(year FROM data) > 1990

                             AND extract(year FROM data) < 2011 THEN '2 група'

               ELSE '3 група'

               END AS grupa, sum(kilk) AS kilkist FROM oblik

GROUP BY grupa

ORDER BY grupa;


 

А также другие работы, которые могут Вас заинтересовать

23327. Проектирование этикеток 76.5 KB
  Лабораторная работа №8: Проектирование этикеток По дисциплине: Базы данных. Цели работы: научиться быстро проектировать этикетки; освоить технику разработки этикеток вывода этикеток на экран в файл; составить этикетку по теме самостоятельного проектирования. Задание: Определите структуру этикетки: база данных для этикетки; название этикетки; порядок размещения полей в этикетке; порядок размещения этикеток на листе; размер этикеток.
23328. Локальные сети. Структура стандартов IEEE 802.x 158.5 KB
  Стандарты семейства IEEE 802.х охватывают только два нижних уровня семиуровневой модели OSI — физический и канальный. Это связано с тем, что именно эти уровни в наибольшей степени отражают специфику локальных сетей. Старшие же уровни, начиная с сетевого, в значительной степени имеют общие черты, как для локальных, так и для глобальных сетей.
23329. Макросы. Создание макросов 36.5 KB
  Отчет по работе: Открыть таблицу CtrlF1: USE{SPACEBAR}table1{SPACEBAR}AGAIN{SPACEBAR}IN{SPACEBAR}0{ENTER} SELECT{SPACEBAR}Table1{ENTER} BROWSE{SPACEBAR}LAST{ENTER} Удалить таблицу CtrlF2: Remove{SPACEBAR}Table{SPACEBAR}table1{ENTER} Установить отношение между таблицами CtrlR: SET{SPACEBAR}RELATION{SPACEBAR}TO{SPACEBAR}фамилия{SPACEBAR}INTO{SPACEBAR}Table2{SPACEBAR}ADDITIVE{ENTER} Модифицировать отчёт CtrlM: MODIFY{SPACEBAR}REPORT{SPACEBAR} c: artamonov базы данных visual foxpro9 save artlab10 report1.frx {SPACEBAR}NOENVIRONMENT{ENTER}...
23330. Генератор прикладных программ 91 KB
  Цель работы: научиться создавать стандартные приложения с помощью генератора FoxApp. Задание: Перед началом работы создать отдельный каталог для файлов приложения. Выполните генерацию стандартного приложения создавая или указывая базу данных на шаге 1. Проверьте работу стандартного приложения: стандартный экран форма ввода кнопки управления; меню стандартного приложения.
23331. Интегрированная cреда FoxPro for Windows 39 KB
  Задание на лабораторную работу: Создайте на диске Х: каталог под именем FOXPRO для хранения примеров. Войдите в среду FoxPro. Ознакомьтесь с интерфейсом FoxPro: изучите систему главного меню пункты Файл Правка База Запись Программа Запуск Текст Окно; изучите способы выбора пунктов меню с помощью мыши комбинаций клавиш; повторите правила работы с окнами: закрыть открыть свернуть развернуть распахнуть переместить изменить размеры переключиться между окнами; ознакомьтесь с командами пунктов меню Окно и ; повторите...
23332. Создание структуры базы данных в СУБД FoxPro 166 KB
  Задание на лабораторную работу: Создайте структуру базы данных в соответствии с вашей темой расчетнографического задания. Изучите возможности среды СУБД FoxPro for Windows для создания структуры базы данных. Выполните просмотр содержимого базы данных.
23333. Сортировка и индексирование баз данных 244 KB
  Задание на лабораторную работу: Выполните сортировку по одному полю базы данных содержащей не менее 15 записей. Повторите сортировку для полей содержащих разные типы данных. Просмотрите результат сортировки в новой базе данных.
23334. Установка отношений между базами данных 233.5 KB
  Задание на лабораторную работу: Проверьте проект базы данных на предмет проектирования связей ключи первичные вторичные. В проекте базы данных предметной области выделите 23 связанные таблицы родственные таблицы. Просмотрите связанные базы данных на экране.
23335. Поиск информации в базах данных. Установка фильтров 453.5 KB
  Задание на лабораторную работу: Составьте не менее 10 логических выражений для поиска данных в базе данных. Выполните поиск данных с помощью команды Locate. Выполните стандартный поиск в индексированной базе данных.