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;


 

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

71825. Ортогональные латинские квадраты 294 KB
  Найти все множества взаимно ортогональных латинских квадратов порядка n если при наложении одного из них на другой каждая из n возможных пар элементов встречается ровно один раз. Пример латинского квадрата 3го порядка: Точная формула для числа Ln латинских квадратов nго порядка неизвестна.
71826. Исследование Рекуррентного соотношения ряда Фибоначчи 393 KB
  Условие задачи Показать что любое натуральное число N можно представить в виде суммы чисел Фибоначчи причем каждое число входит в сумму не более одного раза и никакие два соседние числа не входят вместе. Ее называют последовательностью Фибоначчи – по имени итальянского математика 13 в.
71827. Упрощенная схема управления лифтом 329 KB
  Для сравнения элементарная алгебра занимается арифметическими выражениями и операциями. Логические операции Логические операции булевой алгебры подобны арифметическим операциям элементарной алгебры. В такой таблице в колонках стоят операнды операции и сама операция...
71828. Исследования задач о двух ортогональных латинских квадратах 190 KB
  Вывести формулу по которой из значений элементов двух ортогональных латинских квадрата порядка n можно получить значения элементов нового латинского квадрата порядка n. Пример латинского квадрата 3го порядка: Теоремы Теорема 1 Для n 1 существует не более n−1 попарно...
71829. Разработка логических функций для управления подвижной площадки с тремя электродвигателями-колесами 181 KB
  Алгебра логики (алгебра высказываний) — раздел математической логики, в котором изучаются логические операции над высказываниями. Чаще всего предполагается, что высказывания могут быть только истинными или ложными.
71830. Пульт телеуправления подвижным объектом 156 KB
  Логические операции булевой алгебры подобны арифметическим операциям элементарной алгебры. В такой таблице в колонках стоят операнды операции и сама операция а в строках   различные значения операндов и результат применения к ним данной операции.
71831. Схема управления электродвигателем объекта совершающего возвратно-поступательное движение 170.5 KB
  Конечность области определения функции имеет важное преимущество –- такие функции можно задавать перечислением значений при различных значениях аргументов. Для того чтобы задать значение функции от n переменных надо определить значения для каждого из 2n наборов.
71832. Разработка стратегии восстановления темпов роста объемов продаж через оптимизацию ассортимента и проведение поддерживающих организационных изменений 1.92 MB
  Большее понимание менеджерами отдела продаж потребностей клиентов за счет фокусирования своей работы на конкретной товарной группе и клиентской базе данной товарной группы; сокращение времени обработки заказов за счет хорошего знания ассортимента и клиентов определенной товарной группы; возможность качественного предложения альтернативных вариантов товара на замену отсутствующего в данный момент товара; оперативное и качественное продвижение новых товаров через клиентов своей товарной группы...
71833. Разработка логической функции управления тепловым прибором 154.5 KB
  Для понятия высказывание иногда используют термин пропозиция а говоря пропозициональный подразумевают относящийся к логике высказываний. По аналогии с элементарной алгеброй где любое число является константой высказывание является логической константой величина которой равна 1 или 0.