Главная » Просмотр файлов » alan_beaulieu-learning_sql-ru

alan_beaulieu-learning_sql-ru (865932), страница 46

Файл №865932 alan_beaulieu-learning_sql-ru (Учебник по SQL) 46 страницаalan_beaulieu-learning_sql-ru (865932) страница 462022-01-31СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 46)

ERCдиаграмма примера базы данныхbranchbranch_id:smallint unsignedname:varchar(20)address:varchar(30)city:varchar(20)state:varchar(2)zip:varchar(12)product_typeproduct_type_cd:varchar(10)dept_id:smallint unsignedname:varchar(20)employeeemp_id:smallint unsignedname:varchar(50)fname:varchar(20)lname:varchar(20)start_date:dateend_date:datesuperior_emp_id:smallint unsigned (FK)dept_id:smallint unsigned (FK)title: varchar(20)assigned_branch_id:smallint unsigned (FK)productproduct_cd:varchar(10)name:varchar(50)product_type_cd:varchar(10) (FK)date_offered:datedate_retired:datedepartmentaccountaccount_id:integer unsignedproduct_cd:varchar(10) (FK)cust_id:integer unsigned (FK)open_date:dateclose_date:datelast_activity_date:datestatus:varchar(10)open_branch_id:smallint unsigned (FK)open_emp_id:smallint unsigned (FK)avail_balance:float(10,2)pending_balance:float(10,2)transactiontxn_id: integer unsignedtxn_date:datetimeaccount_id:integer unsigned (FK)txn_type_cd:varchar(10)amount:double(10,2)teller_emp_id:smallint unsigned (FK)execution_branch_id:smallint unsigned (FK)funds_avail_date:datetimecustomercust_id:integer unsignedfed_id:varchar(12)cust_type_cd:char(2)address:varchar(30)city:varchar(20)state:varchar(20)postal_code:varchar(10)officerofficer_id:smallint unsignedcust_id:integer unsigned (FK)fname:varchar(30)lname:varchar(30)title:varchar(20)start_date:dateend_date:dateРис.

A.1. ERдиаграммаbusinesscust_id:integer unsigned (FK)name:varchar(40)state_id:varchar(10)incorp_date:dateindividualcust_id:integer unsigned (FK)fname:varchar(30)lname:varchar(30)birth_date:dateMySQLрасширения языка SQLПоскольку для всех примеров в данной книге используется серверMySQL, я подумал, что для читателей, планирующих продолжать работать с MySQL, будет полезным включить приложение, посвященноеMySQLрасширениям языка SQL. Это приложение рассматривает некоторые MySQLрасширения выражений select, insert, update и delete,очень полезные в определенных ситуациях.Расширения выражения SelectРеализация выражения select в MySQL включает два дополнительныхблока, обсуждаемых в следующих разделах.Блок limitВ некоторых ситуациях нас не интересуют все строки, возвращаемыезапросом.

Например, можно создать запрос, выбирающий всех операционистов банка и все номера счетов, открытых каждым из них. Еслицель запроса – выявить трех лучших операционистов для вручениянаграды от банка, необязательно знать, кто будет четвертым, пятыми т. д. Для разрешения подобных ситуаций выражение select MySQLвключает блок limit, позволяющий ограничить число возвращаемыхзапросом строк.Чтобы продемонстрировать использование блока limit, начнем с построения запроса, показывающего количество счетов, открытых каждым операционистом банка:mysql> SELECT open_emp_id, COUNT(*) how_many> FROM account> GROUP BY open_emp_id;+++260Приложение B| open_emp_id | how_many |+++|1 |8 ||10 |7 ||13 |3 ||16 |6 |+++4 rows in set (0.31 sec)Результат показал, что счета открывали четверо разных сотрудников.Если требуется ограничить результирующий набор только тремя записями, можно добавить блок limit.

