7604

Вкладені запити

Лекция

Коммуникация, связь, радиоэлектроника и цифровые приборы

Вкладені запити Запит SELECT може бути вкладеним у інший запит або використовуватися деякими командами як підкоманда. Завдяки цьому командаSQL може набирати скільки завгодно велику довжину. Ступінь вкладення не регламентується, од...

Украинкский

2013-01-26

89 KB

9 чел.

PAGE  3

Вкладені запити

Запит SELECT може бути вкладеним у інший запит або використовуватися деякими командами як підкоманда. Завдяки цьому команда SQL може набирати скільки завгодно велику довжину. Ступінь вкладення не регламентується, однак не варто захоплюватися надмірною кількістю вкладень, бо це серйозне випробування для компілятора, яке може спричинити виникнення труднощів, особливо під час налагодження програми. Розглянемо декілька прикладів вкладення запиту.

        Створення нової таблиці за допомогою запиту передбачає копіювання всієї або частини таблиці. При цьому можна по-різному маніпулювати як структурою полів, так вмістом записів. Такий підхід має перевагу, бо створення і заповнення даними таблиці відбувається однією командою SQL. Цю роботу виконує команда:

CREATE [TEMPORARY] TABLE ім’я_таблиці [(перелік_імен_полів)] AS запит

        Ця команда може мати застосування й для реструктуризації (зміни структури) таблиці. Наприклад, деякі версії SQL не мають засобів для знищення полів та зміни обмежень, тоді доцільно виготовити нову таблицю за допомогою команди CREATE TABLE AS, знищити стару та переіменувати нову на знищену. Найбільш помітний недолік – відсутність повноцінних можливостей для встановлення обмежень, у новостворену таблицю можна додавати лише обмеження зовнішніх ключів. Приклад, нехай потрібно змінити таблицю gazpr – вилучити поле diam та всі обмеження залишених полів:

CREATE TABLE new_gazpr(kod_g, naz_g, kil_n)

                AS SELECT kod_g, naz_g, kil_n FROM gazpr;

DROP TABLE gazpr;

ALTER TABLE new_gazpr RENAME TO gazpr;

        Вставка даних з інших таблиць забезпечується командою:

INSERT INTO таблиця [(перелік_імен_полів)] запит

        У цій формі команди INSERT секція VALUES відсутня, вона замінюється запитом. Приклад, вставити в нову таблицю new_gazpr 1 запит,  де kil_n < 7, взятий з таблиці gazpr. При цьому код газопроводу наростити на 2:

INSERT INTO new_gazpr SELECT kod_g + 2, naz_g FROM gazpr WHERE kil_n < 7 LIMIT 1;

        Підзапит – це команда SELECT, яка знаходиться в складі іншої команди SQL. Підзапит береться у круглі дужки. Його найчастіше використовують для повернення одного запису, рідше – для підмножини. Вкладені запити можуть знаходитися практично в будь-якій частині команди SQL – у списку цілей, в секції WHERE і т. д. Наведемо приклад запиту, який знаходиться в секції WHERE, нехай необхідно видати список підприємств, які працювали в поточному місяці поточного року, тобто їхні коди за місяць є в таблиці oblik:

  

SELECT pidpr.kod_p, pidpr.naz_p FROM pidpr

WHERE pidpr.kod_p IN

             ( SELECT oblik.kod_p FROM oblik

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

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

                GROUP BY oblik.kod_p

               );

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

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

SELECT kod_g FROM oblik UNION SELECT kod_g FROM gazpr; -- усі записи обох таблиць

SELECT kod_g FROM gazpr INTERSECT SELECT kod_g FROM oblik; -- лише однакові

SELECT kod_g FROM oblik EXCEPT SELECT kod_g FROM gazpr; -- лише різні

        Переважно всі версії SQL не дозволяють використовувати секцію LIMIT у порівняннях. Цю заборону можна обійти завдяки підтримці підзапитів у PostgreSQL. Для цього досить вкласти в круглі дужки кожен із запитів, тобто оформити їх як підзапити. Приклади:

