Понимание SQL (Книга - Мартин Грубер), страница 9

2017-06-07СтудИзба

Описание файла

Файл "Понимание SQL" внутри архива находится в папке "Книга - Мартин Грубер". Документ из архива "Книга - Мартин Грубер", который расположен в категории "". Всё это находится в предмете "базы данных" из 11 семестр (3 семестр магистратуры), которые можно найти в файловом архиве МАИ. Не смотря на прямую связь этого архива с МАИ, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "базы данных" в общих файлах.

Онлайн просмотр документа "Понимание SQL"

Текст 9 страницы из документа "Понимание SQL"

Символ '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 ИСПОЛЬЗОВАНИЕ ПРЕДЛОЖЕНИЯ UNION.) Как вы можете видеть, одиночный неизменный комментарий для каждой строки таблицы может быть очень полезен, но имеет ограничения. Иногда изящнее и полезнее, произвести один комментарий для всего вывода в целом, или производить свой собственный комментарии для каждой строки.

Различные программы использующие 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 |

| 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

ORDER BY cnum;

Так как поле cnum не было выбранным полем, ORDER 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.13 |

| Rifkin 0.15 |

| |

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

 

Рисунок 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

ORDER BY COUNTОМ (DISTINCT onum)DESC;

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

 

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

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

 

РЕЗЮМЕ

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

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

Это дает вам возможность помечать или объяснять ваш вывод различными способами.

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

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

 

РАБОТА С SQL

1. Предположим что каждый продавец имеет 12% комиссионных. Напишите запрос к таблице Порядков который мог бы вывести номер порядка, номер продавца, и сумму комиссионных продавца для этого порядка.

2. Напишите запрос к таблице Заказчиков который мог бы найти высшую оценку в каждом городе. Вывод должен быть в такой форме:

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

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

4. Напишите запрос который бы выводил общие порядки на каждый день и помещал результаты в нисходящем порядке.

(См. Приложение A для ответов. )

8. ЗАПРАШИВАНИЕ МНОГОЧИСЛЕННЫХ ТАБЛИЦ ТАКЖЕ КАК ОДНОЙ

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

 

ОБЪЕДИНЕНИЕ ТАБЛИЦ

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5173
Авторов
на СтудИзбе
437
Средний доход
с одного платного файла
Обучение Подробнее