Тема: Запросы
Цель: Изучение свойств и работу компонента TADOQuery, разработка
приложения SQL-монитор с применением операторов SQL.
Оборудование: IBM – совместимые компьютеры.
Место проведения: Компьютерный класс.
Техника безопасности: См. инструкцию.
Теоретическая часть
Язык запросов SQL.
SQL (Structured Query Language) – Это Язык Структурированных Запросов.
Он не такой богатый, как языки программирования высокого уровня. Тем не
менее, это язык, без владения которым программисту, работающему с базами
данных, не обойтись. Запросы, написанные на SQL, часто называют скриптами.
Эти скрипты можно непосредственно вводить в свойство SQL компонента-
запроса в момент проектирования приложения, а можно значение этого свойства
менять и в процессе прогона программы. Однако нередко используют и третий
способ: программист создает набор скриптовых файлов, в процессе работы
программа считывает из них SQL-инструкции в компоненты запросов и
выполняет их. Это простые текстовые файлы, созданные в любом редакторе
текстов, например, стандартном Блокноте Windows. Расширение может быть
любым, но традиционно используется *.sql.
Все это позволяет создавать гибкие программы. Если организации,
использующей ваше приложение, в дальнейшем потребуются какие-то новые
возможности, например, им нужно дополнительно создать еще один отчет, то
применение скриптовых файлов избавит вас от необходимости переделывать
программу, для этого достаточно будет написать скрипт.
В этой работе разберем работу основных операторов SQL, после чего вы
сможете создавать простые и сложные запросы и получать необходимые наборы
данных. Тем, кто пожелает расширить свои познания SQL, рекомендую пройти
соответствующий курс, посвященный этому языку, или прочитать книгу М.
Грубера «Понимание SQL». Книга описывает стандартный синтаксис языка SQL
и затрагивает все его возможности.
2
Команда SELECT
Команда SELECT является основой запроса. Большинство SQL-запросов
начинаются с нее.
Множество других команд вкладываются в блок SELECT. Полный
синтаксис этой команды таков:
SELECT *
FROM Table_Name;
Звездочка указывает, что нужно показать все поля. Вместо звездочки можно
указать конкретное поле или поля, разделяя их запятыми. Иногда бывает, что
требуются данные из разных таблиц, которые имеют поля с одинаковым именем.
В этом случае, перед именем полей указывают имя таблицы, или ее псевдоним,
разделяя имена таблицы и поля точкой:
Команда WHERE
Команда WHERE позволяет использовать условие, которые может быть
верным или нет для каждой записи НД. Если условие верное, то запись
добавляется в набор данных, иначе отвергается. Давайте рассмотрим пример.
Загрузите SQL-монитор из прошлой лекции. Предположим, нам нужно получить
следующие данные на каждого сотрудника: Фамилия, Имя, Отдел, Должность.
Пишем соответственный SQL-запрос:
Команда ORDER BY
Команда ORDER BY позволяет сортировать записи по определенному
полю как в возрастающем, так и в убывающем порядке. Воспользуемся
предыдущим примером, и отсортируем записи по полю «Фамилия»:
Оператор IN
Оператор IN позволяет определить набор значений. Предположим, нам
нужны сотрудники, проживающие в городах Москва и Санкт-Петербург. Мы
можем сформировать сложный запрос:
Оператор BEETWEEN
Оператор BEETWEEN работает примерно так же, как IN, но задает не
список, а диапазон значений. Предположим, нам нужно выявить сотрудников,
которые имеют стаж работы от 4 до 10 лет включительно. Подобный запрос
выглядит так:
Оператор LIKE
Оператор LIKE работает только с символьными и строковыми полями.
Этот оператор позволяет находить записи, имеющие заданную подстроку.
Предположим, нам требуется вывести всех сотрудников, чья фамилия начинается
на букву «Л». Запрос будет таким:
Агрегатные функции
Агрегатные функции используются в запросах SQL, чтобы из группы
записей сформировать одиночное значение одного поля. Имеются следующие
агрегатные функции:
AVG – Функция возвращает среднее арифметическое значение из всех
значений данного поля. Предположим, нам требуется выяснить средний стаж всех
сотрудников предприятия. Такие данные могут быть сформированы следующим
запросом:
Команда GROUP BY
Команда GROUP BY позволяет группировать записи по какому-то
определенному значению, и применяется совместно с агрегатными функциями.
Предположим, нам требуется не просто получить средний стаж всех сотрудников,
а еще и разбить эти данные по отделам. Вдруг директору захочется узнать, в
каком отделе у него работает больше всего молодых или старых специалистов! В
нашу задачу входит выявить средний стаж сотрудников для каждого имеющегося
отдела. Это мы можем выявить таким запросом:
SELECT Отдел
FROM Doljnost;
Команда HAVING
Команда HAVING позволяет определить условия, чтобы удалить
определенные группы из полученного набора данных, точно так же, как команда
WHERE делает это для отдельных записей. Предположим, нам нужно получить
максимальный стаж работы по каждой должности, как это мы делали выше, но
при этом указать, что этот максимальный стаж должен быть более 7 лет.
Следовательно, если на какой-то должности работают молодые сотрудники,
имеющие меньший стаж работы, эта должность не будет приниматься. Для
задания условия мы обычно используем команду WHERE, но в этой команде
нельзя использовать агрегатные функции, формирующие значение из группы
записей. Другими словами, запрос, подобный этому:
Задание
Добавить в приложение, разработанное в Лабораторной работе №20,
контекстное меню (или другой компонент), выполняющее перечисленные
запросы.