1. Общие сведения об операторах реляционной алгебры.
1.1. Оператор объединения.
1.2. Использование предикатов IN, BETWEEN, LIKE, is NULL.
1.3. Вложенные (подчиненные) запросы.
1.4. Формирование запросов на SQL по формулам реляционной алгебры.
2. Задание к лабораторной работе.
3. Оформление отчета.
4. Контрольные вопросы.
Общие сведенья об операторах реляционной алгебры
Оператор объединения.
В SQL предусмотрена возможность выполнения операции реляционной алгебры "ОБЪЕДИНЕНИЕ" (UNION) над отношениями, являющимися результатами оператора SELECT. Естественно, эти отношения должны быть определены по одной схеме. Пример: получить все Интернет - ссылки, хранимые в базе данных publications. Эти ссылки хранятся в таблицах publishers и wwwsites. Для того чтобы получить их в одной таблице, необходимо построить следующие запрос:
SELECT publisher,url FROM publishers UNION SELECT site,url FROM wwwsites;
Использование предикатов IN, BETWEEN, LIKE, is NULL
При задании логического условия в предложении WHEREмогут быть использованы операторы IN, BETWEEN, LIKE, is NULL.
Операторы IN(равен любому из списка) и NOT IN(не равен ни одному из списка) используются для сравнения проверяемого значения поля с заданным списком. Этот список значений указывается в скобках справа от оператора IN.
Построенный с использованием INпредикат (условие) считается истинным, если значение поля, имя которого указано слева от IN, совпадает (подразумевается точное совпадение) с одним из значений, перечисленных в списке, указанном в скобках справа от IN.
Предикат, построенный с использованием NOT IN, считается истинным, если значение поля, имя которого указано слева от NOT IN, не совпадает ни с одним из значений, перечисленных в списке, указанном в скобках справа от NOT IN.
Например, получить из таблицы titles сведения о книгах, изданные в 2000, 2001 и 2002 годах.
SELECT *
FROM titles
WHERE yearpub IN (2000, 2001, 2002);
Получить сведения об изданиях, которые не издавались в 2000, 2001 и 2002 годах.
SELECT publisher FROM ((titles AS a INNER JOIN publishers AS b ON a.pub_id = b.pub_id) WHERE yearpub NOT IN (2000, 2001, 2002);
Оператор BETWEEN используется для проверки условия вхождения значения поля в заданный интервал, то есть вместо списка значений атрибута этот оператор задает границы его изменения.
Например, запрос типа: перечислить издательства, которые издали книги в количестве не менее 3 и не более 10 будет выглядеть как
SELECT publisher, COUNT(title) FROM ((titles AS a INNER JOIN publishers AS b ON a.pub_id = b.pub_id) GRROUP BY publisher HAVING COUNT(title) BETWEEN 3 AND 10;
Граничные значения, в данном случае значения 3 и 10, входят в множество значений, с которыми производится сравнение. Оператор BETWEENможет использоваться как для числовых, так и для символьных типов полей.
Оператор LIKEприменим только к символьным полям типа CHARили VARCHAR(см. л.р. № 1). Этот оператор просматривает строковые значения полей с целью определения, входит ли заданная в операторе LIKEподстрока (образец поиска) в символьную строку-значение проверяемого поля.
Для выборки строковых значений по заданному образцу подстроки можно применять шаблон искомого образца строки, использующий следующие символы:
· ? — любой один знак в данном месте.
· * — любое количество любых знаков после предшествующих ему символов.
· # — одна любая цифра.
Например, написать запрос, выбирающий из таблицы title сведения о книгах, в название которых входит слово «история».
SELECT *
FROM titles
WHERE title LIKE ‘*история*’;
Обращаем внимание на то, что рассмотренные выше операторы сравнения «=, <, >, <=, >=, <>» и операторы IN, BETWEEN и LIKE нельзя использовать для проверки содержимого поля на наличие в нем пустого значения NULL. Для этих целей предназначены специальные операторы is NULL (является пустым) и IS NOT NULL (является не пустым).
Например, получить список издателей (publisher), которые не имеют электронного адреса (поле url не заполнено).