Файл: Практика - Элементы языка SQL.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 03.04.2021

Просмотров: 409

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

        FROM B 

Реляционный  оператор  переименования  RENAME  выражается  при  помощи  ключевого 
слова  AS  в  списке  отбираемых  полей  оператора  SELECT.  Таким  образом,  язык  SQL 
является реляционно полным. 

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

Оператор соединения 

Реляционная алгебра: 

 

Оператор SQL: 

SELECT A.

Поле

1, A.

Поле

2, …, B.

Поле

1, B.

Поле

2, … 

    FROM A, B 
    WHERE c; 

или 

SELECT A.

Поле

1, A.

Поле

2, …, B.

Поле

1, B.

Поле

2, … 

    FROM A CROSS JOIN B 
    WHERE c; 

Оператор пересечения 

Реляционная алгебра: 

 

Оператор SQL: 

SELECT * 
    FROM A 
    INTERSECT 
    SELECT * 
        FROM B; 

Оператор деления 

Реляционная алгебра: 

 

Оператор SQL: 

SELECT DISTINCT A.X 
  FROM A 
  WHERE NOT EXIST 
    (SELECT * 
        FROM B 
        WHERE NOT EXIST 


background image

          (SELECT * 
              FROM A A1 
              WHERE 
                  A1.X = A.X AND 
                  A1.Y = B.Y)); 

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

Пусть  отношение  A  содержит  данные  о  поставках  деталей,  отношение  B  содержит 
список  всех  деталей,  которые  могут  поставляться.  Атрибут  X  является  номером 
поставщика, атрибут Y является номером детали. 

Разделить  отношение  A  на  отношение  B  означает  в  данном  примере  "отобрать  номера 
поставщиков, которые поставляют 

все 

детали". 

Преобразуем текст выражения: 

"Отобрать номера поставщиков, которые поставляют 

все 

детали" эквивалентно 

"Отобрать  те  номера  поставщиков  из  таблицы  A,  для  которых 

не  существует 

непоставляемых деталей в таблице B" эквивалентно 

"Отобрать  те  номера  поставщиков  из  таблицы  A,  для  которых 

не  существует 

тех 

номеров  деталей  из  таблицы  B,  которые 

не  поставляются 

этим  поставщиком" 

эквивалентно 

"Отобрать  те  номера  поставщиков  из  таблицы  A,  для  которых 

не  существует 

тех 

номеров  деталей  из  таблицы  B,  для  которых 

не  существует 

записей  о  поставках  в 

таблице A для этого поставщика и этой детали". 

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

Выводы 

Фактически стандартным языком доступа к базам данных в настоящее время стал язык 
SQL (Structured Query Language). 

Язык  SQL  оперирует  терминами,  несколько  отличающимися  от  терминов  реляционной 
теории,  например,  вместо  "отношений"  используются  "таблицы",  вместо  "кортежей"  - 
"строки", вместо "атрибутов" - "колонки" или "столбцы". 

Стандарт  языка  SQL,  хотя  и  основан  на  реляционной  теории,  но  во  многих  местах 
отходит он нее. 


background image

Основу  языка  SQL  составляют  операторы,  условно  разбитые  не  несколько  групп  по 
выполняемым функциям: 

 

Операторы  DDL  (Data  Definition  Language)  -  операторы  определения  объектов  базы 

данных. 

 

Операторы DML (Data Manipulation Language) - операторы манипулирования данными. 

 

Операторы защиты и управления данными, и др. 

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

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

оптимизатор

который, анализируя различные планы выполнения запроса, выбирает наилучший из 
них.