lt; имя атрибута >IS NULL и < имя атрибута > IS NOT NULL
lt; имя атрибута >IS NULL и < имя атрибута > IS NOT NULL. Если в данном кортеже (в данной строке) указанный атрибут имеет неопределенное значение, то предикат IS NULL принимает значение «Истина» (TRUE), а предикат IS NOT NULL — «Ложь» (FALSE), в противном случае предикат IS NULL принимает значение «Ложь», а предикат IS NOT NULL принимает значение «Истина». Введение Null -значений вызвало необходимость модификации классической двузначной логики и превращения ее в трехзначную. Все логические операции, производимые с неопределенными значениями, подчиняются этой логике в соот ветствии с заданной таблицей истинности:
В условиях поиска могут быть использованы все рассмотренные ранее предикаты. Отложив на время знакомство с группировкой, рассмотрим детально первые три строки оператора SELECT: · SELECT — ключевое слово, которое сообщает СУБД, что эта команда — запрос. Все запросы начинаются этим словом с доследующим пробелом, За ним может следовать способ выборки — с удалением дубликатов (DISTINCT) или без удаления (ALL, подразумевается по умолчанию). Затем следует список перечисленных через запятую столбцов, которые выбираются запросом из таблиц, или символ '*' (звездочка) для выбора всей строки. Любые столбцы, не перечисленные здесь, не будут включены в результирующее отношение, соответствующее выполнению команды. Это, конечно, не значит, что они будут удалены или их информация будет стерта из таблиц, потому что запрос не воздействует на информацию в, таблицах — он только показывает данные. · FROM — ключевое слово, подобно SELECT, которое должно быть представлено в каждом запросе. Оно сопровождается пробелом и затем именами таблиц, используемых в качестве источника информации. В случае если указано более одного имени таблицы, неявно подразумевается, что над перечисленными таблицами осуществляется операция декартова произведения. Таблицам можно присвоить имена-псевдонимы, что бывает полезно для осуществления операции соединения таблицы с самой собою или для доступа из вложенного подзапроса к текущей записи внешнего запроса (вложенные подзапросы здесь не рассматриваются).
Все последующие разделы оператора SELECT являются необязательными. Самый простой запрос SELECT без необязательных частей соответствует просто декартову произведению. Например, выражение SELECT * FROM Rl,. R 2 соответствует декартову произведению таблиц R 1 и R 2. Выражение SELECT Rl.A. R2.B FROM Rl. R 2 соответствует проекции декартова произведения двух таблиц на два столбца А из таблицы R 1 и В из таблицы R 2, при этом дубликаты всех строк сохранены, в отличие от операции проектирования в реляционной алгебре, где при проектиро вании по умолчанию все дубликаты кортежей уничтожаются. · WHERE — ключевое слово, за которым следует предикат — условие, налагаемое на запись в таблице, которому она должна удовлетворять, чтобы попасть в выборку, аналогично операции селекции в реляционной алгебре. Рассмотрим базу данных, которая моделирует сдачу сессии в некотором учебном заведении. Пусть она состоит из трех отношений R 1, R 2, R3- Будем считать, что они представлены таблицами R1, R 2 и R 3 соответственно.
R1=- (ФИО, Дисциплина, Оценка); R 2 = (ФИО, Группа); R3=(Группы, Дисциплина >
· Вывести список всех групп (без повторений), где должны пройти экзамены. SELECT DISTINCT Группы FROM R3 Результат:
SELECT ФИО FROM R 1 WHERE Дисциплина = " Базы данных " AND Оценка = 5 Результат:
· Вывести список всех студентов, которым надо сдавать экзамены с указанием названий дисциплин, по которым должны проводиться эти экзамены. SELECT ФИО, Дисциплина FROM R2.R3 WHERE R2.Группа =R 2.Группа: Здесь часть WHERE задает условия соединения отношений R 2 и R 3, при отсутствии условий соединения в части WHERE результат будет эквивалентен расширенному декартову произведению, и в этом случае каждому студенту были бы приписаны все дисциплины из отношения R 3, а не те, которые должна сдавать его группа. Результат:
SELECT DISTINCT R1.ФИО FROM R1 a. R2 b: WHERE a. ФИО =- Ь.ФИО AND a. Дисциплина <> b. Дисциплина AND а.Оценка <= 2 AND b.Оценка <- 2; Здесь мы использовали псевдонимы для именования отношения R 1 а и Ь, так как для записи условий поиска нам необходимо работать сразу с двумя экземплярами данного отношения. Результат:
Наличие неопределенных (Null) значений повышает гибкость обработки информации, хранящейся в БД. В наших примерах мы можем предположить ситуацию, когда студент пришел на экзамен, но не сдавал его по некоторой причине, в этом случае оценка по некоторой дисциплине для данного студента имеет неопределенное значение. В данной ситуации можно поставить вопрос: «Найти студентов, пришедших на экзамен, но не сдававших его с указанием названия дисциплины». Оператор SELECT будет выглядеть следующим образом: SELECT ФИО. Дисциплина FROM R 1 WHERE Оценка IS NULL Результат:
|