Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 8.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
384.51 Кб
Скачать

Лекция 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 Organi­zation), также называют стандартом 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-запросе допускаются комментарии, поясняющие текст программмы. Комментарий ограничивается символами /* и */.