Он определяет, что должны бытьвозвращены только три записи:mysql> SELECT open_emp_id, COUNT(*) how_many> FROM account> GROUP BY open_emp_id> LIMIT 3;+++| open_emp_id | how_many |+++|1 |8 ||10 |7 ||13 |3 |+++3 rows in set (0.06 sec)Теперь благодаря блоку limit (четвертая строка запроса) результирующий набор включает только три строки. Четвертый операционист(служащий с ID 16) удален из результирующего набора.Сочетание блока limit с блоком order byПредыдущий запрос возвращает три записи, но есть небольшая проблема: запрос не описывает, какие три записи из четырех нас интересуют.

Если требуется выбрать конкретные три записи, например трехоперационистов, открывших больше всего счетов, придется использовать блок limit вместе с блоком order by:mysql> SELECT open_emp_id, COUNT(*) how_many> FROM account> GROUP BY open_emp_id> ORDER BY how_many DESC> LIMIT 3;+++| open_emp_id | how_many |+++|1 |8 ||10 |7 ||16 |6 |+++3 rows in set (0.03 sec)MySQLCрасширения языка SQL261Разница между этим и предыдущим запросами в том, что теперь блокlimit применяется к упорядоченному набору.

В итоге в конечном результирующем наборе имеем трех сотрудников, открывших наибольшее число счетов. Если требуется не произвольная выборка записей,обычно блок limit используется в паре с блоком order by.Блок limit применяется после всех фильтров, группировок и расстановок, поэтому он никогда не изменит результат выраженияselect, только ограничит число возвращаемых им записей.Необязательный второй параметр блока limitДопустим, теперь вместо поиска трех лучших операционистов поставлена задача выбрать всех, кроме двух лучших (вместо награждениялучших исполнителей банк пошлет несколько самых непроизводительных операционистов на тренинг по повышению самооценки). Дляподобных ситуаций блок limit предоставляет необязательный второйпараметр. Если используются оба параметра, первый указывает, с какой строки добавлять записи в конечный результирующий набор,а второй – сколько строк включить.

Обозначая записи порядковыминомерами, помните, что в MySQL первой записью является запись подномером 0. Следовательно, если стоит задача найти третьего лучшегоработника, можно сделать следующее:mysql> SELECT open_emp_id, COUNT(*) how_many> FROM account> GROUP BY open_emp_id> ORDER BY how_many DESC> LIMIT 2, 1;+++| open_emp_id | how_many |+++|16 |6 |+++1 row in set (0.00 sec)В этом примере нулевая и первая записи отбрасываются; включаютсязаписи, начиная со второй. Поскольку второй параметр блока limit равен 1, получаем только одну запись.Если требуется начать со второй позиции и включить все оставшиесязаписи, можно сделать второй аргумент блока limit достаточно большим, чтобы все оставшиеся записи гарантированно вошли в результирующий набор.

Если неизвестно, сколько операционистов открывалиновые счета, для выбора всех работников, кроме двух лучших, можнобыло бы сделать примерно следующее:mysql>>>>SELECT open_emp_id, COUNT(*) how_manyFROM accountGROUP BY open_emp_idORDER BY how_many DESC262Приложение B> LIMIT 2, 999999999;+++| open_emp_id | how_many |+++|16 |6 ||13 |3 |+++2 rows in set (0.00 sec)В этом варианте запроса отбрасываются нулевая и первая записи, а в результат включаются все записи вплоть до 999 999 999, начиная со второй (в данном случае таких записей всего две, но лучше немного переусердствовать, чем потерять нужные записи, недооценив их количество).Ранжирующие запросыЗапросы, включающие блок limit в сочетании с блоком order by, можноназвать ранжирующими запросами (ranking queries), потому что онипозволяют ранжировать данные.

Я уже продемонстрировал примерранжирования банковских сотрудников по числу открытых счетов.Но ранжирующие запросы используются для решения многих прикладных задач, таких как поиск:• Пяти лучших продавцов 2005 года• Третьего по числу круговых пробежек игрока в истории бейсбола• 98 бестселлеров всех времен и народов, кроме Библии и цитатникаМао• Двух самых непопулярных видов мороженогоУже было рассмотрено, как найти трех лучших операционистов, третьего лучшего и всех, кроме двух лучших.

