Курсовая работа (т): Язык структурированных запросов SQL. Использование SQL в прикладном программировании

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Словарь SQL состоит, в основном, из операторов запросов, однако данные, с которыми работают эти запросы, необходимо хранить в понятном системе виде, поэтому всякая СУБД имеет собственный набор типов данных (язык описания схем - DDL), которые содержат в себе такие типы как INTEGER, CHAR и так далее. Набор типов, как правило, совпадает у разных СУБД на большую часть, а также соответствует некоторым типам данных в тех языках прикладного программирования, которые могут использоваться с данной СУБД. Это закладывает основу использования SQL в программировании на других языках, что немаловажно в современных условиях интеграции различных технологий [9, с. 31].

Как уже было сказано, основным компонентом SQL являются операторы, из которых составляются запросы к базе данных. Однако, прежде чем выполнить запрос, любая СУБД выполняет несколько проверок:

) Имеется ли у пользователя разрешение на то, чтобы выполнить запрос?

) Имеется ли у пользователя доступ к необходимым данным?

) Верен ли синтаксис введенного запроса? [18, с. 41]

Очевидно, что такие проверки выполняются в целях обеспечения безопасности базы данных. SQL и СУБД, использующие его, содержат в себе множество средств повышения безопасности данных. Это и другие достоинства, а также недостатки языка SQL перечислены в таблице 2 [27].

Таблица 2: Достоинства и недостатки языка SQL

Достоинства

Недостатки

Универсальность: несмотря на существование разных диалектов языка, в большой степени SQL не зависит от СУБД, на которой он используется

Изначально SQL разрабатывался как язык, максимально приближенный по виду к английскому, однако со временем развился в достаточно сложный инструмент, малопонятный для среднего пользователя

Стандарты: будучи высоко развитым языком с более чем двадцатилетней историей, SQL имеет стандарты, которые сохраняют устойчивость языка в контексте новых разработок

Некоторые особенности языка SQL создают возможность для ошибок при работе с реляционными БД: SQL разрешает повторяющиеся строки в таблицах, неопределенные значения записей (NULL), колонки таблиц пронумерованы, разрешены пустые и повторяющиеся имена полей

Декларативность: при отправлении SQL-запроса, пользователь не должен определять технически, каким образом будут получены данные из БД - система управления базой данных самостоятельно переведет операторы SQL на технический язык более низкого уровня

В некоторых случаях отступления от стандарта все же становятся достаточно сильными, что мешает при разработке решения для разных систем


Несмотря на недостатки, SQL остается мощным средством работы с реляционными БД. С помощью этого языка можно выполнять множество действий с базой данных на всех этапах ее существования - от создания до удаления. Очевидно, что основной задачей SQL при этом является работа с уже существующими таблицами. В следующих подразделах рассмотрено создание базы данных посредством языка SQL, а также основные запросы к созданной БД.

.2 Создание и управление базой данных

Прежде чем переходить к практическим аспектам работы с языком SQL, следует отметить главные особенности его синтаксиса.

Каждый запрос в SQL завершается символом «точка с запятой» - «;». Без этого символа обработчик команд не сможет определить выражение. Различные параметры запроса, как правило, разделяются запятой. Регистр, в котором записаны операторы, не имеет значения, но принято служебные слова записывать в верхнем регистре, а значения параметров - в нижнем.

Для создания и заполнения базы данных в большинстве диалектов SQL используются одинаковые операторы, поэтому непринципиальна СУБД, в рамках которой будет рассмотрен этот этап работы с языком (хотя необходимо отметить, что в большинстве случаев развитые графические оболочки СУБД имеют большой инструментарий для создания базы данных без ручного введения запросов SQL). В данном случае будет использована графическая оболочка MySQL Workbench, подключенная к СУБД MySQL с запущенным локальным сервером (инструмент SQL Editor).

В СУБД MySQL основным SQL-оператором создания новой базы данных является CREATE DATABASE. Общий вид этого оператора такой:DATABASE <имя_БД> [CHARACTER SET <кодировка>] [COLLATE <порядок сортировки>];

Технически, обязательной частью оператора являются только первые два слова и название БД. Если кодировка и порядок сортировки не введены, будут использованы значения по умолчанию [18].

При создании БД система не выбирает эту базу данных автоматически. В каждой СУБД необходимо выбрать созданную базу данных посредством соответствующего оператора - только после этого можно работать с ней. В MySQL этим оператором является USE (вид: USE <имя_БД>). Для проверки (и открытия в графической оболочке) выбранной БД можно использовать функцию SELECT DATABASE().

При введении трех запросов, описанных выше, в том же порядке, как они перечислены, и запуске получившегося скрипта, MySQL Workbench отобразит следующий результат (рисунок 8):

Рисунок 8: Окно программы MySQL Workbench с созданной БД Test_SQL_1

Для получения полного списка баз данных, находящихся на сервере, к которому в данный момент подключена СУБД MySQL, можно использовать команду SHOW DATABASES. Для получения списка таблиц в выбранной на данный момент БД можно воспользоваться командой SHOW TABLES.