(SELECT kod_g FROM oblik LIMIT 3) UNION SELECT kod_g FROM gazpr;

(SELECT kod_g FROM oblik LIMIT 3) UNION (SELECT kod_g FROM gazpr LIMIT 2);

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

  •  часто один і той же складний запит доводиться використовувати повторно, що додає користувачу рутинної роботи. Тоді доцільним стає одного разу скласти цей запит у вигляді подання, а потім звертатися до нього за допомогою більш простої команди;
  •  було би вкрай неефективно багаторазово пересилати одні й ті ж великі набори  даних по мережі на сервер PostgreSQL при виконанні стандартних процедур. У подібних ситуаціях теж використовується подання. Будучи один раз прочитаним, воно залишається в сегментах оперативно пам’яті, відведених для користувача;
  •  хорошим тоном ведення бази даних є обмеження доступу до окремих даних таблиць. Як правило, всі таблиці БД надійно захищені, а пересічний користувач використовує лише їхні усічені версії, вибрані поданням. Це робиться не тільки з метою обмеження доступу до секретних або конфіденціальних даних, але й для відмежування користувача від зайвої інформації, якою він не користується і яка лише відволікає його увагу. Зауважимо, що користувач не зобов’язаний знати ні будову всієї БД, ні структуру таблиць. Він зосереджується в основному на рухові матеріальних та фінансових ресурсів підприємства, яке експлуатує БД.

         Подання створюється командою CREATE VIEW, синтаксис якої виглядає так:


CREATE VIEW
імя_подання AS запит

        Запит являє собою повну команду SQL SELECT, яка визначає вміст подання. Нехай потрібно дізнатися про кількість поставок, відомості про яких зберігаються в таблиці. Це можна зробити декількома способами, але для простоти почнемо з такого рішення:

        Подання значно скорочують час, затрачений на отримання потрібних даних. Замість того, щоб вводити довгий запит, досить ввести просту команду SELECT. Наведемо приклад, нехай потрібно видати підсумовану кількість газу для всіх газопроводів за другу декаду (десятиденку, кожний місяць має 3 декади) поточного місяця поточного року. Цей запит досить об’ємистий, складний, тому оформимо його у вигляді нижченаведеного подання, названого kil_za_dekadu:

CREATE VIEW kil_za_dekadu AS

SELECT gazpr.naz_g, (CASE WHEN extract(day FROM oblik.data) < 11 THEN 1

                                                 WHEN extract(day FROM oblik.data) < 21 THEN 2

                                                  ELSE 3

                                      END) AS dekada, sum(oblik.kilk) AS kilkist

FROM oblik

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

