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;


 

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

11022. Беспроводные технологии 353.5 KB
  Беспроводные технологии Для передачи данных по воздуху используются радиосигналы. У любого сигнала есть 2 характеристики: Излучаемая мощность Частота От излучаемой мощности зависит дальность связи. Любые радиоизлучения вредны для здоровья и окружаю...
11023. Основные термины и понятия Сетей и Телекоммуникаций 40 KB
  Основные термины и понятия Сетей и Телекоммуникаций. Пакет данных frame. В большинстве сетей используется принцип разделяемой среды передачи передавать в каждый момент времени может только один узел. Таким образом если передавать файл монолитным блоко...
11024. Использование хабов и свитчей 74 KB
  Использование хабов и свитчей Хабыконцентраторы устройства физического уровня Свитч коммутатор устройство канального уровня. И те и другие используются для построения топологии Звезда в сетях на витой паре и оптоволокне. Хабы: Хаб не способен каклибо о...
11025. Сетевые топологии 90.5 KB
  Сетевые топологии Топология схема соединения узлов сети. Существуют 3 простейшие топологии на базе которых строится множество смешанных. В каждом сегменте сети в данный момент может существовать только одна топология. Общая шина все узлы подключаются
11026. Сетевые платы 25 KB
  Сетевые платы Сетевая плата устройство канального уровня. Каждая плата соединяет компьютер с отдельной сетью или с различными сегментами одной сети. По стандарту Ethernet в компьютер можно поставить до 4 сетевых плат включая встроенные. Сетевая плата может быть и дескрет
11027. Модели построения компьютерных сетей 90 KB
  Модели построения компьютерных сетей. Открытыми называются системы построенные из компонентов различных производителей по принципу конструктора. В таких системах стандартизируются правила взаимодействия блоков и соединения между ними. Конкретное устройство отд...
11028. Модемы. Примеры технологий в которых используются модемы 100 KB
  Модемы. Модем устройство канального уровня соединяющее компьютеры с линией связи которая изначально не предназначалась для передачи данных. Примеры технологий в которых используются модемы: Подключение через городские телефонные линии Dial Up По те...
11029. Функции отдельных уровней модели OSI 26.5 KB
  Функции отдельных уровней модели OSI. Программный уровень Прикладной отвечает за пользовательский интерфейс в виде графической оболочки или командной строки. Пример Сетевое окружения окна ввода паролей и.т.д. Представительский отвечает за пре...
11030. Методы доступа. Примеры методов доступа 28 KB
  Методы доступа В большинстве сетевых технологий используется метод разделяемой среды передачи при котором множество узлов сети по очереди используют одну и ту же линию связи. Передавать данные при этом необходимо по очереди иначе пакеты от разных узлов смешаются и