Для удаления базы данных используется команда DROP DATABASE <имя_базы_данных>. Для выполнения этой команды необходимо иметь привилегию DROP в MySQL (включена в привилегии администратора). Данный запрос необходимо использовать с предельной осторожностью, так как он очищает и удаляет все таблицы из базы данных и удаляет саму БД [28].

Создав базу данных, можно переходить к созданию таблиц, заполнению их данными и обработке этих данных.

2.3 Создание и управление таблицами. Основные запросы SQL

Подключившись к базе данных и обладая необходимыми привилегиями (в случае подключения в качестве администратора все такие привилегии даны), можно создавать таблицы. Для создания таблиц в MySQL используется стандартное выражение CREATE TABLE следующего вида:

CREATE TABLE <название_таблицы>

(<поле_1> <тип_1> [DEFAULT <выражение_1>],

<поле_2> <тип_2> [DEFAULT <выражение_2>],

...

<поле_n> <тип_n> [DEFAULT <выражение_n>]>

[CONSTRAINT <название_ограничения> PRIMARY KEY (<поле_m>)]

);

Выражения, представленные в квадратных скобках, не являются обязательными. Оператором DEFAULT можно задать значение по умолчанию для всех записей соответствующего столбца. Оператором CONSTRAINT можно задать ограничение по столбцу, либо по таблице (например, задать первичный ключ, как указано в примере) [5, с. 67].

В случае, если необходимо поменять тип какого-то из полей таблицы, можно воспользоваться оператором ALTER [18, с. 31]:

ALTER <имя_таблицы> <ADD/DROP/ALTER/MODIFY> <столбец> [<тип_данных>].

При успешном создании таблицы в нее можно добавлять данные в соответствии с типами заданных полей. Для этого используется команда INSERT:

INSERT INTO <имя_таблицы>

(<поле_1>, <поле_2>,…, <поле_n>)

VALUES (<знач_поля_1>, <знач_поля_2>,…, <знач_поля_n>);

Листинг SQL-запросов, в результате выполнения которых MySQL создаст тестовую базу данных с таблицами «person», «favorite_food» и несколькими записями, приведен в приложении А.

Имея базу данных с одной или несколькими таблицами, в которых есть некоторые записи, можно перейти к изучению одного из наиболее основных запросов в SQL - SELECT. На этапе создания БД его можно было использовать, чтобы узнать, какая база данных выбрана системой управления БД на данный момент, но чаще всего этот оператор используется в контексте таблиц. По сути, команда SELECT просто выводит некоторые данные из необходимого отношения, которые актуальны на данный момент. Технически, само служебное слово SELECT инструктирует базу данных о том, что после него будет идти тело запроса [9, с. 71].

В наиболее простом случае с помощью данной команды можно вывести все записи таблицы (вывод будет произведен в зависимости от используемой программной оболочки). Для того чтобы вывести все записи таблицы, необходимо составить выражение следующего вида:

SELECT * <имя_таблицы>;

Служебный символ «*» может быть заменен одним или несколькими полями таблицы, перечисленными через запятую. В таком случае выведенные данные будут содержать лишь те столбцы, которые были указаны в запросе. Кроме этого запрос с оператором SELECT можно обогатить множеством уточняющих служебных слов: AND, OR; перед каждым выражением также может стоять отрицание NOT. <имя_поля> <лог_операция> <значение> - ограничивает выборку только теми записями, значения которых в поле <имя_поля> соответствуют требуемому выражению. Выражений может быть несколько, между ними должна стоять одна из логических операций.

Также с оператором WHERE могут использоваться служебные слова IN, BETWEEN, LIKE. IN (<знач_1>,…, <знач_n>) указывает на то, что значение результата должно быть в множестве значений, заключенных в скобки. BETWEEN <знач_1> AND <знач_2> указывает на то, что результирующее значение должно быть больше или равно <знач_1> и меньше либо равно <знач_2>. Служебное слово LIKE (используется только с полями CHAR или VARCHAR) сообщает базе данных, что в результирующей выборке должны быть только те записи, значение необходимого поля которых соответствует маске, указанной после оператора LIKE. BY <имя_поля_1>,…,<имя_поля_n> DESC/ASC - сортирует результат выборки по указанным полям и по убыванию, либо возрастанию - данное ключевое слово сообщает базе данных, что выборка не должна содержать повторяющиеся данные. Ставится сразу после SELECT [9, с. 77].

Кроме этих служебных слов существуют и другие, однако перечислять их все в рамках данной работы не представляется оправданным. Важно, однако, отметить возможность выборки из нескольких таблиц (объединение или join) в том случае, если эти таблицы связаны.

Как можно видеть, оператор SELECT является мощным средством для выборки необходимых данных из таблицы. Тот факт, что любой запрос подобного вида можно составить автоматически (как простую текстовую строку, используя, например, программу с графической оболочкой, написанную специально для этого), подтверждает разнообразие возможностей, которые предоставляет SQL в рамках прикладного программирования. Листинг некоторых выборок из созданной ранее базы данных указан в приложении А. Более полный список основных операторов и служебных слов SQL можно найти в приложении Б.

.4 Работа с SQL в различных СУБД (MySQL, MS Access, Firebird)

