Читаем Oracle SQL. 100 шагов от новичка до профессионала. 20 дней новых знаний и практики полностью

<p>Контрольные вопросы и задания для самостоятельного выполнения</p>

1. Как можно заменить оператор BETWEEN и обойтись без него, чтобы запрос возвращал правильные данные?

2. Выберите города с населением от 40 000 до 2 000 000 человек, напишите SQL-запрос.

3. Выберите города с населением НЕ в интервале 40 000 до 2 000 000 человек, напишите SQL-запрос.

4. Выберите людей * с возрастом НЕ в интервале 25 до 28 лет, используйте NOT, напишите SQL-запрос.

5. Выберите машины с годом выпуска от 2007 до 2011, напишите SQL-запрос.

<p>Шаг 20. DISTINCT, дубликаты значений</p><p>Введение</p>

В определенных запросах SQL как неприятный побочный результат выводится множество одинаковых, повторяющихся записей. Иногда нам необходимо уйти от данных повторений, убрать дубли из результатов запроса.

<p>Теория и практика</p>

В SQL существует специальная команда DISTINCT, которая предназначена для выбора в запросе только уникальных значений, уникальных строк, то есть исключает из вывода повторения и дублирования строк.

Синтаксис

Примеры

Вывести из таблицы AUTO марки автомобилей (MARK), исключить повторения – дубли.

Запрос без DISTINCT:

Рисунок 37. Запрос: дубли марок

Есть дублирующиеся марки авто AUDI, LADA в результате вывода.

Используем DISTINCT:

SELECT DISTINCT MARK FROM AUTO

Дубли строк не выводятся.

Рисунок 38. Запрос: марки авто

Вывести из таблицы AUTO марки и цвета автомобилей (MARK, COLOR), исключить повторения.

Рисунок 39. Запрос: марки авто и цвета

Несколько синих AUDI, используем DISTINCT.

Рисунок 40. Запрос: марки, цвета авто, только уникальные записи

<p>Важные замечания</p>

Важно отметить, что дубли исключаются DISTINCT только из колонок, перечисленных в SELECT; других колонок DISTINCT не касается.

С помощью DISTINCT очень удобно просмотреть, какие вообще значения есть в заданной колонке, например автомобили каких цветов присутствуют в таблице AUTO:

SELECT DISTINCT COLOR FROM AUTO

<p>Вопросы учеников</p>

Есть ли еще какой-либо способ исключить дубли из запроса?

Да, подобный способ называется группировка записей, и мы изучим его позже.

Можно ли использовать DISTINCT с ROWNUM?

Да, но тогда оператор DISTINCT бесполезен, его использование потеряет смысл.

Можно ли использовать DISTINCT с WHERE?

Конечно, это возможно, нет никаких ограничений, и вот пример такого запроса.

Выведите из таблицы AUTO автомобили марки LADA уникальных цветов.

<p>Контрольные вопросы и задания для самостоятельного выполнения</p>

1. Повторите материалы данного шага.

2. Выведите из таблицы AUTO цвета автомобилей, исключите повторения, напишите SQL-запрос.

3. Выведите из таблицы MAN имена людей, исключите повторения, напишите SQL-запрос.

<p>День пятый</p><p>Шаг 21. Математика в запросах</p><p>Введение</p>

Мы уже использовали математику в SQL-командах ранее: вспомните, в одном из примеров использования UPDATE мы добавляли год к возрасту человека из MAN.

Так вот, в запросах SQL мы можем использовать результаты математических вычислений, причем мы можем как выводить результаты математических вычислений в колонках выбора SELЕCT, так и использовать математические выражения при формировании условий отбора строк WHERE.

<p>Теория и практика</p>

Для создания математических выражений в языке 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.

Перейти на страницу:

Похожие книги

1С: Управление небольшой фирмой 8.2 с нуля. 100 уроков для начинающих
1С: Управление небольшой фирмой 8.2 с нуля. 100 уроков для начинающих

Книга предоставляет полное описание приемов и методов работы с программой "1С:Управление небольшой фирмой 8.2". Показано, как автоматизировать управленческий учет всех основных операций, а также автоматизировать процессы организационного характера (маркетинг, построение кадровой политики и др.). Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, формировать разнообразные отчеты, выводить данные на печать. Материал подан в виде тематических уроков, в которых рассмотрены все основные аспекты деятельности современного предприятия. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов. Все приведенные в книге примеры и рекомендации основаны на реальных фактах и имеют практическое подтверждение.

Алексей Анатольевич Гладкий

Экономика / Программное обеспечение / Прочая компьютерная литература / Прочая справочная литература / Книги по IT / Словари и Энциклопедии