Осмыслили! Идем дальше! Вернемся еще раз к типу выбора столбцов в операторе, 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 является не производительным, оператором, по этому злоупотреблять им, особенно на больших, таблицах не рекомендую! Пока с этим все! Дальше пойдет, довольно, объемный для изложения материал, так что собиритесь, с мыслями!