Смекни!
smekni.com

Методические указания по курсам «Теория информационных систем» и«Базы данных» Разделы «Реляционная алгебра» и«Язык sql» (стр. 3 из 6)

Для решения этой задачи выполняем:

1. Из отношения Выпуск продукции делаем выборку дата выпуска больше последней даты прошлого квартала. Результат ограничения помещаем во временную таблицу_1:

Таблица_1:=Выпуск продукции WHERE дата выпуска>'30/06/2005'

2. Затем над той же исходной таблицей выполняем ограничение дата выпуска не больше последней даты прошлого квартала и заносим результат во временную таблицу_2:

Таблица_2:=Выпуск продукции WHERE дата выпуска<='30/06/2005'

3. Разность отношений 1 и 2 даст искомые сведения.

Таблица_1 – Таблица_2

Замечание: Один и тот же запрос можно сформулировать несколькими способами. В приведенном ниже запросе используется оператор выборки по дате:

Выпуск продукции WHERE дата выпуска > '30/06/2005'

AND дата выпуска <= '30/09/2005'

Пример №4.

Список студентов факультета содержит для каждого студента ФИО., Дату рождения, Шифр группы и Признак наличия стипендии (да, нет).

Список (фамилия студента, группа, дата рождения, стипендия)

Необходимо сформировать список студентов заданной группы, получающих стипендию.

Для этого:

1. Создаем вспомогательное отношение с атрибутами Шифр группы и Признак наличия стипендии.

Стипендия (группа, стипендия)

2. Заполняем один кортеж этого отношения, поместив в него шифр заданной группы и отметку о получении стипендии (да).

группа стипендия
8109 да

3. Деление исходного списка на вспомогательное отношение создаст искомый список с атрибутами: ФИО и Дата рождения.

Вот другая формулировка того же запроса:

Сделаем θ - выборку из отношения Список. Найдем все кортежи, которые удовлетворяют двум условия: шифр группы совпадает с заданным и признак наличия стипендии = 'да'.

Возьмем проекцию полученного отношения по атрибутам ФИО и Дата рождения.

Список WHERE группа = 8109 AND стипендия = 'да' [ФИО, дата рождения]

Пример №5.

Информация о поставщиках, деталях и поставках содержится в трех отношения.

Отношение Поставщики (S) содержит номер поставщика, его имя, город и статус

S (S#, SNAME, CITY, STATUS)

Отношение Детали (P) содержит информацию о коде детали, наименовании, весе, цвете и месте хранения.

P (P#, PNAME,WEIGHT, COLOR, CITY)

Отношение Поставка (SP) содержит сведения о номере поставщика, коде детали и количестве.

SP (S#, P#, QTY)

Необходимо получить имена поставщиков, которые не поставляют деталь с кодом Р2.

Рассмотрим пошаговое решение этого запроса:

1. Возьмем проекцию отношения S по атрибуту S#. Получим отношение Т1 с одним атрибутом:

T1 := S[S#]

2. Из отношения SP выберем кортежи, в которых код детали равен Р2. Получим отношение Т2 с той же самой структурой, что и исходное отношение SP:

T2 := SP WHERE P# = 'P2'

3. Возьмем проекцию отношения Т2 по атрибуту S#. Получим отношение Т3 с одним атрибутом:

T3 := T2 [S#]

4. Разность отношений Т1 и Т3 даст номера тех поставщиков, которые не поставляют деталь с кодом Р2.

T4 := T1 - T1

Операция естественного соединения по атрибуту S# позволяет сформировать отношение Т5 с такой же структурой, что и отношение S, но кортежи этого отношения будут содержать информацию лишь о тех поставщиках, которые не поставляют деталь Р2:

T5 := T4 JOIN S

5. Выполним проекцию отношения Т5 по атрибуту SNAME. Получим искомое отношение, содержащее имена поставщиков:

T6 := T5 [SNAME]

Выразим данный запрос в виде одной формулы.

( ( S [S#] - ( SP WHERE P# = 'P2' ) [S#] ) JOIN S ) [SNAME]

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

Принципиальное различие между ними следующее: алгебра представляет набор операторов, с помощью которых из определенных отношений можно построить необходимое отношение; в то время как исчисление представляет собой просто систему обозначений для определения необходимого отношения в терминах данных отношений. Пользователь в терминах реляционного исчисления лишь устанавливает определенные характеристики необходимого отношения, оставляя системе решать, что соединять, проецировать и т.д., чтобы получить требуемый результат. Таким образом, формулировка запроса в терминах исчисления носит описательный характер, а алгебраическая формулировка – предписывающий.

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

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

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

Заметим, что крайне редко алгебра или исчисление принимаются в качестве полной основы какого-либо языка БД. Обычно язык основывается на некоторой смеси алгебраических и логических конструкций. Тем не менее, знание алгебраических и логических основ языков баз данных часто бывает полезно на практике.

Созданы языки манипулирования данными, позволяющие реализовать все операции реляционной алгебры и практически любые их сочетания. Среди них наиболее распространены SQL (Structured Query Language – структуризованный язык запросов) и QBE (Quere-By-Example – запросы по образцу). Оба относятся к языкам очень высокого уровня, с помощью которых пользователь указывает, какие данные необходимо получить, не уточняя процедуру их получения.

Часть 2. SQL- структуризованный язык запросов

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

Язык SQL (Structured Query Language - структуризованный язык запросов) ориентирован на операции с данными, представленными в виде логически взаимосвязанных совокупностей таблиц. Особенность предложений этого языка состоит в том, что они ориентированы в большей степени на конечный результат обработки данных, чем на процедуру этой обработки. SQL сам определяет, где находятся данные, какие индексы и даже наиболее эффективные последовательности операций следует использовать для их получения: не надо указывать эти детали в запросе к базе данных.

SQL был разработан начале 70-х годов прошлого века в отделениях фирмы IBM. И уже к 80-ым годам стал фактическим стандартом для профессиональных реляционных СУБД. К настоящему времени он используется в таких системах управления реляционными базами данных, как Oracle, INGRES, Informix, Sybase, SQLbase, Microsoft SQL Server, DB2 (СУБД самой IBM), SQL/DC, Paradox, Access, FoxPro, dBase, Approach, MySQL, PosgreSQL и многими другими. Уже более 140 продуктов имеют в своем составе SQL-интерфейс. Можно с уверенностью сказать, что если вы собираетесь в ближайшем будущем использовать реляционные базы данных, то вам придется работать с SQL.

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

◦ операторы определения данных (определение баз данных, а также определение и уничтожение таблиц и индексов);

◦ запросы на выбор данных;

◦ предложения модификации данных (добавление, удаление и изменение данных);

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

◦ упорядочение строк и (или) столбцов при выводе содержимого;

◦ агрегатирование данных: группирование данных и применение к этим группам таких операций, как среднее, сумма, максимум, минимум, число элементов и т.п.

◦ и др.

Data Definition Language

Язык определения данных (Data Definition Language или DDL) включает в себя все операторы, используемые для определения объектов реляционной базы данных, прежде всего это операторы CREATE DATABASE, DROP DATABASE, CREATE TABLE, ALTER TABLE, DROP TABLE., CREATE INDEX и DROP INDEX.

CREATE DATABASE

CREATE DATABASE