Формирование выводов запросов

Автор: Пользователь скрыл имя, 16 Декабря 2011 в 07:17, реферат

Описание работы

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

Работа содержит 1 файл

ФОРМИРОВАНИЕ ВЫВОДА ЗАПРОСОВ.doc

— 205.50 Кб (Скачать)

          |   3009     1713.23  10/04/1990   2002     1003  |

          |   3003      767.19  10/03/1990   2001     1001  |

          |                                                 |

            ================================================ 

        Рисунок 7.5: Упорядочивание вывода с помощью нескольких полей

Вы можете использовать ORDER BY таким способом одновременно с  любым числом столбцов. Обратите внимание, что во всех случаях столбцы, которые  упорядочиваются, должны быть указаны  в выборе SELECT. Это требование ANSI, которое в большинстве случаев, но не всегда, предписано системе. Следующая команда, например, будет запрещена:

              SELECT cname, city

                 FROM Customers

                 GROUP BY cnum;

Так как поле cnum не было выбранным полем, GROUP BY не сможет найти его, чтобы использовать для упорядочивания вывода. Даже если ваша система позволяет это, смысл упорядочивания не будет понятен из вывода, так что включение (в предложение SELECT) всех столбцов, используемых в предложении ORDER BY, в принципе желательно.

УПОРЯДОЧИВАНИЕ  АГРЕГАТНЫХ ГРУПП

ORDER BY может, кроме  того, использоваться с GROUP BY для  упорядочивания групп. При этом ORDER BY всегда идёт последним.

Вот пример из предыдущей главы с добавлением предложения ORDER BY. Перед группированием вывода порядок групп был произвольным; и мы теперь заставим группы размещаться в последовательности:

                  SELECT snum, odate, MAX (amt)

                     FROM Orders

                     GROUP BY snum, odate

                     ORDER BY snum;

Вывод показан  на Рисунке 7.6.

               ===============  SQL Execution Log ==============

              |                                                 |

              | SELECT snum, odate, MAX (amt)                   |

              | FROM  Orders                                    |

              | GROUP BY snum, odate                            |

              | ORDER BY snum ;                                 |

              | =============================================== |

              |    snum       odate        amt                  |

              |   -----     ----------  --------                |

              |    1001     10/06/1990    767.19                |

              |    1001     10/05/1990   4723.00                |

             |    1001     10/05/1990   9891.88                |

              |    1002     10/06/1990   5160.45                |

              |    1002     10/04/1990     75.75                |

              |    1002     10/03/1990   1309.95                |

              |    1003     10/04/1990   1713.23                |

              |    1004     10/03/1990   1900.10                |

              |    1007     10/03/1990   1098.16                |

              |                                                |

                ================================================ 

                  Рисунок 7.6 Упорядочивание с помощью  группы

Так как мы не указывали на возрастание или  убывание порядка, возрастание используется по умолчанию.

УПОРЯДОЧИВАНИЕ  ВЫВОДА ПО НОМЕРУ СТОЛБЦА

