Хомоненко А.Д., Цыганков В.М., Мальцев М.Г. - Базы данных. Учебник для высших учебных заведений (6-е изд.) - 2009 (960530), страница 20
Текст из файла (страница 20)
д.), средствами разработки пользовательских интерфейсов, средствамипроектирования и отладки.Различают два основных метода использования встроенного SQL: статический и динамический.При статическом использовании языка (статическийSQL)в тексте программы имеются вызовы функций языка SQL, которые жестко включаются ввыполняемый модуль после компиляции. Изменения в вызываемых функциях могут быть на уровне отдельных параметров вызовов с помощью переменных языка программирования.При динамическом использовании языка (динамический SQL) предполагается динамическое построение вызовов SQL-функций и интерпретация этихвызовов, например, обращение к данным удаленной базы, в ходе выполненияпрограммы.
Динамический метод обычно применяется в случаях, когда в приложении заранее неизвестен вид SQL-вызова и он строится в диалоге с пользователем.100Часть 1. Основы построениябазданныхОсновным назначением языка S Q L (как и других языков для работы с базами данных) является подготовка и выполнение запросов.
В результате выборки данных из одной или нескольких таблиц может быть получено множество записей, называемое представлением.Представление по существу является таблицей, формируемой в результатевыполнения запроса. Можно сказать, что оно является разновидностью хранимого запроса. По одним и тем же таблицам можно построить несколько представлений.
Само представление описывается путем указания идентификаторапредставления и запроса, который должен быть выполнен для его получения.Д л я удобства работы с представлениями в язык SQL введено понятие курсора. Курсор представляет собой своеобразный указатель, используемый дляперемещения по наборам записей при их обработке.Описание и использование курсора в языке SQL выполняется следующим образом. В описательной части программы выполняют связывание переменной типа курсор (CURSOR) с оператором SQL (обычно с оператором SELECT). В выполняемойчасти программы производится открытие курсора (OPEN <имя курсора>), перемещение курсора по записям (FETCH <имя курсора>...), сопровождаемое соответствующей обработкой, и, наконец, закрытие курсора (CLOSE <имя курсора>).Основные операторы языкаОпишем минимальное подмножество языка SQL, опираясь на его реализацию в стандартном интерфейсе O D B C (Open Database Connectivity — совместимость открытых баз данных) фирмы Microsoft.Операторы языка SQL можно условно разделить на два подъязыка: языкопределения данных (Data Definition Language — D D L ) и язык манипулирования данными (Data Manipulation Language — DML).
Основные операторыязыка SQL представлены в табл. 3.3.Рассмотрим формат и основные возможности важнейших операторов, за исключением специфических операторов, отмеченных в таблице символом «*». Несущественные операнды и элементы синтаксиса (например, принятое во многих системах программирования правило ставить «;» в конце оператора) будем опускать.1. Оператор создания таблицы имеет формат вида:C R E A T E TABLE <имя таблицы>(<имя столбца> <тип данных> [NOT NULL][,<имя столбца> <тип данных> [NOT NULL]]...
)Обязательными операндами оператора являются имя создаваемой таблицы и имя хотя бы одного столбца (поля) с указанием типа данных, хранимыхв этом столбце.При создании таблицы для отдельных полей могут указываться некоторыедополнительные правила контроля вводимых в них значений. Конструкция NOTNULL (не пустое) служит именно таким целям и для столбца таблицы означает,что в этом столбце должно быть определено значение.3. Реляционнаямодельданных101Таблица3.3Операторы языка SQLВидНазваниеНазначениеDDLCREATE TABLEDROP TABLEALTER TABLECREATE INDEXDROP INDEXCREATE VIEWDROP VIEWGRAND*REVOKE*создание таблицыудаление таблицыизменение структуры таблицысоздание индексаудаление индексасоздание представленияудаление представленияназначение привилегийудаление привилегийDMLSELECTUPDATEINSERTDELETEвыборка записейизменение записейвставка новых записейудаление записейВ общем случае в разных СУБД могут использоваться различные типыданных (см.
подраздел 2.7). В интерфейсе O D B C поддерживаются свои станд а р т н ы е типы данных, н а п р и м е р , с и м в о л ь н ы е(SQL_CHAR,SQL_VARCHAR, SQL LONGVARCHAR) и др. При работе с БД некоторойСУБД посредством интерфейса ODBC выполняется автоматическое преобразование стандартных типов данных, поддерживаемых интерфейсом, в типыданных источников и обратно.
При необходимости обмен данными междупрограммой и источником данных может вестись без преобразования — вовнутреннем формате данных источника.Пример 1. Создание таблицы.Пусть требуется создать таблицу goods описания товаров, имеющую поля:type — вид товара, comp_id — идентификатор компании-производителя, паше —название товара и price — цена товара. Оператор определения таблицы можетиметь следующий вид:CREATE TABLE goods (type SQL_CHAR(8) NOT NULL,comp_id S Q L C H A R ( I O ) NOT NULL, name SQL_VARCHAR(20),price SQL_DECIMAL(8,2)).2. Оператор изменения структурытаблицы имеет формат вида:ALTER TABLE <имя таблицы>( {ADD, MODIFY, DROP} <имя столбца> [<тип данных>][NOT NULL][,{ADD, MODIFY, DROP} <имя столбца> [<тип данных>][NOT NULL]]...)Часть 1.
Основы102построениябазданныхИзменение структуры таблицы может состоять в добавлении (ADD), изменении (MODIFY) или удалении (DROP) одного или нескольких столбцов таблицы. Правила записи оператора ALTER TABLE такие же, как и оператора CREATETABLE. При удалении столбца указывать <тип данных> не нужно.Пример 2. Добавление поля таблицы.Пусть в созданной ранее таблице goods необходимо добавить поле number,отводимое для хранения величины запаса товара. Для этого следует записатьоператор вида:ALTER TABLE goods (ADD number S Q L I N T E G E R ) .3. Оператор удалениятаблицы имеет формат вида:D R O P TABLE <имя таблицы>Оператор позволяет удалить имеющуюся таблицу. Например, для удаления таблицы с именем items достаточно записать оператор вида:D R O P TABLE items.4.
Оператор создания индекса имеет формат вида:CREATE [UNIQUE] INDEX <имя индекса>ON <имя таблицы>(<имя столбца> [ ASC | DESC ][,<имя столбца> [ ASC | DESC ]... )Оператор позволяет создать индекс для одного или нескольких столбцов заданной таблицы с целью ускорения выполнение запросных и поисковых операций с таблицей. Для одной таблицы можно создать несколько индексов.Задав необязательную опцию UNIQUE, можно обеспечить уникальность значений во всех указанных в операторе столбцах. По существу, создание индекса с указанием признака UNIQUE означает определение ключа в созданной ранее таблице.При создании индекса можно задать порядок автоматической сортировкизначений в столбцах — в порядке возрастания ASC (по умолчанию), или впорядке убывания DESC.
Для разных столбцов можно задавать различныйпорядок сортировки.Пример 3. Создание индекса.Пусть для таблицы ЕМР, имеющей поля: NAME (имя), SAL (зарплата),MGR (руководитель) и DEPT (отдел), нужно создать индекс main_indx длясортировки имен в алфавитном порядке и убыванию размеров зарплаты.Оператор создания индекса может иметь вид:CREATE INDEX main_indxON emp (name, sal DESC).5. Оператор удаления индекса имеет формат вида:DROP INDEX <имя индекса>3. Реляционнаямодельданных103Этот оператор позволяет удалять созданный ранее индекс с соответствующим именем. Так, например, для уничтожения индекса main_indx к таблицеemp достаточно записать оператор D R O P INDEX main_indx.6.
Оператор создания представленияимеет формат вида:CREATE VIEW <имя представления>[(<имя столбца> [,<имя столбца> ] . . . ) ]AS <оператор SELECT>Данный оператор позволяет создать представление. Если имена столбцовв представлении не указываются, то будут использоваться имена столбцов иззапроса, описываемого соответствующим оператором SELECT.Пример 4.
Создание представления.Пусть имеется таблица companies описания производителей товаров с полями:comp_id (идентификатор компании), comp_name (название организации),comp_address (адрес) и phone (телефон), а также таблица goods производимых товаров с полями: type (вид товара), comp_id (идентификатор компании), паше (название товара) и price (цена товара). Таблицы связаны между собой по полюcomp_id. Требуется создать представление герг с краткой информацией о товарахи их производителях: вид товара, название производителя и цена товара. Оператор определения представления может иметь следующий вид:CREATE VIEWгергASSELECTgoods.type, companies.comp_name, goods.priceFROMgoods, companiesWHEREgoods.comp_id = companies.comp_id7. Оператор удаленияпредставленияимеет формат вида:D R O P VIEW <имя представления>Оператор позволяет удалить созданное ранее представление.
Заметим, чтопри удалении представления таблицы, участвующие в запросе, удалению неподлежат. Удаление представления герг производится оператором вида:DROP VIEW герг.8. Оператор выборки записей имеет формат вида:SELECT [ALL | DISTINCT]<список данных>FROM <список таблиц>104Часть 1. Основы построениябазданных[WHERE <условие выборки>][ G R O U P BY <имя столбца> [,<имя столбца>] ...
][HAVING <условие поиска>][ORDER BY <спецификация> [,<спецификация>] ...]Это наиболее важный оператор из всех операторов SQL. Функциональные возможности его огромны. Рассмотрим основные из них.Оператор SELECT позволяет производить выборку и вычисления надданными из одной или нескольких таблиц. Результатом выполнения оператора является ответная таблица, которая может иметь (ALL), или не иметь( D I S T I N C T ) повторяющиеся строки.