Как уже было отмечено, основные реляционные СУБД, использующие язык SQL, имеют между собой немалые отличия. Более того, сам SQL, используемый такими СУБД, может отличаться от стандартов. Особенности некоторых СУБД будут продемонстрированы на трех примерах: MySQL (программная оболочка MySQL Workbench); MS Access и Firebird (программная оболочка FlameRobin).

) MySQL является сильно развитым продуктом с большим сообществом разработчиков и пользователей. Частично эта популярность вызвана тем, что данное решение распространяется по свободной лицензии (программа бесплатна), однако нельзя не отметить большое удобство пользования, высокую мощность и разнообразие дополнительных утилит в рамках MySQL, наличие сервера, поставляемого сразу с СУБД, и многих других преимуществ перед конкурентами. Также MySQL портирована на большинство существующих платформ.

Диалект SQL, используемый в MySQL, является надмножеством диалекта СУБД mSQL. Если говорить об особенностях этого диалекта, то он слабо отличается от стандарта SQL.

Графическая оболочка MySQL Workbench позволяет быстро выполнять многие действия, на выполнение которых посредством составления SQL-запросов ушло бы гораздо больше времени. Это создание и редакция баз данных и таблиц, настройка базы данных, настройка соединения с сервером, создание и редактирование пользователей, мониторинг системных переменных и так далее.

Кроме того, в современных версиях MySQL добавлены широкие возможности оптимизации: использование кэша запросов (наиболее частые запросы кэшируются, и их вызов происходит быстрее), хранение части кода на сервере MySQL (процедур, функций), использование подготовленных команд, пользовательские функции и так далее [14, с. 261].

Особенности работы с SQL в MySQL заключаются в наличии удобного редактора кода, автоматизации многих функций, возможности сохранять запросы и так далее. В новых версиях также была добавлена возможность объединять SQL-запросы в транзакции, создавать события, триггеры и хранимые процедуры[19].

) Microsoft Access, являясь частью пакета офисных приложений MS Office, предназначена, в первую очередь, для пользователей и продвинутых пользователей. Большинство функций реализовано посредством «мастеров» - графических утилит внутри основной программы, которые за несколько шагов выполняют создание определенной сущности с заданными параметрами. Использование SQL минимизировано - отсюда легкость в использовании данной СУБД. При этом текстовый редактор SQL-запросов содержит минимум полезных функций, что делает ручное написание запросов затруднительным

Диалект SQL, с которым работает MS Access, - JetSQL - был создан фирмой Microsoft специально для своих программных решений.

Также для полноценной работы с MS Access необходимо знание языка VBA - Visual Basic for Applications. Многие функции можно реализовать только через прямое редактирование кода, однако плюсом является некоторая интеграция JetSQL в этот язык [15].

) Firebird, в силу полной бесплатности продукта и относительной новизны, является наименее развитой из приведенных примеров СУБД. Без установки дополнительного программного обеспечения (графической оболочки) единственной возможностью управлять СУБД является командная строка Firebird. Однако существующие графические оболочки предоставляют некоторые полезные функции. Тем не менее, большая часть действий с базами данных должна быть выполнена посредством ручного написания SQL-запросов (в утилите ISQL либо в редакторе графической оболочки), что сильно замедляет работу.

Все дальнейшие действия в рамках практической части этой работы будут произведены с использованием базы данных, построенной в MySQL в силу широты возможностей и простоты использования данной СУБД.

3. Использование SQL в прикладном программировании

.1 Возможность интеграции SQL в программный код. Потенциальные преимущества от его использования

Теоретически, имея программу, разработанную на любом современном (или даже устаревшем) языке прикладного программирования высокого уровня, разработчик имеет возможность использовать язык SQL внутри своего продукта для обращения к внешней базе данных. Для интеграции SQL в свой продукт необязательно даже иметь специальное расширение языка, которое подключает «официальную» поддержку SQL в рамках продукта. Причина этого заключается в том, что все запросы SQL представляют собой простые текстовые строки или таких строк наборы, с которыми может работать любой применяемый на практике язык программирования высокого уровня.

Тем не менее, если среда разработки не поддерживает облегченные средства обращения к базе данных (через подключение к определенной СУБД), реализация отправки SQL-запросов может представиться сложным, если вообще выполнимым заданием.

Дело в том, что программа должна отправлять каждый запрос к СУБД по определенному подключению, а создать такое подключение можно, лишь имея специфические знания в области.

Для того чтобы облегчить задачу программистам, было создано множество расширений для различных СУБД и языков программирования высокого уровня. В случае языков программирования такие расширения обычно представляют собой библиотеки (классов либо методов), с помощью которых, введя одну стандартную функцию в тело программы, разработчик может подключиться к СУБД [16, с. 219].

В практических примерах будут рассмотрены именно языки с уже готовыми расширениями (для СУБД MySQL), так как подключение к СУБД вручную, во-первых, может занять большое количество времени, во-вторых, если используется на практике, то лишь в исключительных случаях - например, при работе с самописным языком.

Источник: https://www.bibliofond.ru/detail.aspx?id=862505