Шаг 10 - Выборка данных с помощью SELECT

Продолжаем путь по тернистой дорожке SQL! Давайте немного углубимся в оператор SELECT. Итак данный оператор как вы уже надеюсь поняли, является ключевым при выполнении запросов к таблицам БД. Оператор SELECT обязательно должен содержать, "список возвращаемых столбцов", то есть:

SELECT FILED1, FIELD2, FIELD3 ... FROM ...

Слова FILED1, FIELD2, FIELD3 и есть не что иное как "список возвращаемых столбцов"! И набор данных, которые вернет ваш запрос SELECT, будет, следовать именно по порядку "списка возвращаемых столбцов"! Это необходимо, четко представлять! Так же "список возвращаемых столбцов", может содержать вычисляемые столбцы и константы.

SELECT FILED1, (FIELD2 - FIELD3) "CONST" ... FROM ...

В дальнейшем вы все это увидите!

Предложение FROM содержит "список спецификаторов таблиц", а именно имена таблиц, из которых производится запрос! Такие таблицы называются "исходными таблицами запроса". Так как результаты запроса берутся именно из них! Теперь давайте попробуем практически проверить все сказанное. Запускайте SQL Plus и введите запрос: Вывести список имен, офисов и дат приема на работу всех служащих.

SQL> SELECT NAME, REP_OFFICE, HIRE_DATE FROM SALESREPS
  2  /

NAME                           REP_OFFICE HIRE_DAT                                                  
------------------------------ ---------- --------                                                  
Вася Пупкин                            13 12.02.88                                                  
Маша Распутина                         11 12.10.89                                                  
Филип Киркоров                         21 10.12.86                                                  
Света Разина                           11 14.06.88                                                  
Наташа Королева                        12 19.05.87                                                  
Игорь Николаев                         12 20.10.86                                                  
Крис Кельми                            13 13.05.90                                                  
Игорь Петров                           21 12.10.89                                                  
Дима Маликов                           12 01.03.87                                                  
Маша Сидорова                          22 14.11.88                                                  
Максим Галкин                          12 12.10.89                                                  

11 строк выбрано.

Запрос вернул три столбца и одиннадцать строк, замечательно! Я использовал таблицы из учебной БД, она несколько суховата, я только заменил в ней англоязычные слова на более "родные", названия, просто, чтобы было веселее и быстрее усваивалось! Ваша задача правильно понимать, постановку задачи запроса и его, результат! Что собственно и является конечной целью, нашего мероприятия! :-) Теперь давайте выполним еще один запрос, с такой формулировкой: Как зовут, а так же каковы плановый и фактический объем продаж, служащего с идентификатором 107?

SQL> SELECT NAME, QUOTA, SALES FROM SALESREPS
  2  WHERE EMPL_NUM = 107
  3  /

NAME                               QUOTA     SALES                                                  
------------------------------ --------- ---------                                                  
Маша Сидорова                        300   186,042                                                  

Получаем таблицу, из трех столбцов и одной строки, хотя здесь и одна строка это тем не менее таблица результата запроса! Некоторые запросы вообще возвращают единственное значение, например: Каково среднее значение фактических объемов продаж по всем служащим компании?

SQL> SELECT AVG(SALES) FROM SALESREPS
   2 WHERE EMPL_NUM = 107
   3 /


AVG(SALES)                                                                                          
----------                                                                                          
   186,042                                                                                          

Получаем одно значение (!), но и это тоже таблица, состоящая из одной строки и одного столбца! И, наконец, любой запрос может вернуть ноль строк!

Например: Вывести список имен и дат приема на работу, всех служащих фактический объем продаж которых превышает 50 000?

SQL> SELECT NAME, HIRE_DATE FROM SALESREPS
  2  WHERE SALES > 50000
  3  /

строки не выбраны

NAME, HIRE_DATE
----  ---------

Даже в этом случае результат является таблицей, как это не кажется парадоксальным. Он содержит два (!) столбца и ноль (!!!) строк! Неожиданно не так ли? Но тем не менее утверждение считается верным!!! Идем дальше, в таблицах как вы помните есть значения NULL, это значит, что значение пока не определено, не ДА ни НЕТ, а так сяк! :) Давайте сделаем запрос такого типа: Вывести список служащих, с их плановыми объемами продаж и идентификаторами менеджеров.

SQL> SELECT NAME, MANAGER, QUOTA FROM SALESREPS
  2  / 

NAME                             MANAGER     QUOTA                                                  
------------------------------ --------- ---------                                                  
Вася Пупкин                          104       350                                                  
Маша Распутина                       106       300                                                  
Филип Киркоров                       108       350                                                  
Света Разина                         NULL      275                                                  
Наташа Королева                      106       200                                                  
Игорь Николаев                       104       300                                                  
Крис Кельми                          101       NULL                                                     
Игорь Петров                         106       350                                                  
Дима Маликов                         104       275                                                  
Маша Сидорова                        108       300                                                  
Максим Галкин                        108       400                                                  

11 строк выбрано.

Что же получилось у Светы Разиной, нет менеджера! (Да и зачем он ей собственно!!!) А у Криса Кельми нет планового обьема продаж (Все отпелся голубок!!!) Поля содержат значения NULL, но в запрос, тем не менее, они попадают! Что и требовалось доказать! Вот пока все, но с оператором SELECT, еще нужно разбираться! :)


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