355 500 произведений, 25 200 авторов.

Электронная библиотека книг » Максим Чалышев » Oracle SQL. 100 шагов от новичка до профессионала. 20 дней новых знаний и практики » Текст книги (страница 5)
Oracle SQL. 100 шагов от новичка до профессионала. 20 дней новых знаний и практики
  • Текст добавлен: 9 октября 2019, 22:30

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


Автор книги: Максим Чалышев



сообщить о нарушении

Текущая страница: 5 (всего у книги 5 страниц)

Шаг 20. DISTINCT, дубликаты значений

Введение

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

Теория и практика

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

Синтаксис


Примеры

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

Запрос без DISTINCT:



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

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

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

SELECT DISTINCT MARK FROM AUTO


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


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

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



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

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



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

Важные замечания

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

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

SELECT DISTINCT COLOR FROM AUTO

Вопросы учеников

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

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

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

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

Можно ли использовать 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.

2. Вывести из таблицы MAN имя, фамилию и возраст человека, умноженный на cos (5).

3. Вывести из таблицы CITY записи (*), где популяция делится без остатка на 10 000.

4. Вывести из таблицы CITY название города, квадратный корень от популяции, умноженный на 10, где значение кода города делится нацело на 3.

Продолжением данного шага является следующий шаг, посвященный таблице DUAL.

Шаг 22. Запрос к результату выражения и специальная таблица DUAL

Введение

В SQL ORACLE диалекта есть специальная таблица DUAL. Если в других СУБД существуют альтернативные варианты синтаксиса, то для SQL ORACLE необходимо использовать таблицу DUAL.

Теория и практика

Данная таблица выполняет следующие задачи:

• делает удобным вывод в запросе «результаты вычислений математического выражения»;

• помогает при вычислении функции, которая возвращает одно значение.

При этом для результата вычисления данных выражений нам не требуется участие колонок из каких-либо таблиц в нашей базе данных.

Разберем на примерах:

Вычислить значение математического выражения 1000* (123—11) /100 с помощью SELECT.



Рисунок 46. Вычисление выражения

Вычислить значение функции sIN (10) /100 с помощью SELECT.



Рисунок 47. Вычисление выражения, таблица DUAL

Вычислить значение текущей даты с помощью SELECT.


– 21.11.1999 11:22

Вычислить значение sIN (1) *cos (1) с помощью SELECT.



Рисунок 48. Вычисление выражения и таблица sIN (1) * cos (1)

Важные замечания

При обращении к таблице DUAL запрос возвращает всего одну строку, при попытке добавить запись в таблицу DUAL могут произойти непредсказуемые последствия, не рекомендую это делать.

Вопросы учеников

Вы говорили, что в других СУБД, например MS SQL, можно обойтись без таблицы DUAL?

Да в MS SQL, например, будет работать такой запрос: SELECT sIN (1), здесь нет FROM, ORACLE в этом случае более соответствует стандарту SQL ANSI 92.

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

1. Вычислить значение площади квадрата со стороной 5 с помощью SELECT и DUAL.

2. Вычислить значение площади круга с радиусом 7 помощью SELECT и DUAL.

3. Вычислить значение выражения 100*sIN (1) *cos (3) с помощью SELECT и DUAL.

Конец ознакомительного фрагмента.

Текст предоставлен ООО «ЛитРес».

Прочитайте эту книгу целиком, купив полную легальную версию на ЛитРес.

Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.


    Ваша оценка произведения:

Популярные книги за неделю