Можно ли использовать DISTINCT с WHERE?
Конечно, это возможно, нет никаких ограничений, и вот пример такого запроса.
Выведите из таблицы AUTO автомобили марки LADA уникальных цветов.
Контрольные вопросы и задания для самостоятельного выполнения
1. Повторите материалы данного шага.
2. Выведите из таблицы AUTO цвета автомобилей, исключите повторения, напишите SQL-запрос.
3. Выведите из таблицы MAN имена людей, исключите повторения, напишите SQL-запрос.
День пятый
Шаг 21. Математика в запросах
Введение
Мы уже использовали математику в SQL-командах ранее: вспомните, в одном из примеров использования UPDATE мы добавляли год к возрасту человека из MAN.
Так вот, в запросах SQL мы можем использовать результаты математических вычислений, причем мы можем как выводить результаты математических вычислений в колонках выбора SELЕCT, так и использовать математические выражения при формировании условий отбора строк WHERE.
Теория и практика
Для создания математических выражений в языке SQL используются следующие операции:
+ сложение;
– вычитание;
/ деление;
* умножение.
А также знакомые нам со школы функции:
Sqrt – квадратный корень;
MOD – остаток от деления;
trunc – округление до целого;
sIN – синус;
cos – косинус
(на самом деле этих функций больше, мы рассматриваем основные).
Все математические операции выполняются только для числовых значений, числовых колонок с типами NUMBER или производными от NUMBER (INt, float) – более подробную информацию можно посмотреть в документации к СУБД. То есть мы можем использовать в математических выражениях значения соответствующих колонок при выводе на экран и в фильтре WHERE.
Запомним, что математические операции используются также в критериях отбора строк WHERE.
Посмотрим, как это делается.
Вывести из таблицы MAN имя, фамилию и возраст (FIRSTNAME, LASTNAME, YEAROLD) человека, разделенный на 10.
Рисунок 41. Запрос к MAN: результат математического вычисления
В колонке с псевдонимом y10 выводится результат выражения YEAROLD/10.
Вывести из таблицы MAN имя, фамилию и возраст человека (FIRSTNAME, LASTNAME, YEAROLD), умноженный на sIN (1), округлить до целого.
Рисунок 42. Запрос к MAN: результат вычисления sIN
Вывести из таблицы CITY записи (*), где квадратный корень от количества населения города больше 1000 (PEOPLES).
Рисунок 43. Запрос к CITY: квадратный корень больше 1000
Пример демонстрирует использование математического выражения sqrt(CITY.PEOPLES) при фильтрации строк в WHERE.
Вывести из таблицы CITY название города (CITYNAME), квадратный корень от количества населения (PEOPLES), где значение кода города (CITYCODE) делится нацело на 3.
Рисунок 44. Запрос к CITY с математическим выражением
Вывести из таблицы CITY название города (CITYNAME), код города, разделенный на 3 (CITYCODE), где значение населения (PEOPLES), разделенное на 100, не больше 1 000 000.
Рисунок 45. Запрос к CITY: математическое выражение WHERE и SELECTLISt
Важные замечания
При выполнении математических выражений иногда возникают ошибочные исключительные ситуации, например при делении некоторого значения на ноль: в этом случае запрос выдает некорректный результат или вообще не выполняется, но при этом некоторые среды разработки подавляют сообщения об ошибке.
Об этом следует помнить, когда вы пишете запросы, использующие математические выражения.
Вопросы учеников
Зачем использовать псевдонимы для колонок, которые рассчитываются как математические выражения?
Для удобного, понятного отображения названия колонки.
Где найти полный перечень математических функций, поддерживаемых СУБД?
В документации по вашей СУБД.
Контрольные вопросы и задания для самостоятельного выполнения
1. Вывести из таблицы MAN имя, фамилию и квадратный корень 10.