Главная страница
Навигация по странице:

  • Интерактивный или автономный SQL

  • Встроенный SQL

  • Динамический SQL

  • Базы данных. Лекции БД. Лекция 5 Основные понятия информационных систем 5 История развития компьютеризации информационных процессов и систем. 5


    Скачать 1.07 Mb.
    НазваниеЛекция 5 Основные понятия информационных систем 5 История развития компьютеризации информационных процессов и систем. 5
    АнкорБазы данных
    Дата05.01.2022
    Размер1.07 Mb.
    Формат файлаdoc
    Имя файлаЛекции БД.doc
    ТипЛекция
    #324711
    страница10 из 24
    1   ...   6   7   8   9   10   11   12   13   ...   24

    Лекция 6.

    8.Язык SQL


    Язык SQL (структурированный язык запросов) весьма далек от полноценной реализации реляционной модели. Тем не менее, он является стандартным реляционным языком и в настоящее время поддерживается практически всеми продуктами, представленными на рынке.

    Будут рассмотрены вопросы определения данных, средства обработки данных (операции выборки и операции обновления), а также три ключевых конструкции SQL: табличные выражения, условные выражения и скалярные выражения. Изложение опирается на текущий стандарт языка SQL, известного как «SQL/92».

    Следует отметить, что ни один из коммерческих продуктов не поддерживает в полной мере стандарта SQL/92. Другими словами, любой продукт, не поддерживая некоторых аспектов стандарта, в других отношениях, возможно, превосходит его. Например, продукт IBM DB2, безусловно, не поддерживает всех средств SQL/92, касающихся целостности, но он превосходит стандарт в отношении правил, связанных с обновлением представлений.

    Разработанный в 1970 г. в компании IBM язык SQL стал стандартным языком, используемым для связи с такими системами управления реляционными базами данных, как Oracle, INGRES, Informix, Sybase, SQLbase, Microsoft SQL Server, DB2 (СУБД самой IBM), продуктами SQL/DC, Paradox, Access и многими другими. Кроме того, для продуктов dBASE и Interbase, снабженных собственными интерфейсами, уже разработан (или разрабатывается) интерфейс типа SQL для связи с базами данных. Можно с уверенностью сказать, что если вы собираетесь использовать реляционные базы данных, то вам придется работать с SQL.

    Обычно продукт реляционной базы данных включает не только СУБД. Собственно СУБД хранит данные, осуществляет поиск и выборку данных, а также записывает данные посредством исполнения операторов SQL. Кроме того, продукты реляционных баз данных обычно содержат различные инструментальные средства разработки интерфейса с пользователями. Среди таких инструментов можно назвать генераторы форм и отчетов, языки программирования четвертого поколения (4GL), графические языки запросов, генераторы запросов пользователя, дополнительное программное обеспечение для мультимедиа и гипертекстовые системы, системы автоматизации проектирования и автоматизированные производства (CAD/CAM), электронные таблицы и т.д. Все эти средства используют язык SQL для обращения к базе данных во время исполнения различных операций. СУБД, в свою очередь, обеспечивает запись, организацию и поиск данных, гарантирует их целостность, защиту и позволяет избежать взаимного влияния при одновременной работе пользователей с данными.

    8.1.Реализация языка SQL


    В техническом смысле SQL является «подъязыком данных», который предназначен только для использования в качестве взаимодействия с базой данных. Сам по себе SQL не содержит тех средств, которые необходимы для разработки законченных программ, и может использоваться в виде одной из трех прикладных реализаций:

    1. Интерактивный или автономный SQL дает возможность пользователям непосредственно извлекать информацию из базы данных или записывать ее в базу.

    2. Статический SQL – фиксированный (исполняемый), записанный заранее, а не генерируемый во время выполнения программы код SQL. Существует две версии статического SQL. Встроенный SQL – это код SQL, включенный в код исходного текста программы, написанной на другом языке. Другое использование статического SQL – модульный язык. В этом случае модули SQL скомпонованы с модулями кода других языков.

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

    8.2.Основные понятия языка SQL


    SQL отличается от языков программирования высокого уровня несколькими признаками. Во-первых, он относится к непроцедурным языкам. На языке типа COBOL или С можно записать для компьютера шаг за шагом все инструкции, необходимые для исполнения задания. SQL просто декларирует, что нужно делать, а исполнение возлагает на СУБД. Такой подход лежит в русле философии реляционных баз данных. СУБД в данном случае рассматривается как «черный ящик»: что делается внутри него – пользователя не касается. Его интересует только получение правильного ответа из базы данных и внесение в нее необходимых изменений. Ограничивая пользователя в вопросах исполнения операторов, SQL позволяет упростить сами операции и обеспечивает гибкость при реализации баз данных.

    Например, если нужно получить все данные о заказчиках в Праге, включенных в таблицу Clients, необходимо воспользоваться оператором SELECT для формирования следующего запроса:
    SELECT *

    FROM Clients

    WHERE city = ‘Прага’;
    Первая строка означает «выбери все столбцы», а предложение FROM указывает на таблицу, из которой они должны быть выбраны. Предложение WHERE представляет несколько больший интерес. С его помощью мы запрашиваем не просто конкретную строку, а все строки, которые удовлетворяют указанному условию (ассоциируются с Прагой). Не имеет никакого значения, сколько заказчиков из Праги записано в таблице – ни одного или пятьдесят тысяч. Все записи будут получены с помощью этого оператора. Если необходимо произвести поиск специальной строки таблицы, то это можно сделать, используя значение первичного ключа. (Это одна из причин, почему первичный ключ имеет такое важное значение). Приведенная выше операция называется «весь набор одновременно», в то время как большинство языков исполняет операции типа «один элемент одновременно».

    Другим важным преимуществом SQL является трехзначная логика (3VL). В большинстве языков используются булевы выражения, которые могут принимать только два значения: TRUE (истина) и FALSE (ложь). Язык SQL позволяет записывать в базу данных значение NULL (неопределенное значение). NULL является маркером, используемым для заполнения пространства в столбце, где по какой либо причине отсутствуют данные. (Значение может быть неприменимо, как, например, цвет волос в отношении птицы; может отсутствовать, как, например, цвет волос у лысого человека; и может быть неизвестным, как, например, цвет волос у человека в маске). Результатом применения арифметических операторов к NULL и другому значению, содержащему NULL, должно быть значение NULL. Когда значение NULL используется при сравнении, булево значение результата сравнения будет ни TRUE и ни FALSE, а UNKNOWN.

    Традиционно операторы SQL были разбиты на категории в соответствии с их функциями. Ниже приведены три категории, традиционно использующихся при обсуждении вопросов, связанных с базами данных:

    • Язык определения данных (DataDefinitionLanguageDDL) включает в себя все операторы, используемые для определения схем и объектов внутри схем. Наиболее важные операторы DDL применяются для создания различных объектов, например, операторы CREATE SCHEMA, CREATE TABLE, CREATE VIEW, CREATE ASSERTION и CREATE DOMAIN.

    • Язык манипулирования данными (DataManipulationLanguageDML) включает все операторы, которые используются для записи, изменения и поиска данных в таблицах. Основные операторы этого языка: SELECT, INSERT, UPDATE и DELETE. Оператор SELECT применяется для формирования запросов, и, возможно, является наиболее сложным из одиночных операторов SQL. Остальные операторы используются для манипулирования данными в рамках таблиц.

    • Операторы управления данными (DataControlStatements). Эта группа содержит операторы, которые используются для того, чтобы определить, что могут и чего не могут делать пользователи с объектами базы данных. Основными операторами этой категории являются GRANT и REVOKE (отмена).

    8.3.Пользователи, схемы и сеансы


    Одна из областей, в которой старый стандарт (1989) был крайне ограничен и в которой стандарт 92 предлагает много новшеств, это определение контекста для операторов SQL, т.е. определение пользователя, схемы и сеанса. В предыдущих стандартах эти вопросы полностью оставались в компетенции разработчиков.

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

    С точки зрения конкретного сеанса SQL кластер представляет собой «собственный мир». Он содержит все таблицы, к которым имеется доступ в данном сеансе, а все взаимосвязанные таблицы должны принадлежать тому же кластеру. Однако стандарт предоставляет возможность использовать для кластеров на уровне реализации перекрестные каталоги.

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

    8.4.Определение данных


    Здесь мы рассмотрим основные объекты данных и соответствующие операторы языка определения данных (DDL) в SQL. Основные операторы DDL:
    CREATE DOMAIN CREATE TABLE

    ALTER DOMAIN ALTER TABLE

    DROP DOMAIN DROP TABLE
    Существуют также операторы для создания и уничтожения представлений, которые будут описаны позже.

    8.4.1.Временные таблицы


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

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

    8.4.2.Домены


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

    • Отсутствует какая-либо поддержка SQL для «домена доменов». Домен SQL должен определяться в терминах одного из встроенных типов данных, определяемых системой, а не в терминах другого домена, определенного пользователем.

    • Язык SQL не осуществляет строгого контроля типов. Нет никакой проверки правильности типов. В частности, домены не «ограничивают сравнения» - единственное требование для сравнения состоит в том, чтобы сравниваемые операнды были одного и того же базового типа, т.е. оба были или числовыми, или символьными строками и т.п.

    • Язык SQL не поддерживает возможность определения пользователем операций, применяемых к данному домену.

    • В языке SQL не делается четкого разграничения между доменом как таковым (т.е. типом данных, определяемым пользователем) и представлением этого домена в терминах одного из определяемых системой типом данных.

    • В языке SQL нет никакой концепции подтипов, надтипов или наследования.

    • Наконец, в SQL нет поддержки самого фундаментального из всех доменов – домена истинности значений.


    Синтаксис создания домена:
    CREATE DOMAIN domain data-type

    [default-definition]

    [domain-constraint-definition-list]
    Здесь

    Domainназвание создаваемого домена с указанным типом данных (data-type). В языке SQL поддерживаются приведенные ниже скалярные типы данных:

    CHARACTER (n) INTEGER DATE

    BIT (n) SMALLINT TIME

    NUMERIC (p,q) FLOAT((p) TIMESTAMP

    DECIMAL(p,q) INTERVAL
    Необязательный элемент определения по умолчанию (default-definition) указывает значение по умолчанию, которое применяется к каждому столбцу, определенному на домене и не имеющему собственного определения значения по умолчанию, записанного в виде «DEFAULT default», где default, в свою очередь является литеральным значением, ссылкой к встроенной функции без аргументов (например, CURRENT_DATE) или NULL.

    Необязательный список определений ограничений доменов (domain-constraint-definition-list) представляет набор ограничений целостности, применяемых к каждому столбцу, основанному на этом домене. Заметим, что ограничения целостности доменов, по сути, не что иное, как перечисление значений, составляющих домен. Кроме того, в SQL допускается использование в ограничениях доменов логических выражений произвольной сложности.

    Пример определения домена:

    CREATE DOMAIN COLOR CHAR(6) DEFAULT ‘???’

    CONSTRAINT VALID_COLORS

    CHECK (VALUE IN

    (‘Red’, ‘Yellow’, ‘Blue’, ‘Green’, ‘???’));
    Тогда оператор CREATE TABLE для базовой таблицы Р (детали) может выглядеть следующим образом:
    CREATE TABLE P (…,COLOR COLOR,…);
    Если пользователь при вставке строки в таблицу Р не указывает значение столбца COLOR для этой строки, то по умолчанию в эту позицию помещается значение «???». А если пользователь укажет значение COLOR, это значение не будет принадлежать диапазону допустимых значений, то операция не будет выполнена и система сгенерирует сообщение, в котором упоминается ограничение VALID_COLORS.

    Существующий домен можно изменить в любое время с помощью оператора ALTER DOMAIN. В частности, этот оператор позволяет определить для такого домена новое значение по умолчанию (заменяя при этом старое значение) или удалить существующее. Он также позволяет ввести новое ограничение целостности для такого домена или удалить существующее ограничение. Оператор имеет следующий синтаксис:
    ALTER DOMAIN <имядомена>

    {SET DEFAULT <значение по умолчанию>}

    | {DROP DEFAULT}

    | {ADD <ограничивающее предложение>}

    | {DROP CONSTRAINT <имя ограничения>};
    Оператор ALTER DOMAIN изменяет определение домена при добавлении или отмене значений по умолчанию или ограничений. Выполнение оператора разрешено только владельцу схемы, в которую входит данный домен. Любые изменения, определенные в операторе, тотчас же влияют на все столбцы, базирующиеся на домене.

    Параметр SET DEFAULT определяет значение по умолчанию для всех столбцов домена, за исключением тех столбцов, для которых определены значения по умолчанию на уровне столбца в операторе CREATE TABLE.

    DROP DEFAULT отменяет принятое значение по умолчанию. Если такое значение отсутствует, возникает ошибка. ADD накладывает новое ограничение на домен. Это ограничение использует ключевое слово VALUE всякие раз, когда ссылается на проверяемое значение столбца.

    DROP CONSTRAINT снимает ограничение. Если при создании ограничению не было присвоено имя, то оно все равно будет иметь некое имя, присвоенное СУБД. Если имя неизвестно, его можно получить из схемы INFORMATION_SCHEMA. Стандарт не разрешает вносить несколько изменений с помощью одного и того же оператора ALTER DOMAIN. Другими словами, в одном и том же операторе нельзя отменять значения по умолчанию и добавлять ограничение.

    Пример. Нижеприведенный оператор ограничивает диапазон чисел, которые можно задать в домене (id_nums), значениями от 0 до 10000 включительно
    ALTER DOMAIN id_nums ADD range_check

    CHECK (VALUE BETWEEN 0 AND 10000);
    И, наконец, существующий домен можно уничтожить с помощью оператора DROP DOMAIN, имеющего следующий синтаксис:
    DROP DOMAIN domain option;
    Здесь опция option может принимать значения RESTRICT ИЛИ CASCADE. Общая идея такова: при выборе опции RESTRICT домен не будет уничтожен, если на него будут какие-либо ссылки. При выборе опции CASCADE операция будет выполнена и «каскадно» продолжена в различных направлениях (например, столбцы, которые ранее были определены на основе этого домена, будут рассматриваться как определенные непосредственно на основе типа данных этого домена), а именно:

    • Типы данных домена передаются типам данных столбца.

    • Если столбец не имеет значения по умолчанию, а для домена оно существует, то значение по умолчанию для домена становится значением по умолчанию для столбца.

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

      ALTER TABLE <имя таблицы> ADD C;
    1   ...   6   7   8   9   10   11   12   13   ...   24


    написать администратору сайта