Шаг 12 - Выборка данных с помощью SELECT, часть 3

Осмыслили! Идем дальше! Вернемся еще раз к типу выбора столбцов в операторе, SELECT. Иногда, когда, например вы сталкиваетесь, с незнакомой БД, вам необходимо быстро рассмотреть таблицы. В таком случае вы примените, что-то в этом духе:

SQL> COL CITY FORMAT A18
SQL> SELECT * FROM OFFICES
     2/

Получаем следующее:

   OFFICE CITY               REGION                               MGR    TARGET     SALES
--------- ------------------ ------------------------------ --------- --------- ---------
       22 Запиндрищинск      Запад                                108       300   186,042
       11 Красный Мотоцикл   Восток                               106       575   692,637
       12 Чугуевск           Восток                               104       800   735,044
       13 Бубурино           Восток                               105       350   367,911
       21 Котрогайка         Запад                                108       725   835,915

Здесь '*' значит "выдать все строки"! Запросы такого типа применяются не часто, в основном как, я говорил выше, либо при получении отчетов. В некоторых БД, даже допускается такое:

SQL> SELECT *, (SALES-TARGET) FROM OFFICES
     2/

Но, у меня БД ответила так:

	
SELECT *, (SALES-TARGET) FROM OFFICES
        *
ошибка в строке 1:
ORA-00923: ключевое слово FROM не найдено там, где оно ожидалось 

Чего собственно и следовало ожидать! Да и сам запрос как-то малопонятен. Еще могу добавить, что оператор '*' так же применяется и в других случаях, например, по стандарту, по моему SQL91, как шаблон условия LIKE, но в Oracle такого, я не наблюдал! Так что, функция только одна, выдать все записи из заданной таблицы! Так же как правило, при выборе записей, часто используют уникальный ключ, для того, чтобы каждая запись была уникальна! Что это такое, расскажу, когда коснемся темы минимизации таблиц. Но иногда, возникает такая ситуация, что при выборе данных, появляются повторяющиеся значения.

Например: Вывести список идентификаторов менеджеров офисов.

SQL> SELECT MGR FROM OFFICES
  2  /

      MGR
---------
      108
      106
      104
      105
      108

Запись с номером 108 повторилась дважды! Так как Игорь Петров, из таблицы SALESREPS является менеджером по нашей легенде, сразу двух офисов. По этому запись и повторяется. Чтобы этого не происходило, нужно использовать оператор DISTINCT. Например, вот так:

SQL> SELECT DISTINCT MGR FROM OFFICES
     2/

      MGR
---------
      104
      105
      106
      108

Теперь результат, правильный, все ясно и понятно. Сразу предупреждаю, что DISTINCT является не производительным, оператором, по этому злоупотреблять им, особенно на больших, таблицах не рекомендую! Пока с этим все! Дальше пойдет, довольно, объемный для изложения материал, так что собиритесь, с мыслями!


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Летучий Сергей - 10.08.03