Хомоненко А.Д., Цыганков В.М., Мальцев М.Г. - Базы данных. Учебник для высших учебных заведений (6-е изд.) - 2009 (1084484), страница 20
Текст из файла (страница 20)
Само представление описывается путем указания идентификаторапредставления и запроса, который должен быть выполнен для его получения.Д л я удобства работы с представлениями в язык 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 ) повторяющиеся строки. По умолчанию в ответную таблицувключаются все строки, в том числе и повторяющиеся.
В отборе данных участвуют записи одной или нескольких таблиц, перечисленных в списке операнда FROM.Список данных может содержать имена столбцов, участвующих в запросе, а также выражения над столбцами. В простейшем случае в выражениях можно записывать имена столбцов, знаки арифметических операций (+, — , * , / ) , константы и круглые скобки. Если в списке данныхзаписано выражение, то наряду с выборкой данных выполняются вычисления, результаты которого попадают в новый (создаваемый) столбецответной таблицы.При использовании в списках данных имен столбцов нескольких таблицдля указания принадлежности столбца некоторой таблице применяют конструкцию вида: <имя таблицы>.<имя столбца>.Операнд W H E R E задает условия, которым должны удовлетворять записи в результирующей таблице.