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