Чтение онлайн

на главную - закладки

Жанры

Понимание SQL

Грубер Мартин

Шрифт:

onum

amt

odate

cnum

snum

3002

1900.10

10/03/1990

2007

1004

3005

5160.45

10/03/1990

2003

1002

3009

1713.23

10/04/1990

2002

1003

3008

4723.00

10/05/1990

2006

1001

3011

9891.88

10/06/1990

2006

1001

Таблица 13.8: Использование агрегатной функции вместо ANY

СПЕЦИАЛЬНЫЙ ОПЕРАТОР ALL

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

Если мы хотим пересмотреть наш предыдущий пример чтобы вывести только тех заказчиков чьи оценки, фактически, выше чем у каждого заказчика в Париже, мы можем ввести следующее чтобы произвести вывод показанный в Таблтце 13.9:

SELECT *

FROM Customers

WHERE rating > ALL

(SELECT rating

FROM Customers

WHERE city=Rome ):

SQL Execution Log

SELECT * FROM Customers WHERE rating > ALL

(SELECT rating FROM Customers WHERE city='Rome');

cnum

cname

city

rating

snum

2004

Grass

Berlin

300

1002

2008

Cisneros

San Jose

300

1007

Таблица 13.9: Использование оператора ALL

Этот оператор проверяет значения оценки всех заказчиков в Риме. Затем он находит заказчиков с оценкой большей чем у любого из заказчиков в Риме. Самая высокая оценка в Риме - у Giovanni( 200). Следовательно, выбираются только значения выше этих 200.

Как и в случае с ANY, мы можем использовать EXISTS для производства альтернативной формулировки такого же запроса - (вывод показан в Таблице 13.10 ):

SELECT *

FROM Customers outer

WHERE NOT EXISTS

( SELECT *

FROM Customers inner

WHERE outer.rating <=inner.rating

AND inner.city=|Rome| );

SQL Execution Log

SELECT * FROM Customers outer WHERE NOT EXISTS

(SELECT * FROM Customers inner WHERE outer

rating=inner.rating AND inner.city='Rome');

cnum

cname

city

rating

snum

2004

Grass

Berlin

300

1002

2008

Cisneros

San Jose

300

1007

Таблица 13.10: Использование EXISTS в качестве альтернативы к ALL

РАВЕНСТВА И НЕРАВЕНСТВА

ALL используется в основном с неравенствами чем с равенствами, так как значение может быть "равным для всех" результатом подзапроса только если все результаты, фактически, идентичны. Посмотрите следующий запрос:

SELECT *

FROM Customers

WHERE rating=ALL

( SELECT rating

FROM Customers

WHERE city=" San Jose' );

Эта команда допустима, но, c этими данными, мы не получим никакого вывода. Только в единственом случае вывод будет выдан этим запросом - если все значения оценки в San Jose окажутся идентичными. В этом случае, можно сказать следующее :

SELECT *

FROM Customers

WHERE rating=

( SELECT DISTINCT rating

FROM Customers

WHERE city=" San Jose' );

Основное различие в том, что эта последняя команда должна потерпеть неудачу если подзапрос выведет много значений, в то время как вариант с ALL просто не даст никакого вывода. В общем, не самая удачная идея использовать запросы которые работают только в определенных ситуациях подобно этой. Так как ваша база данных будет постоянно меняться, это еудачный способ, чтобы узнать о ее содержании. Однако, ALL может более эффективно использоваться с неравенствами, то есть с оператором "< >". Но учтите что сказанное в SQL что - значение которое не равняется всем результатам подзапроса, - будет отличаться от того же но сказанного с учетом граматики Английского языка. Очевидно, если подзапрос возвращает много различных значений, как это обычно бывает, ни одно

отдельное значение не может быть равно им всем в обычном смысле. В SQL, выражение - < > ALL - в действительности соответствует " не равен любому " результату подзапроса. Другими словами, предикат верен, если данное значение не найдено среди результатов подзапроса. Следовательно, наш предыдущий пример противоположен по смыслу этому примеру (с выводом показанным в Таблице 13.11):

SELECT *

FROM Customers

WHERE rating < > ALL

( SELECT rating

FROM Customers

WHERE city=" San Jose' );

SQL Execution Log

SELECT * FROM Customers WHERE rating < > ALL

(SELECT rating FROM Customers WHERE city='San Jose');

cnum

cname

city

rating

snum

2001

Hoffman

London

100

1001

2006

Clemens

London

100

1001

2007

Pereira

Rome

100

1004

Таблица 13.11: Использование ALL с < >

Вышеупомянутый подзапрос выберает все оценки для города San Jose. Он выводит набор из двух значений: 200 (для Liu ) и 300 (для Cisneros).

атем, основной запрос, выбирает все строки, с оценкой не совпадающей ни с одной из них - другими словами все строки с оценкой 100. Вы можете сформулировать тот же самый запрос используя оператор NOT IN:

SELECT*

FROM Customers

WHERE rating NOT IN

( SELECT rating

Поделиться:
Популярные книги

Крысы (сборник)

Герберт Джеймс
Мастера остросюжетного романа
Фантастика:
ужасы и мистика
7.00
рейтинг книги
Крысы (сборник)

Тень Нерона

Алферова Марианна Владимировна
3. Сыщик
Фантастика:
детективная фантастика
6.25
рейтинг книги
Тень Нерона

Тень Инквизитора

Панов Вадим Юрьевич
8. Тайный Город
Фантастика:
боевая фантастика
9.32
рейтинг книги
Тень Инквизитора

Наномашины, внучок! Том 2

Новиков Николай Васильевич
2. Чего смотришь? Иди книгу читай
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наномашины, внучок! Том 2

Антология «Дракула»

Морган Крис
Фантастика:
ужасы и мистика
мистика
фэнтези
городское фэнтези
5.00
рейтинг книги
Антология «Дракула»

Чары индиго

Мид Райчел
3. Кровные узы
Фантастика:
ужасы и мистика
9.49
рейтинг книги
Чары индиго

Посольство

Уоллер Лесли
Детективы:
политические детективы
5.00
рейтинг книги
Посольство

Warhammer: Битвы в Мире Фэнтези. Омнибус. Том 2

Коллектив авторов
Warhammer Fantasy Battles
Фантастика:
фэнтези
5.00
рейтинг книги
Warhammer: Битвы в Мире Фэнтези. Омнибус. Том 2

Проданная Истинная. Месть по-драконьи

Белова Екатерина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Проданная Истинная. Месть по-драконьи

Под солнцем Сатаны. Дневник сельского священника. Новая история Мушетты. (сборник)

Бернанос Жорж
Проза:
классическая проза
5.00
рейтинг книги
Под солнцем Сатаны. Дневник сельского священника. Новая история Мушетты. (сборник)

Егерь. Вызов

Скиба Николай
3. Зверолов
Фантастика:
боевая фантастика
рпг
уся
фэнтези
попаданцы
6.00
рейтинг книги
Егерь. Вызов

Право на жизнь

Арно Сергей Игоревич
Фантастика:
ужасы и мистика
7.17
рейтинг книги
Право на жизнь

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI

Том 4. Повести и рассказы, статьи 1844-1854

Тургенев Иван Сергеевич
4. Собрание сочинений в двенадцати томах
Проза:
русская классическая проза
5.00
рейтинг книги
Том 4. Повести и рассказы, статьи 1844-1854