alan_beaulieu-learning_sql-ru (865932), страница 50
Текст из файла (страница 50)
Должны быть включены столбцы count.account_id, account.product_cd, individual.fname, individual.lname и business.name.mysql> SELECT a.account_id, a.product_cd,> i.fname, i.lname, b.name> FROM account a LEFT OUTER JOIN business b> ON a.cust_id = b.cust_id> LEFT OUTER JOIN individual i> ON a.cust_id = i.cust_id;++++++| account_id | product_cd | fname| lname | name|++++++|1 | CHK| James| Hadley | NULL||2 | SAV| James| Hadley | NULL||3 | CD| James| Hadley | NULL||4 | CHK| Susan| Tingley | NULL||5 | SAV| Susan| Tingley | NULL||6 | CHK| Frank| Tucker | NULL||7 | MM| Frank| Tucker | NULL||8 | CHK| John| Hayward | NULL||9 | SAV| John| Hayward | NULL||10 | MM| John| Hayward | NULL||11 | CHK| Charles | Frasier | NULL||12 | CHK| John| Spencer | NULL||13 | CD| John| Spencer | NULL||14 | CD| Margaret | Young | NULL||15 | CHK| Louis| Blake | NULL||16 | SAV| Louis| Blake | NULL||17 | CHK| Richard | Farley | NULL||18 | MM| Richard | Farley | NULL||19 | CD| Richard | Farley | NULL||20 | CHK| NULL| NULL| Chilton Engineering||21 | BUS| NULL| NULL| Chilton Engineering||22 | BUS| NULL| NULL| Northeast Cooling Inc.
|Решения к упражнениям287|23 | CHK| NULL| NULL| Superior Auto Body||24 | SBL| NULL| NULL| AAA Insurance Inc.|++++++24 rows in set (0.05 sec)10.4 (дополнительно)Разработайте запрос, который сформирует набор {1, 2, 3,…, 99, 100}.(Совет: используйте перекрестное соединение как минимум с двумяподзапросами в блоке from.)SELECT ones.x + tens.x + 1FROM(SELECT 0 x UNION ALLSELECT 1 x UNION ALLSELECT 2 x UNION ALLSELECT 3 x UNION ALLSELECT 4 x UNION ALLSELECT 5 x UNION ALLSELECT 6 x UNION ALLSELECT 7 x UNION ALLSELECT 8 x UNION ALLSELECT 9 x) onesCROSS JOIN(SELECT 0 x UNION ALLSELECT 10 x UNION ALLSELECT 20 x UNION ALLSELECT 30 x UNION ALLSELECT 40 x UNION ALLSELECT 50 x UNION ALLSELECT 60 x UNION ALLSELECT 70 x UNION ALLSELECT 80 x UNION ALLSELECT 90 x) tens;Глава 1111.1Перепишите следующий запрос, использующий простое выражениеcase, таким образом, чтобы получить аналогичные результаты с помощью выражения case с перебором вариантов.
Попытайтесь свести к минимуму количество блоков when.SELECT emp_id,CASE titleWHEN 'President' THEN 'Management'WHEN 'Vice President' THEN 'Management'WHEN 'Treasurer' THEN 'Management'WHEN 'Loan Manager' THEN 'Management'WHEN 'Operations Manager' THEN 'Operations'288Приложение CWHEN 'Head Teller' THEN 'Operations'WHEN 'Teller' THEN 'Operations'ELSE 'Unknown'ENDFROM employee;SELECT emp_id,CASEWHEN title LIKE '%President' OR title = 'Loan Manager'OR title = 'Treasurer'THEN 'Management'WHEN title LIKE '%Teller' OR title = 'Operations Manager'THEN 'Operations'ELSE 'Unknown'ENDFROM employee;11.2Перепишите следующий запрос так, чтобы результирующий набор содержал всего одну строку и четыре столбца (по одному для каждого отделения).
Назовите столбцы branch_1, branch_2 и т. д.mysql> SELECT open_branch_id, COUNT(*)> FROM account> GROUP BY open_branch_id;+++| open_branch_id | COUNT(*) |+++|1 |8 ||2 |7 ||3 |3 ||4 |6 |+++4 rows in set (0.00 sec)mysql> SELECT> SUM(CASE WHEN open_branch_id = 1 THEN> SUM(CASE WHEN open_branch_id = 2 THEN> SUM(CASE WHEN open_branch_id = 3 THEN> SUM(CASE WHEN open_branch_id = 4 THEN> FROM account;+++++| branch_1 | branch_2 | branch_3 | branch_4 |+++++|8 |7 |3 |6 |+++++1 row in set (0.02 sec)1111ELSEELSEELSEELSE0000END)END)END)END)branch_1,branch_2,branch_3,branch_4Дополнительные источникиТеперь, прочитав эту книгу, вы должны уверенно продвигаться к профессиональному владению языком SQL.
Я набрался смелости и сделалкнигу не просто ознакомительной, а более глубокой. Поэтому некоторые из рассмотренных тем могут попрежнему вызывать определенныетрудности. Это хорошо, потому что, помоему, покупать техническуюкнигу, которую можно прочитать всего один раз, – все равно что бросать деньги на ветер. Надеюсь, что вы будете перечитывать отдельныеглавы и продолжать экспериментировать с примером БД до тех пор,пока не сформируете твердое представление об основных концепциях.Следующий шаг этого путешествия зависит от конкретных целей, которые вы перед собой ставите. За годы работы я встречался с многимилюдьми и могу ориентировочно разделить читателей на следующиекатегории:• Вы программист (или работаете над диссертацией для полученияученой степени по вычислительной технике) без или с небольшимпредварительным знанием теории баз данных и хотите расширитьсвои навыки или вас попросили помочь разобраться с аспектамипроекта, связанными с БД.• Вы непрограммист, но получили задание разработать проект создания отчетов или управления интеллектуальными ресурсами компании, возможно, включая установку и администрирование сервераBI (Business Intelligence – интеллектуальные ресурсы), такого какBusiness Objects, Actuate, Microstrategy или Cognos.• Вы системный администратор и хотите распространить свою деятельность и на администрирование БД.• Вы владелец малого предприятия, которому требуется БД для отслеживания клиентов, материальнопроизводственных запасов, заказов и т.
д. или используете «коробочное» приложение и хотитесоздавать специальные отчеты.290Приложение D•Вы не относитесь к вышеупомянутым категориям, но какимто образом на вашем ноутбуке (надеюсь, это не рабочий компьютер) оказалась база данных.В зависимости о того, какая из указанных категорий лучше всего описывает вашу ситуацию, вас заинтересует одна или несколько следующих тем:• Углубленное изучение SQL• Программирование баз данных• Проектирование баз данных• Настройка баз данных• Администрирование баз данных• Создание отчетовДалее в этом приложении представлены все эти темы и предложенынекоторые источники, помогающие овладеть этими дополнительныминавыками.Углубленное изучение SQLНезависимо от вашей роли в организации, как то администратор, программист, специалист по вопросам производительности, составительотчетов или даже разработчик БД, для личного успеха и успеха вашегопроекта нет более важного навыка, чем владение языком SQL в совершенстве.
Все так, но довольно сложно понять, владеете ли вы языком,который включает лишь горстку команд (я имею в виду категориюSQLвыражений для работы с данными, включающую выражения select, insert, update и delete). Лучший способ определить, освоили ли выSQL, – пройти курс углубленного изучения SQL или прочитать книгудля профессионалов. После этого большинство почувствует, что вопросне настолько хорошо знаком, как это представлялось.Вот чем вам может помочь совершенное владение языком SQL:• Программисты, работающие с базами данных, в конечном счете отвечают за соответствующую реализацию спецификаций проектаи за общую производительность системы. Лучшие программистымогут создавать лаконичные и эффективные SQLвыражения, правильно реализующие спецификации проекта, не приводя к проблемам производительности.• Администрирование БД часто объединяет несколько навыков, включая проектирование и реализацию БД, программирование БД и настройку БД.
Чтобы выполнять повседневные задачи администрирования, администраторы должны в совершенстве владеть SQLвыражениями управления схемой данных (такими как create table и alterindex), а превосходное знание SQLвыражений для работы с данными поможет находить наилучшие решения при проектировании,программировании и настройке.Дополнительные источники291•Специалисты по вопросам производительности, как правило, соглашаются, что большинство проблем производительности обусловлено плохо продуманными SQLвыражениями, а не недостатком ресурсов сервера. Однако при возникновении проблем с производительностью обычно проклинают сервер и затевают дорогостоящиеи ненужные обновления оборудования.•Хорошо спроектированная БД должна быть довольно простой в навигации, иначе те, кто ее реализует, будут делать ошибки. Чембольше вы знаете о том, как будут извлекаться данные из вашейБД, тем лучше будут решения, принимаемые вами на этапе проектирования.При углубленном изучении SQL вы осмелитесь выйти за рамки базового языка, задействовав специализированные интерфейсы и наборы команд.
Например, ваша реализация SQL может позволить генерироватьданные в формате XML (Extensible Markup Language – расширяемыйязык разметки) прямо из запроса к БД или сохранять, проводить синтаксический анализ и извлекать документы XML. Ваша реализацияSQL может также включать специальную функциональность для хранилищ данных и запросов к интеллектуальным ресурсам, такую каквозможность ранжирования (например: «покажите мне 10 лучшихпродавцов прошлого года»).
Кроме того, вам может понадобиться взаимодействие с объектноориентированными языками программирования, включая применение специальных команд для хранения, извлечения и создания объектов и коллекций объектов. Ни одна из этих темобычно не рассматривается в ознакомительных книгах по SQL.Следующие книги помогут перейти на следующий уровень в изученииSQL:Санжей Мишра (Sanjay Mishra) и Алан Бьюли (Alan Beaulieu) «Mastering Oracle SQL», Second Edition, O’Reilly, 2004.1Поль Дюбуа (Paul DuBois) «MySQL Cookbook», O’Reilly, 2002.2Пол Нильсен (Paul Nielsen) «Microsoft SQL Server 2000 Bible»,Wiley, 2002.Можно также пройти курс обучения в одном из следующих учебныхцентров:•Oracle University (http://education.oracle.com)•Learning Tree International (http://www.learningtree.com)•Microsoft Learning (learning)•MySQL Training (training)1Санжей Мишра, Алан Бьюли «Секреты Oracle SQL», перевод 1го издания,СимволПлюс, 2003.Поль Дюбуа «MySQL.
Сборник рецептов», СимволПлюс, 2004.2292Приложение DПрограммирование баз данныхЕсли вы программист, желающий добавить к своему профессиональному багажу умение организовывать доступ к БД, изучение SQL –только один из кусочков этого пазла. Нужен еще язык программирования или API, позволяющий создавать сеансы с БД и взаимодействовать с ней посредством команд SQL. Может, вы уже работаете с языком, обладающим этими возможностями, а может, вам понадобитсядополнительный API или драйвер. В табл. D.1 показаны некоторыевозможности, доступные в основных языках программирования.Таблица D.1. Возможности доступа к БДЯзык програм/ APIмированияОписаниеJavaJava Database Connectivity Набор интерфейсов для взаимо(JDBC)действия с БД. Необходим JDBCдрайвер (реализация интерфейсов JDBC) производителя вашейБД или стороннего производителяC++Oracle Call Interface (OCI)Набор библиотек С/С++ для соединения с базой данных Oracleи выполнения команд SQLMySQL++Набор библиотек С++ для соединения с базой данных MySQL ивыполнения команд SQLRogueWave SourcePro DBНабор библиотек С++ для соединения с базой данных MySQL,Oracle или SQL Server (в том числе) и выполнения команд SQLPerlDBIМодуль для доступа к MySQL,SQL Server, Oracle и нескольким другим СУБД посредствомединого интерфейсаVisual C++Visual C#Visual BasicMicrosoft ActiveX® DataObjects .NET (ADO.NET)Набор интерфейсов, предоставляющих сервисы доступа к данным для платформы .NETВсе приведенные в табл.