Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Staff No fName IName position




SL21 John White Manager

SL41 Julie Lee Assistant

Обратите внимание, что первая часть условия поиска, s.branchNo=b.branchNo, необходима для получения гарантий того, что для каждого работника будет анализироваться корректная строка данных об отделении компании. Если опустить это условие, то в результирующую таблицу запроса будут помещены сведения обо всех работниках компании, поскольку подзапрос SELECT * FROM Branch WHERE city='London' всегда будет возвращать не менее одной строки и проверка существования в каждом случае будет давать значение TRUE. В результате запрос будет иметь следующий вид:

SELECT staffNo, fName, IName, position FROM Staff WHERE true;

Этот оператор эквивалентен следующему:

SELECT staffNo, fName, IName, position FROM Staff;

Кроме того, данный запрос можно записать, используя методы соединения:

SELECT staffNo, fName, IName, position

FROM Staff s, Branch b

WHERE s.branchNo = b.branchNo AND city = 'London1;

5.3.9. Комбинирование результирующих таблиц

(операции UNION, INTERSECT и EXCEPT)

В языке SQL можно использовать обычные операции над множествами — объединение (union), пересечение (intersection) и разность (difference), — позволяющие комбинировать результаты выполнения двух и более запросов в единую результирующую таблицу.

Объединением двух таблиц А и В называется таблица, содержащая все строки, которые имеются в первой таблице (А), во второй таблице (В) или в обеих этих таблицах одновременно, • Пересечением, двух таблиц называется таблица, содержащая все строки, присутствующие в обеих исходных таблицах одновременно.

Разностью двух таблиц А и В называется таблица, содержащая все строки, которые присутствуют в таблице А, но отсутствуют в таблице В.

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

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

Bns я-s

а) Объединение б)Пересечение в)Разность

Рис. 5.2. Графическое представление операций над множествами

(объединение, пересечение и разность)

Три операции над множествами, предусмотренные стандартом ISO, носят название UNION, INTERSECT и EXCEPT. В каждом случае формат конструкции с операцией над множествами должен быть следующим:

л opera tor.[ALL] {CORRESPONDING [BY {columnl [,... ] }И

При указании конструкции CORRES POND ING BY операция над множествами выполняется для указанных столбцов. Если задано только ключевое слово CORRESPONDING, а конструкция 3Y отсутствует, операция над множествами выполняется для столбцов, которые являются общими для обеих таблиц. Если указано ключевое слово ALL, результирующая таблица может содержать повторяющиеся строки.

Одни диалекты языка SQL не поддерживают операций INTERSECT и EXCEPT, a в других вместо ключевого слова EXCEPT используется ключевое слово MINUS.

 

Пример 5.32. Использование операции UNION

Создайте список всех регионов, в которых либо находится отделение компании, либо располагаются сдаваемые в аренду объекты.

(SELECT city или {SELECT *

FROM Branch FROM Branch

WHERE city IS NOT NULL) WHERE city IS NOT NULL)

UNION UNION CORRESPONDING BY city

(SELECT city (SELECT *

FROM PropertyForRent FROM PropertyForRent

WHERE city IS NOT NULL); WHERE city IS NOT NULL);

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

Таблица 5.38. Результат выполнения запроса из примера 5.32

Пример 5.33. Использование операции INTERSECT

Создайте список всех городов, в которых располагаются и отделения компании, и сдаваемые в аренду объекты.

(SELECT city или (SELECT *

FROM Branch) FROM Branch)

INTERSECT INTERSECT CORRESPONDING BY city

(SELECT city (SELECT *

FROM PropertyForRent); FROM PropertyForRent};

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

Таблица 5.39. Результат выполнения запроса из примера 5.33

 

Этот запрос можно записать и без использования операции INTERSECT:

SELECT b.city или SELECT DISTINCT city

FROM Branch b, PropertyForRent p FROM Branch b

WHERE b.city = p.city; WHERE EXISTS(SELECT *

FROM PropertyForRent p

WHERE p.city = b.city);

Одним из самых существенных недостатков языка SQL является то, что он позволяет создавать запросы в нескольких эквивалентных формах.

I Пример 5.34. Использование операции EXCEPT

Создайте список всех городов, в которых имеется отделение компании, но нет сдаваемых в аренду объектов,

(SELECT city или (SELECT *

FROM Branch) FROM Branch)

EXCEPT EXCEPT CORRESPONDING BY city

(SELECT city (SELECT *

FROM PropertyForRent); FROM PropertyForRent);

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

Таблица 5.40. Результат выполнения запроса из примера 5.34

City

Bristol - Этот запрос можно записать и беи использования операции EXCEPT:

SELECT DISTINCT city или SELECT DISTINCT city

FROM Branch FROM Branch b

WHERE city NOT IN WHERE NOT EXISTS

(SELECT city (SELECT *

FROM PropertyForRent); FROM PropertyForRent p

WHERE p.city = b.city);

5.3.10. Изменение содержимого базы данных

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

• INSERT — предназначен для добавления данных в таблицу,

• UPDATE — предназначен,иля модификации уже помещенных в таблицу данных.

• DELETE — позволяет удалять из таблицы строки данных.

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...