Вместо имён столбцов вы можете использовать их порядковые номера для указания поля, используемого  при упорядочивании вывода. Эти номера могут ссылаться не на порядок  столбцов в таблице, а на их порядок  в выводе. Другими словами, поле, упомянутое в предложении SELECT первым, для ORDER BY - поле 1, независимо от того, каким по порядку оно стоит в таблице. Например, вы можете использовать следующую команду, чтобы увидеть определенные поля таблицы Продавцов упорядоченными по убыванию к наименьшему значению комиссионных (вывод показан на Рисунке 7.7):

              SELECT sname, comm

                 FROM Salespeople

                 ORDER BY 2 DESC; 

               ===============  SQL Execution Log ============

              |                                               |

              | (SELECT sname, comm                           |

              | FROM Salespeople                              |

              | ORDER BY 2 DESC;                              |

              | ============================================= |

              |    sname       comm                           |

              |   --------   --------                         |

              |   Peel           0.17                         |

              |   Serres         0.15                         |

              |   Rifkin         0.13                         |

              |                                               |

               =============================================== 

               Рисунок 7.7 Упорядочивание, использующее номера

Одна из основных целей этого свойства ORDER BY - дать вам возможность использовать GROUP BY со столбцами вывода, так же как  и со столбцами таблицы. Столбцы, производимые агрегатной функцией, константы  или выражения в предложении SELECT запроса абсолютно пригодны для использования с GROUP BY, если  на них ссылаются с помощью номера.

Например, давайте  сосчитаем заказы каждого из наших  продавцов и выведем результаты в убывающем порядке, как показано в Рисунке 7.8:

            SELECT snum, COUNT (DISTINCT onum)

               FROM Orders

               GROUP BY snum

               ORDER BY 2 DESC; 

               ===============  SQL Execution Log ==============

              |                                                 |

              | SELECT snum, odate, MAX (amt)                   |

              | FROM Orders                                     |

              | GROUP BY snum                                   |

              | ORDER BY 2 DESC;                                |

              | =============================================== |

              |    snum                                         |

              |   -----     ----------                          |

              |    1001             3                           |

              |    1002             3                           |

              |    1007             2                           |

              |    1003             1                           |

              |    1004             1                           |

              |                                                 |

                ================================================ 

              Рисунок 7.8 Упорядочивание с помощью столбца вывода

В этом случае вы должны использовать номер столбца, так как столбец вывода не имеет имени; и вы не должны использовать саму агрегатную функцию. Строго говоря, по правилам ANSI SQL, следующее не будет работать, хотя некоторые системы и пренебрегают этим требованием:

        SELECT snum, COUNT (DISTINCT onum)

           FROM Orders

           GROUP BY snum

           GROUP BY COUNTОМ (DISTINCT onum) DESC;

Это будет отклонено  большинством систем!

УПОРЯДОЧИВАНИЕ  С ПОМОЩЬЮ NULL

Если имеются  пустые значения (NULL) в поле, которое  вы используете для упорядочивания вашего вывода, они могут или следовать за, или предшествовать каждому другому значению в поле. Это возможность, которую ANSI оставил для отдельных программ. Программа использует ту или иную форму.

РЕЗЮМЕ

В этой главе  вы изучили, как заставить ваши запросы делать больше, чем просто выводить значения полей или объединять функциональные данные таблиц. Вы можете использовать поля в выражениях: например, вы можете умножить числовое поле на 10 или даже умножить его на другое числовое поле. Кроме того, вы можете помещать константы, включая и символы, в ваш вывод, что позволяет помещать текст непосредственно в запрос и получать его в выводе вместе с данными таблицы. Это дает возможность помечать или объяснять ваш вывод различными способами.

Вы также изучили, как упорядочивать ваш вывод. Даже если таблица сама по себе остаётся неупорядоченной, предложение ORDER BY даёт вам возможность управлять порядком вывода строк данного запроса. Вывод запроса может быть в порядке возрастания или убывания, и столбцы могут быть вложенными один внутрь другого.

Понятие выводимых  столбцов объяснялось в этой главе. Вы теперь знаете, что выводимые  столбцы можно использовать, чтобы  упорядочить вывод запроса, но эти  столбцы - без имени и, следовательно, должны определяться их порядковым номером в предложении ORDER BY.

Теперь, когда  вы увидели, что можно делать с  выводом запроса, основанного на одиночной таблице, настало время  перейти к возможностям улучшенного  запроса и узнать, как сделать  запрос любого числа таблиц в одной  команде, определив связи между ними

РАБОТА  СО SQL

  1. Предположим, что каждый продавец имеет 12% комиссионных. Напишите запрос
  2. к таблице Заказов, который выведет номер заказа, номер продавца
  3. и сумму комиссионных продавца по этому заказу.
  4. Напишите запрос к таблице Заказчиков, который мог бы найти высший рейтинг
  5. в каждом городе. Вывод должен быть в такой форме:

           For the city (city), the highest rating is: (rating).

  1. Напишите запрос, который выводил бы список заказчиков в нисходящем порядке.
  2. Вывод поля оценки/рейтинга (rating) должен сопровождаться именем заказчика и его номером.
  3. Напишите запрос, который выводил бы общие заказы на каждый день и помещал
  4. результаты в нисходящем порядке.

Приложение A

ОТВЕТЫ  ДЛЯ УПРАЖНЕНИЙ

Глава 1

1. cnum

2. rating

3. Другим названием строки является "запись". Другим названием столбца

   является "поле".

4. Потому что  строки, по определению, находятся  без какого либо 

   определённого  упорядочивания.

Глава 2

1. Символ (или  текст) и число

2. Нет

3. Язык Манипулирования  Данными (ЯЗЫК DML)

4. Это слово  в SQL имеет специальное учебное  значение

Глава 3

1. SELECT onum, amt, odate

     FROM Orders;

2. SELECT *

      FROM Customers

      WHERE snum = 1001;

3 SELECT city, sname, snum, comm

     FROM Salespeople;

4. SELECT rating, cname

      FROM Customers

      WHERE city = 'SanJose';

5. SELECT DISTINCT snum

      FROM Orders;

Глава 4

1. SELECT * FROM Orders WHERE amt > 1000;

2. SELECT sname, city

      FROM Salespeople

      WHERE city = 'London'

        AND comm > .10;

Информация о работе Формирование выводов запросов