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

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

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

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

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

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

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

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

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

СТРОКИ  И ВЫРАЖЕНИЯ

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

СКАЛЯРНОЕ ВЫРАЖЕНИЕ С ПОМОЩЬЮ  ВЫБРАННЫХ ПОЛЕЙ

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

Например, вы можете представить комиссионные вашего продавца в процентном отношении, а не как  десятеричные числа.

Для этого достаточно:

SELECT snum, sname, city, comm * 100

FROM Salespeople;

Вывод для этого  запроса показан на Рисунке 7.1.

СТОЛБЦЫ ВЫВОДА

Последний столбец  предшествующего примера не помечен (т.е. без наименования), потому что  это столбец вывода. Столбцы вывода это столбцы данных, созданные  в запросе способом, иным, нежели просто извлечение их из таблицы. Вы создаёте их всякий раз, когда используете агрегатные функции,

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

|       |

| SELECT snum, sname, city, comm * 100|

| FROM  Salespeople;        |

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

|   snum      sname       city        |

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

|   1001      Peel       London      12.000000  |

|   1002      Serres     San Jose    13.000000  |

|   1004      Motika     London      11.000000  |

|   1007      Rifkin     Barcelona   15.000000 |

|   1003      Axelrod    New York    10.000000  |

|       |

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

          Рисунок 7.1 Помещение выражения  в вашем запросе

константы или  выражения в предложении SELECT-запроса. Так как имя столбца - один из атрибутов  таблицы, столбцы, которые приходят не из таблиц, не имеют никаких имён. Другими словами, непомеченные столбцы вывода могут обрабатываться так же, как и столбцы, извлечённые из таблиц, почти во всех ситуациях.

ПОМЕЩЕНИЕ ТЕКСТА В ВАШЕМ  ВЫВОДЕ ЗАПРОСА

Символ 'A', когда  ничего не значит сам по себе, является константой, такой, например, как число 1.

Вы можете вставлять константы в предложение SELECT-запроса, включая и текст. Однако символьные константы, в отличие от числовых констант, не могут использоваться в выражениях. Вы можете иметь выражение 1 + 2 в вашем предложении SELECT, но вы не можете использовать выражение типа 'A' + 'B'; это приемлемо, только если мы имеем в виду, что 'A' и 'B' это просто буквы, а не переменные и не символы.

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

Вы можете усовершенствовать  предыдущий пример, представив комиссионные как проценты со знаком процентов (%). Это даст вам возможность помещать в вывод символы и комментарии, как в следующем примере (вывод показан на Рисунке 7.2):

            SELECT snum, sname, city, ' % ', comm * 100

               FROM Salespeople; 

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

          |                                               |

          | SELECT snum, sname, city, '%' comm * 100      |

          | FROM  Salespeople;                            |

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

          |   snum   sname      city                      |

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

          |   1001   Peel      London       %   12.000000 |

          |   1002   Serres    San Jose     %   13.000000 |

          |   1004   Motika    London       %   11.000000 |

          |   1007   Rifkin    Barcelona    %   15.000000 |

          |   1003   Axelrod   New York     %   10.000000 |

          |                                               |

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

                Рисунок 7.2 Вставка символов в  вывод

Обратите внимание, что пробел перед процентом вставляется  как часть строки. Эта же особенность  может использоваться, чтобы маркировать  вывод вместе с вставляемыми комментариями.

Вы должны помнить, что этот же самый комментарий будет напечатан в каждой строке вывода, а не просто один раз для всей таблицы. Предположим, что вы генерируете вывод для отчёта, который указывал бы число заказов, получаемых в течение каждого дня. Вы можете промаркировать ваш вывод (см. Рисунок 7.3), сформировав запрос следующим образом:

           SELECT ' For ', odate, ', there are ',

              COUNT (DISTINCT onum), 'orders.'

              FROM Orders

              GROUP BY odate;

