Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
62
Добавлен:
01.05.2014
Размер:
669.7 Кб
Скачать

4.8. Деление

Деление операция выполняется над двумя таблицами R1, R2, которые имеют разную структуру и некоторые одинаковые атрибуты. В результате операции образуется новая таблица, структура которой получается исключением из множества атрибутов таблицы R1 множество атрибутов таблицы R2. Результирующие строки не должны содержать дубликаты.

Пример. Рассмотрим таблицу R1 «Товар» (табл.4.18) и таблицу R2 «Агент» (табл.4.19). Предположим, что у нас есть такой запрос: перечислить торговых агентов с указанием проданных товаров. Результатом этого запроса будет таблица R3 (табл.4.20).

Таблица 4.18 R1

товара

1035

2241

2249

2518

Таблица 4.19 R2

агента

товара

10

2241

23

2518

23

1035

39

2518

37

2518

10

2249

23

2249

23

2241

Таблица 4.20 R3

агента

23

Рассмотренные выше операции в той или иной мере реализуются в средствах СУБД, которые обеспечивают обработку реляционных таблиц. К таким средствам относятся средства запросов и другие языковые конструкции.

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

Упражнения и задачи

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

5. Запросы к бд

5.1. Простые запросы

Простой запрос - запрос, который обращается только к одной таблице базы данных. Ниже приведены примеры простых запросов.

Работник

рабо- Фамилия Недельная Спец-ть № Менеджер

тника зарплата

1235 И. Петров 12.50 электрик 1311

1412 К. Иванов 13.75 штукатур 1520

2920 Р. Смирнов 10.00 кровельщик 2920

1520 Г. Сидоров 11.75 штукатур 1412

1311 Х. Васильев 15.50 электрик 1311

Работа

рабо- № здания Дата_начала Число_дней

тника

1235 312 10.10 5

2920 460 05.10 18

1235 435 17.10 22

3231 111 10.10 8

1412 435 15.10 15

1311 460 23.10 24

Здание

здания Адрес Тип

312 ул. Вязов, 123 офис

435 ул. Кленов, 456 склад

515 ул. Березовая, 12 магазин

210 ул. Нахимова, 4 склад

Рис. 5.1. База данных строительной компании «Премьер»

Запрос:Вывести фамилии штукатуров?

SELECT Фамилия

FROM Работник

WHERE Специальность = 'Штукатур'

Результат:

Фамилия

К. Иванов

Г. Сидоров

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

Select. Фраза SELECT перечисляет столбцы, которые должны войти в результирующую таблицу. В данном примере результирующая таблица состоит из одного столбца (Фамилия), но в общем случае она может содержать несколько столбцов; она также может содержать вычисленные значения или константы. Если результирующая таблица должна содержать более одного столбца, то все нужные столбцы перечисляются после команды SELECT через запятую. Например, фразаSELECT № работника, Фамилия выдает в результате таблицу, состоящую из столбцов «№ работника» и «Фамилия».

From. Фраза FROM задает одну или более таблиц, к которым обращается запрос. Все столбцы, перечисленные во фразах SELECT и WHERE, должны существовать в одной из таблиц, перечисленных в команде FROM.

Where. Фраза WHERE содержит условие, на основании которого выбираются строки таблицы (таблиц). В данном примере условие состоит в том, что столбецСпециальность должен содержать константу ‘Штукатур’, заключенную в апострофы. Фраза WHERE - наиболее изменчивая команда SQL; она может содержать множество разнообразных условий.

Приведенный выше запрос SQL обрабатывается системой в следующем порядке: FROM, WHERE, SELECT. В данном примере из каждой такой строки выбирается Фамилия,и все выбранные значения выводятся в качестве результатов запроса.

Запрос:Вывести все данные о зданиях офисов.

SELECT *

FROM Здание

WHERE тип = 'Склад'

Результат:

Здание

зданияАдресТип

435 ул. Кленов 456 склад

210 ул. Нахимова 4 склад

Звездочка (*) в команде SELECT означает «строка целиком».

Запрос:Вывести недельную зарплату каждого электрика.

SELECT Фамилия,'Недельная зарплата = ', 40* Недельная зарплата

FROM Работник

WHERE Специальность = 'Электрик'

ORDER BY Фамилия

Результат:

Фамилия

М. Петров Недельная зарплата = 500.00

Х. Васильев Недельная зарплата = 620.00

Этот запрос иллюстрирует употребление символьных константи вычислений в команде SELECT. Внутри команды SELECT можно производить вычисления, в которых используются числовые столбцы и числовые константы, а также стандартные арифметические операторы (+,-,*, /), сгруппированные по мере необходимости с помощью скобок. Команда ORDER BY сортирует результат запроса в возрастающем алфавитно-числовом порядке по указанному столбцу. Если вы хотите упорядочить результаты по убыванию, то к команде нужно добавить DESC. Фраза ORDER BY можетсортировать результаты по нескольким столбцам, по одним –в порядке возрастания, по другим – в порядке убывания. Первым указывается столбец первичного ключа сортировки.

Запрос:Вывести фамилии работников, у которых почасовая ставка от 10 до 12 рублей.

SELECT *

FROM Работник

WHERE Недельная зарплата > = 10 AND Недельная зарплата < = 12

Результат:

рабо- Фамилия Недельная Специальность

тниказарплата

2920 Р. Смирнов 10.00 кровельщик

520 Г. Сидоров 11.75 штукатур

Этот запрос иллюстрирует некоторые дополнительные возможности команды WHERE: операторы сравнения и булеву операцию AND (И). Для сравнения столбцов с другими столбцами или с константами могут использоваться шесть операторов сравнения(=,<> (не равно),<, >, <=, >=). Для отрицания условий могут использоватьсябулевы операцииAND(И), OR(ИЛИ), NOT(НЕТ). Для группировки условий могут использоваться скобки.

Для формулировки этого запроса также можно было использовать оператор BETWEEN (между):

SELECT *

FROM Работник

WHERE Недельная зарплата BETWEEN 10 AND 12

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

Запрос:Вывести фамилии штукатуров, кровельщиков.

SELECT *

FROM Работник

WHERE Специальность IN ('штукатур', 'кровельщик')

Результат:

рабо- Фамилия Недельная Специальность

тника зарплата

1412 К. Иванов 13.75 штукатур

2920 Р. Смирнов 10.00 кровельщик

1520 Г. Сидоров 11.75 штукатур

Этот запрос поясняет использование оператора сравнения IN (В). Условие WHERE считается истинным, если тип специальности строки расположен внутри множества, указанного в скобках, то есть если тип специальности – штукатур, кровельщик

Предположим, что мы не можем точно вспомнить написание специальности: «электрик» или «электронщик» или еще как-то. Символы шаблона, которые замещают неопределенные строки символов, облегчают поиск неточного написания в запросе.

Запрос:Вывести фамилии работников, чей тип специальности начинается с «элек».

SELECT *

FROM Работник

WHERE Специальность LIKE ('элек%')

Результат:

рабо- Фамилия Недельная Специальность

тника зарплата

1235 И. Петров 12.50 электрик

1311 Х. Васильев 15.50 электрик

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

Соседние файлы в папке Базы данных1