Если я хочу сделать чтотоаналогичное для четвертого примера (например, найти худших сотрудников), требуется просто изменить порядок сортировки на обратный, так чтобы результаты располагались, начиная с наименьшегочисла открытых счетов и до наибольшего:mysql> SELECT open_emp_id, COUNT(*) how_many> FROM account> GROUP BY open_emp_id> ORDER BY how_many ASC> LIMIT 2;+++| open_emp_id | how_many |+++|13 |3 ||16 |6 |+++2 rows in set (0.24 sec)За счет простого изменения порядка сортировки (с ORDER BY how_manyDESC на ORDER BY how_many ASC) теперь запрос возвращает двух наихудшихоперационистов. Таким образом, с помощью блока с возрастающимMySQLCрасширения языка SQL263или убывающим порядком сортировки можно создавать ранжирующие запросы для решения большинства типовых прикладных задач.Блок into outfileЕсли требуется записать результат запроса в файл, можно выделитьего, скопировать в буфер обмена и вставить в свой любимый редактор.Однако если результирующий набор запроса достаточно велик или если запрос выполняется из сценария, необходим способ записывать результаты в файл без участия пользователя.

Для помощи в таких ситуациях MySQL включает блок into outfile (в выходной файл), в которомможно задать имя файла для записи результатов. Вот пример записирезультатов запроса в каталог c:\temp:mysql> SELECT emp_id, fname, lname, start_date> INTO OUTFILE 'C:\\TEMP\\emp_list.txt'> FROM employee;Query OK, 18 rows affected (0.20 sec)Как говорилось в главе 7, обратный слэш используется для экранирования символов в строке. Поэтому в Windows для задания пути потребуется ставить по два обратных слэша подряд.Результаты запроса не выводятся на экран, а записываются в файлemp_list.txt и выглядят так:1234...161718MichaelSmith20010622SusanBarker20020912RobertTyler20000209SusanHawthorne20020424TheresaMarkham20010315BethFowler20020629RickTulman20021212Формат по умолчанию использует символ табуляции ('\t') междустолбцами и символ новой строки ('\n') после каждой записи.

Еслитребуется дополнительное форматирование данных, можно включитьв блок into outfile несколько подблоков. Например, если надо представить данные в формате, называемом форматом с разделителем «|»(pipedelimited format), то в подблоке fields (поля) можно в качествесимволаразделителя столбцов задать символ '|':mysql> SELECT emp_id, fname, lname, start_date> INTO OUTFILE 'C:\\TEMP\\emp_list_delim.txt'> FIELDS TERMINATED BY '|'> FROM employee;Query OK, 18 rows affected (0.02 sec)MySQL не позволяет перезаписывать существующий файл с помощью into outfile, поэтому если один и тот же запрос выпол264Приложение Bняется больше одного раза, перед каждым выполнением следуетудалить имеющийся файл.Содержимое файла emp_list_delim.txt выглядит так:1|Michael|Smith|200106222|Susan|Barker|200209123|Robert|Tyler|200002094|Susan|Hawthorne|20020424...16|Theresa|Markham|2001031517|Beth|Fowler|2002062918|Rick|Tulman|20021212Кроме формата с разделителями «|» можно форматировать данные запятыми (формат с разделителямизапятыми, commadelimited format).

В этом случае следует задать fields terminated by ','. Однако еслизаписываемые в файл данные включают строки, применение запятыхв качестве разделителей полей может вызвать проблемы. Запятыевстречаются в строках намного чаще, чем символ «|». Рассмотрим следующий запрос, записывающий число и две строки, разделенные запятыми, в файл comma1.txt:mysql> SELECT data.num, data.str1, data.str2> INTO OUTFILE 'C:\\TEMP\\comma1.txt'> FIELDS TERMINATED BY ','> FROM> (SELECT 1 num, 'This string has no commas' str1,>'This string, however, has two commas' str2) data;Query OK, 1 row affected (0.04 sec)Поскольку третий столбец выходного файла (str2) – строка, содержащая запятые, можно предположить, что у приложения, считывающего файл comma1.txt, возникнут проблемы при синтаксическом разборестрок и распределении их по столбцам.

Характеристики

Тип файла
PDF-файл
Размер
1,22 Mb
Материал
Предмет
Высшее учебное заведение

Список файлов ответов (шпаргалок)

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