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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|