WHERE ((CASE WHEN extract(day FROM oblik.data) < 11 THEN 1

                            WHEN extract(day FROM oblik.data) < 21 THEN 2

                            ELSE 3

                  END) = 2

                  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, dekada;

        Тоді вибірку можна одержати за допомогою такої порівняно простої команди:

SELECT * FROM kil_za_dekadu ORDER BY dekada;

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

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

        Команда знищення подання має такий вигляд:

DROP VIEW ім’я_подання;

        Приклад знищення подання:

DROP VIEW kil_za_dekadu;

        Знищення подання не впливає на дані, які ним використовувались. Подання всього лише забезпечує доступ до даних інших таблиць і тому може знищуватися без втрати даних (хоча вибірка, на якій воно грунтується, звичайно, втрачається).


 

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

81239. Методические рекомендации по организации и проведению практических занятий при изучении темы «графический редактор» 38.11 KB
  Режимы определяют возможные действия пользователя а также команды которые пользователь может отдавать редактору в данном режиме. В этом режиме можно выполнять команды записи рисунка на диск считывания рисунка с диска вывода рисунка на печать. Система команд графического редактора Команды выбора инструмента; Команды настройки инструмента ширина линий шрифт; Команды выбора цветов; Команды масштабирования рисунка; Команды работы с буфером обмена вырезать копировать вставить; Команды манипулирования с выделенным фрагментом...
81240. Компьютерные сети в образовании. Методические рекомендации по изучению темы «Сетевые информационные технологии» 38.58 KB
  Дать представление о назначении и структуре локальных и глобальных сетей; Познакомить учся с основными инф. услугами сетей с возможностями internet; Обучить способам обмена файлами в лок. сетей на 2 типа: локальные сети и глобальные. сетей обширна по числу понятий и может излагаться с разной степенью подробности.
81242. Цели и задачи обучения информатике в средней школе. Педагогические функции курса информатики. Структура обучения информатике в общеобразовательной школе 35.38 KB
  Федеральный компонент структурирован по ступеням общего образования начальное общее основное общее среднее полное общее образование; внутри ступеней по учебным предметам Изучение информатики и ИКТ направлено на достижение следующих целей: освоение знаний составляющих основу научных представлений об информации информационных процессах системах технологиях и моделях; овладение умениями работать с различными видами информации с помощью компьютера и других средств информационных и коммуникационных технологий ИКТ организовывать...
81243. Стандарт школьного образования по информатике. Назначение и функции общеобразовательного стандарта в школе 34.46 KB
  Общеобразовательный стандарт по информатике является нормативным документом определяющим требования: к месту базового курса информатики в учебном плане школы; к содержанию базового курса информатики в виде обязательного минимума содержания базового образования; к уровню подготовки учащихся в виде набора требований к ЗУНам и научным представлениям школьников; к технологии и средствам проверки и оценки достижений учащихся. технологии в обществе. и Информационные технологии: обработка текста; обработка графики; мультимедийные...
81244. Пропедевтика основ информатики в начальной школе: цели и задачи, анализ учебных и методических пособий 36.98 KB
  Рассмотрим программу курса информатики для III IV классов начальной общеобразовательной школы составители: а. Первин Цель этого курса развитие алгоритмического подхода к решению задач формирование представлений об информационной картине мира практическое освоение компьютера как инструмента деятельности. Содержание программы курса формировалось вокруг четырех основных направлений пронизывающих все темы курса: 1. Содержание и методика курса нацелены на формирование творческих исследовательских качеств.
81245. Место курса информатики в системе учебных дисциплин. Базисные учебные планы. Анализ школьных программ по информатике в общеобразовательной школе 37.67 KB
  А в это же самое время уже шла работа над созданием новой концепции так называемого базисного учебного плана БУП. утвердило и ввело в действие первую версию российского БУП общеобразовательных учреждений в котором в максимальной степени должны были учитываться и интересы государства и интересы региона и интересы образовательного учреждения т. БУП сам по себе не является рабочим учебным планом для школы он лишь представляет собой основу для разработки регионального базисного учебного плана на основе которого в свою очередь школа...
81246. Программное обеспечение курса информатики в общеобразовательной школе. Оборудование школьного кабинета информатики: материальная база и санитарные нормы 37.59 KB
  Помимо компьютерного оборудования кабинет информатики рекомендуется оснащать: Набором учебных программ для изучения курса информатики и отдельных разделов иных учебных предметов; Заданиями для осуществления индивидуального подхода при обучении организации самостоятельных работ и упражнений за ПЭВМ; Комплектом учебнометодической научнопопулярной справочной литературы; Журналом вводного и периодического инструктажей учащихся по технике безопасности; Журналом использования КУВТ на каждом рабочем месте; Журналом сведений об отказах...
81247. Методическая система и организация обучения информатике в школе: урок как основная форма обучения информатике. Подготовка к уроку информатики. Дидактические особенности учебных занятий по информатике 38.5 KB
  Школьный урок образует основу классноурочной системы обучения характерными признаками которой являются: постоянный состав учебных групп учащихся; строгое определение содержания обучения в каждом классе; определенное расписание учебных занятий; сочетание индивидуальной и коллективной форм работы учащихся; ведущая роль учителя; систематическая проверка и оценка знаний учащихся. Роль учителя во время фронтальной лабораторной работы наблюдение за работой учащихся в том числе и через локальную сеть КВТ а также оказание им оперативной...