
- •1. Основные сведения о языке sql
- •2. Определение данных
- •2.1. Создание и удаление таблицы
- •2.2. Изменение состава полей таблицы
- •2.3. Создание и удаление индекса
- •IndName on Personnel.Db (Name)
- •IndNamePosition on Personnel.Db (Name, Position)
- •3. Отбор данных из таблиц
- •3.1. Описание оператора select
- •3.2. Управление полями
- •3.3. Простое условие отбора записей
- •3.4. Сложные критерии отбора записей
- •3.5 Группирование записей
- •3.6. Сортировка записей
- •Var s: string;
- •3.7. Соединение таблиц
- •4. Модификация записей
- •4.1. Редактирование записей
- •4.2. Вставка записей
- •Insert into Store
- •Values ("Торшер", 499.9, 10);
- •Insert into CardsArchives
- •4.3. Удаление записей
- •5. Статический и динамический запросы
- •Var str: string;
Лекция 8
Язык структурированных запросов SQL
Введение
1. Основные сведения о языке SQL
2. Определение данных
2.1. Создание и удаление таблицы
2.2. Изменение состава полей таблицы
2.3. Создание и удаление индекса
3. Отбор данных из таблиц
3.1. Описание оператора SELECT
3.2. Управление полями
3.3. Простое условие отбора записей
3.4. Сложные критерии отбора записей
3.5 Группирование записей
3.6. Сортировка записей
3.7. Соединение таблиц
4. Модификация записей
4.1. Редактирование записей
4.2. Вставка записей
4.3. Удаление записей
5. Статический и динамический запросы
Приложение. Функции языка SQL
Введение
Реляционный способ доступа к данным основывается на операциях с группами записей. Для задания операций используются средства языка структурированных запросов — SQL (Structured Query Language), поэтому реляционный способ доступа называют также SQL -ориентированным. Для его реализации в приложениях Delphi в качестве набора данных должны применяться такие компоненты, как Query или storedProc, позволяющие выполнить SQL-запрос.
Средства SQL применимы для выполнения операций с локальными и удаленными БД. Наиболее полно преимущества реляционного способа доступа и языка SQL проявляются при работе с удаленными БД. Основным достоинством реляционного способа доступа является небольшая загрузка сети, поскольку передаются только запросы и результат их выполнения.
Применительно к локальным БД использование реляционного способа доступа не дает существенного преимущества, но и в этом случае с помощью SQL-запроса можно:
формировать состав полей набора данных при выполнении приложения;
включать в набор данных поля и записи из нескольких таблиц;
отбирать записи по сложным критериям;
сортировать набор данных по любому полю, в том числе неиндексированному;
осуществлять поиск данных по частичному совпадению со значениями в поле.
Замечание
Многие из названных действий неприменимы к набору данных Table.
Для компонента Query реляционный способ доступа реализуется в случае, когда используются только средства SQL-запросов. Если дополнительно применять методы, ориентированные на операции с отдельными записями, например, Next или Edit, то будет реализован навигационный способ доступа со всеми его недостатками.
При работе с удаленными БД можно также использовать навигационный способ доступа, но для небольших сетей, чтобы не создавать большой загрузки.
1. Основные сведения о языке sql
Язык SQL ориентирован на выполнение действий с таблицами БД и данными в этих таблицах, а также некоторых вспомогательных действий. В отличие от процедурных языков программирования, в нем нет операторов управления вычислительным процессом (циклов, переходов, ветвления) и средств ввода-вывода. Составленную на языке SQL программу также называют SQL-запросом.
Язык SQL обычно интегрируется в другие средства (оболочку), используясь в интерактивном режиме. Так, в системе управления базами данных, имеющей интерактивный интерфейс, пользователь может работать, ничего не зная об языке SQL и независимо от того, какая БД используется: локальная или удаленная. Такие СУБД, как Microsoft Access, Visual FoxPro или Paradox, сами выполняют действия, связанные с программированием запросов на SQL, предлагая пользователю средства визуального построения запросов, например, Query By Example (QBE) — запрос по образцу.
Так как SQL не обладает возможностями полноценного языка программирования, а ориентирован на доступ к данным, то его часто включают в средства разработки программ. Встроен он и в систему Delphi. При этом для работы с командами SQL предлагаются соответствующие средства и компоненты. В Delphi к числу таких компонентов принадлежит набор данных Query.
Различают два вида SQL-запросов: статический и динамический. Статический SQL-запрос включается в исходный код на этапе разработки и в процессе выполнения приложения не изменяется. Разработчик может изменить SQL-запрос путем использования параметров, если таковые имеются в его тексте.
Код динамического SQL-запроса формируется или изменяется при выполнении приложения. Такие запросы обычно применяются в случае, когда при выполнении запроса требуется учитывать действия пользователя.
Замечание
Принятая нами классификация не является однозначной. Так, в некоторых источниках SQL-запросы с параметрами тоже относят к разряду динамических.
Язык SQL имеет несколько стандартов, из которых наиболее распространенными среди производителей программных продуктов являются стандарты SQL-89 и SQL-92. Стандарт SQL-92, поддерживаемый Американским национальным институтом стандартов (ANSI — American National Standards Institute) и Международной организацией по стандартизации (ISO — International Standard Organization), также называют стандартом ANSI или ANSI/ISO. Наличие нескольких стандартов и различная их интерпретация породили множество диалектов языка SQL, которые в большей или меньшей степени отличаются друг от друга.
В языке SQL можно выделить следующие основные подмножества операторов:
определения данных;
обработки данных;
управления привилегиями (доступом к данным);
управления транзакциями.
Рассмотрим основные возможности, реализованные в используемой в Delphi версии языка SQL. Эта версия несколько отличается от стандарта SQL-92, например, в ней нельзя работать с просмотрами и управлять привилегиями.
Особенности языка SQL, используемого для работы с удаленными БД (промышленными СУБД), будут рассмотрены в следующих главах.
В приложениях Delphi для выполнения операторов SQL можно использовать набор данных Query. Напомним, что текст SQL-запроса является значением свойства SQL компонента Query и формируется или при разработке приложения, или во время его выполнения. Компонент Query обеспечивает выполнение SQL-запроса и получение соответствующего набора данных. Формирование набора данных выполняется при активизации компонента Query путем вызова метода Open или установкой свойству Active значения True. Иногда при отработке SQL-запроса нет необходимости получать набор данных, например, при удалении, вставке или модификации записей. В этом случае пред-почтительнее выполнять запрос вызовом метода ExecSQL. При работе в сети вызов этого метода производит требуемую модификацию набора данных, не передавая в вызывающее приложение (компьютер) записи набора данных, что существенно снижает нагрузку на сеть.
Кроме того, набрать и выполнить в интерактивном режиме текст SQL-запроса позволяют инструментальные программы, поставляемые вместе с Delphi, например такие, как Database Desktop, SQL Explorer и SQL Builder. Отметим, что первые две программы вызываются с помощью одноименных команд меню Tools и Database, соответственно, а визуальный построитель запросов SQL Builder вызывается через контекстное меню компонента Query.
Проверка синтаксиса и отработка запроса, встроенного в приложение (чаще всего с помощью компонента Query), производятся на этапе выполнения приложения. При наличии синтаксических ошибок в тексте SQL-запроса генерируется исключительная ситуация, интерпретировать которую порой непросто. Для отладки SQL-запросов удобно использовать программы с развитым интерфейсом, например, Datab;se Desktop. После отладки текст запроса вставляется в разрабатываемое приложение. При таком подходе значительно сокращается время создания запросов и существенно уменьшается вероятность появления динамических ошибок.
В качестве результата выполнения SQL-запроса может возвращаться набор данных, который составляют отобранные с его помощью записи. Этот набор данных называют результирующим.
В дальнейшем при описании операторов языка мы будем опускать несущественные операнды и элементы, используя для обозначения отдельных элементов символы < > (при программировании не указываются), а необязательные конструкции заключать в квадратные скобки. Для наглядности зарезервированные слова языка SQL будут писаться строчными, а имена — прописными буквами. Регистр букв не влияет на интерпретацию операторов языка. Точка с запятой в конце SQL-операторов необязательна. Элементы в списках, например, имена полей и таблиц, должны быть разделены запятыми.
Имена таблиц и полей (столбцов) заключаются в одиночные или двойные апострофы, например, "First Name". Если имя не содержит пробелов и других специальных символов, то апострофы можно не указывать.
В SQL-запросе допускаются комментарии, поясняющие текст программмы. Комментарий ограничивается символами /* и */.