Грамматической  некорректности вывода на 5 октября невозможно избежать, не создав запроса, ещё более сложного, чем этот. (Вы должны будете использовать два запроса с UNION, который

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

          |                                                 |

          | SELECT 'For', odate, ', ' there are ' ,         |

          | COUNT (DISTINCT onum), ' orders '               |

          | FROM Orders                                     |

          | GROUP BY odate;                                 |

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

          |           odate                                 |

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

          |   For   10/03/1990 , there are       5  orders. |

          |   For   10/04/1990 , there are       2  orders. |

          |   For   10/05/1990 , there are       1  orders. |

          |   For   10/06/1990 , there are       2  orders. |

          |                                                 |

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

        Рисунок 7.3: Комбинация текста, значений  поля, и агрегатов

мы будем рассматривать  в Главе 14.) Как видите, одиночный  неизменный комментарий для каждой строки таблицы может быть очень  полезен, но имеет ограничения. Иногда изящнее и полезнее создать один комментарий для всего вывода в целом или создавать свой собственный комментарии для каждой строки.

Различные программы, использующие SQL, часто обеспечивают специальные средства типа генератора отчетов (например Report Writer), которые  разработаны, чтобы форматировать и совершенствовать вывод. Вложенный SQL может также использовать возможности того языка, в который он вложен. SQL сам по себе интересен прежде всего при операциях с данными. Вывод, по существу, это информация; и программа, использующая SQL, может часто использовать эту информацию и помещать её в более привлекательную форму. Это, однако, вне сферы самого SQL.

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

Как мы подчеркивали, таблицы это неупорядоченные  наборы данных, и данные, которые  выводятся из них, не обязательно появляются в какой-то определённой последовательности. SQL использует команду ORDER BY, чтобы дать возможность упорядочить вывод. Эта команда упорядочивает вывод запроса согласно значениям в том или ином количестве выбранных столбцов. Несколько столбцов упорядочиваются один относительно другого так же, как с GROUP BY, и вы можете определять возрастание (ASC) или убывание (DESC) для каждого столбца. По умолчанию установлено возрастание. Давайте рассмотрим нашу таблицу заказа, приводимую в заказ с помощью номера заказчика (обратите внимание на значения в cnum столбце):

               SELECT *

                  FROM Orders

                  ORDER BY cnum DESC;

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

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

          |                                                 |

          | SELECT *                                        |

          | FROM  Orders                                    |

          | ORDER BY cnum DESC;                             |

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

          |   onum       amt      odate      cnum     snum  |

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

          |   3001       18.69  10/03/1990   2008     1007  |

          |   3006     1098.16  10/03/1990   2008     1007  |

          |   3002     1900.10  10/03/1990   2007     1004  |

          |   3008     4723.00  10/05/1990   2006     1001  |

          |   3011     9891.88  10/06/1990   2006     1001  |

          |   3007       75.75  10/04/1990   2004     1002  |

          |   3010     1309.95  10/06/1990   2004     1002  |

          |   3005     5160.45  10/03/1990   2003     1002  |

          |   3009     1713.23  10/04/1990   2002     1003  |

          |   3003      767.19  10/03/1990   2001     1001  |

          |                                                 |

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

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

УПОРЯДОЧИВАНИЕ  С ПОМОЩЬЮ НЕСКОЛЬКИХ СТОЛБЦОВ

Мы можем также  упорядочивать таблицу с помощью  другого столбца, например, с помощью  поля amt, внутри упорядочивания поля cnum. (вывод показан в Рисунке 7.5):

            SELECT *

               FROM Orders

               ORDER BY cnum DESC, amt DESC; 

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

          |                                                 |

          | SELECT *                                        |

          | FROM  Orders                                    |

          | ORDER BY cnum DESC, amt DESC;                   |

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

          |   onum       amt      odate      cnum     snum  |

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

          |  3006     1098.16  10/03/1990   2008     1007  |

          |   3001       18.69  10/03/1990   2008     1007  |

          |   3002     1900.10  10/03/1990   2007     1004  |

          |   3011     9891.88  10/06/1990   2006     1001  |

          |   3008     4723.00  10/05/1990   2006     1001  |

          |   3010     1309.95  10/06/1990   2004     1002  |

          |   3007       75.75  10/04/1990   2004     1002  |

          |   3005     5160.45  10/03/1990   2003     1002  |

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