Использование оператора EXISTS
Логические операторы EXIST и NOT EXIST возвращают значение true или false в зависимости от наличия записей, удовлетворяющих условию поиска. Как правило, оператор EXISTS используется с вложенными запросами. Для иллюстрации принципов его применения можно использовать довольно простой запрос:
SELECT TitleOfCourtesy, FirstName, LastName FROM Employees
WHERE EXISTS (SELECT * FROM Orders WHERE Freight > 1000)
ORDER BY LastName
В подзапросе выбираются строки, значение которых больше 1000. Так как подобные строки существуют, то оператору WHERE передается значение true и выражение SELECT выбирает соответствующие записи.
Можно изменить условие, накладываемое на поле Freight, и использовать вместо оператора EXISTS оператор NOT EXISTS.
SELECT TitleOfCourtesy, FirstName, LastName FROM Employees
WHERE NOT EXISTS (SELECT * FROM Orders WHERE Freight > 2000 )
ORDER BY LastName
Результат выполнения запроса будет аналогичен предыдущему. Нужно разобраться, почему так произошло. Оператор NOT EXISTS вернет значение true только в том случае, если ни одна запись не будет удовлетворять заданному условию. Так как ни одно судно не перевезло больше чем 2 тысячи тонн груза, то ни одна запись не будет выбрана.
Использование объединения UNION
Оператор UNION используется для объединения результатов двух и более запросов в единый набор полей и записей. Когда результаты запросов подвергаются объединению, их столбцы вывода должны быть совместимы. Это означает, что все запросы должны указывать одинаковое число столбцов в одном и том же порядке. И все совпадающие поля должны иметь один и тот же тип.
Это иллюстрируется простым запросом
SELECT CustomerID FROM Customers UNION SELECT CustomerID FROM Orders
В ходе выполнения запроса в результирующую таблицу были включены записи из двух таблиц.
Рассмотрим пример. Необходимо получить список студентов, имеющих оценку 2 по трем предметам. Для этого выполняется следующий запрос:
Select * from uspev As F where ocenca=2 And exists
( Select * from uspev as S where F. kod=S. kod and 3=(Select count (*) from uspev as T where T.ocenca=2 and S. kod=t. kod))
Чтобы получить список читателей – задолженников (задолженниками будем считать тех, кто не сдал книги по прошествии трех месяцев) нужно написать следующий запрос:
Select p1.*, p2.data_v, p3.* From reader p1, uchet p2, book p3 where
(p1.nomer=p2.nomer)And (p2.shifr=p3.shifr) And DATEDIFF(MM, p2.data_v, GetDate()>=3)
Здесь GetDate() – текущая дата в MS SQL Server, DATEDIFF – функция для работы с датами в MS SQL Server, которая вычисляет промежуток между двумя датами, в данном случае число полных месяцев между текущей датой и датой взятия книги.
Контрольные вопросы:
Назовите обязательные составляющие оператора SELECT.
Для всех ли данных в выражении ключевого слова WHERE обязательно нужно использовать кавычки?
К какому разделу SQL относится оператор SELECT?
Можно ли в выражении для ключевого слова WHERE задать несколько условий?
Допустимы ли кавычки для значений числовых полей?
Играет ли роль тип данных при использовании функции COUNT?
Чтобы группировать данные по столбцу, должен ли этот столбец быть указан в списке ключевого слова SELECT?
8. При использовании ключевого слова ORDER BY в операторе SELECT обязательно ли использовать ключевое слово GROUP BY?
Достарыңызбен бөлісу: |