SQL: быстрое погружение — страница 21 из 24

Сертификация по SQL

Существует множество различных программ сертификации по SQL и администрированию баз данных. Примеры наиболее распространенных сертификатов — это Microsoft Certified Solutions Associate (MCSA) и Microsoft Certified Solutions Expert (MCSE). Однако Microsoft — не единственный вариант. Существуют и другие платформы баз данных, такие как Oracle и IBM, которые также являются крупными игроками в сфере баз данных, предлагающими сертификаты. Действительно ли сертификаты необходимы? Сертификация — не единственный путь в вашей карьере в области SQL. Я верю, что вы можете получить столько же знаний, если не больше, когда станете практиком. Для меня способность использовать язык на практике более важна, чем сертификация. Если ваша компания использует IBM, пройдите сертификацию. Но если вы не уверены, просто практикуйтесь в решении реальных вопросов с любой необходимой реализацией SQL.

Напутственные слова

Я искренне надеюсь, что вам понравилась книга и что я смог вас увлечь этой темой. Дополнительную информацию о деятельности моей компании по визуализации данных и об учебных курсах, которые я предлагаю, вы можете найти на http://datadecided.com. Мне было приятно сопровождать вас в этом увлекательном путешествии в мире баз данных.

Приложение I. Контрольные вопросы и ответы на них

Глава 3. Контрольные вопросы

Используя вкладку Database Structure (Структура базы данных) и вкладку Browse Data (Просмотр данных), ответьте на следующие вопросы.

Вопрос 1. Сколько таблиц в нашей базе данных?

Решение. В DB Browser перейдите на вкладку Database Structure (Структура базы данных), где количество таблиц указано в скобках (). В нашей базе данных тринадцать таблиц.

Рис. 129

Вопрос 2. Сколько полей в таблице tracks?

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

Рис. 130

Из примера следует, что таблица tracks состоит из девяти столбцов.

Вопрос 3. Какие типы данных указаны в этой таблице?

Решение. На рис. 130 видно, что столбец TrackId принимает данные типа INTEGER, а столбец Name принимает данные типа NVARCHAR. Остальные столбцы также принимают типы INTEGER и NVARCHAR за исключением UnitPrice, который принимает тип данных NUMERIC.

Вопрос 4. Как выглядят данные в таблице?

Решение. Перейдите на вкладку Browse Data (Просмотр данных) и проанализируйте таблицу. Необходимо в раскрывающемся меню выбрать таблицу tracks. Анализ данных в таблице показывает, почему тип данных INTEGER используется для таких столбцов, как TrackId и AlbumId, в то время как символьный тип данных имеет больше смысла для столбцов Name и Composer. Наконец, для UnitPrice необходим тип данных с десятичными знаками, а целочисленного типа данных для этого столбца недостаточно.

Рис. 131

Глава 4. Контрольные вопросы

Вопрос 1. Напишите запрос, чтобы узнать количество клиентов, фамилии которых начинаются с буквы B.

Решение. Чтобы ответить на этот вопрос, сначала надо написать запрос для отображения конкретной информации, которую мы ищем. В данном случае нас интересуют фамилии. Фамилии содержатся в таблице клиентов в поле LastName.

Следующий запрос отображает все фамилии.

SELECT

LastName

FROM

customers

В результате данного запроса отображаются все фамилии, но они не расположены в нужном порядке. Чтобы расположить их по алфавиту, мы можем использовать оператор ORDERBY. Обратите внимание, что нам не нужно указывать A — Z, так как по умолчанию данные отображаются в порядке возрастания. Если бы нам требовалось получить имена, начинающиеся с буквы Z, мы использовали бы оператор DESC.

SELECT

LastName

FROM

customers

ORDER BY

LastName ASC

Рис. 132

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

Вопрос 2. Какая компания при сортировке в порядке убывания появляется в верхней строке таблицы customers?

Решение. На этот раз мы ищем поле Company. Как мы говорили в предыдущем вопросе, все, что нам необходимо сделать, это изменить последнюю часть нашего запроса, чтобы указать порядок убывания.

SELECT

Company

FROM

customers

ORDER BY

Company DESC

Получим следующий результат.

Рис. 133

Мы видим, что компания Woodstock Discos — первая в списке по убыванию.

Вопрос 3. Какое количество клиентов не указали почтовый индекс?

Решение. Мы могли бы ответить на этот вопрос, прокручивая данные в разделе Browse Data (Просмотр данных), но есть более эффективный способ. Используя условие SELECT, мы можем перечислить все данные в порядке возрастания. Но на этот раз нам необходимо перечислить более одного столбца, чтобы мы могли видеть, каким именам клиентов не соответствуют данные почтового индекса. Таким образом, мы выберем поля FirstName, LastName и PostalCode, а затем отсортируем результаты по PostalCode.

SELECT

FirstName,

LastName,

PostalCode

FROM

customers

ORDER BY

PostalCode

В результате отобразятся четыре записи, которые не имеют почтовых данных, что обозначено значением null в столбце PostalCode (рис. 134).

Рис. 134

Примечание

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

Глава 5. Контрольные вопросы

Вопрос 1. Создайте запрос для таблицы invoices, включающий оператор CASE, который будет отмечать все продажи из США — страны, откуда выставлен счет, как Domestic Sales (Продажи на внутреннем рынке), а все другие продажи — как Foreign Sales (Продажи за рубежом). После оператора ENDAS создайте новое поле SalesType.

Решение. Чтобы отобразить эту информацию, необходимо применить фильтрацию, используя оператор CASE. Поскольку мы классифицируем наш оператор CASE по стране, где был выставлен счет, необходимо добавить это поле в условие SELECT.

SELECT

InvoiceDate,

BillingAddress,

BillingCity,

BillingCountry,

Total,

CASE

WHEN BillingCountry = 'USA' THEN 'Domestic Sales'

ELSE 'Foreign Sales'

END AS SalesType

FROM

invoices

Рис. 135

Вопрос 2. Отсортируйте эти данные по новому полю SalesType.

Решение. Чтобы отобразить все внутренние продажи в одной группе и все зарубежные продажи в другой группе, необходимо к уже существующему запросу добавить условие ORDERBY (используя новое поле):

SELECT

InvoiceDate,

BillingAddress,

BillingCity,

BillingCountry,

Total,

CASE

WHEN BillingCountry = 'USA' THEN 'Domestic Sales'

ELSE 'Foreign Sales'

END AS SalesType

FROM

invoices

ORDER BY

SalesType

На рис. 136 показаны результаты данного запроса, где сначала отображаются Domestic Sales (Продажи на внутреннем рынке). Если вы запустите этот запрос и прокрутите вниз, вы увидите, что все страны, кроме США, отмечены как Foreign Sales (Продажи за рубежом).

Рис. 136

Вопрос 3. Сколько счетов от продаж на внутреннем рынке превышают сумму $15?

Решение. Чтобы включить числовые и текстовые параметры, в существующий запрос можно добавить условия WHERE и AND.

SELECT

InvoiceDate,

BillingAddress,

BillingCity,

BillingCountry,

Total,

CASE

WHEN BillingCountry = 'USA' THEN 'Domestic Sales'

ELSE 'ForeignSales'

END AS SalesType

FROM

invoices

Where

SalesType = «Domestic Sales» AND Total > 15

Рис. 137

Глава 6. Контрольные вопросы

Вопрос 1. Используя DB Browser и вкладку Browse Data (Просмотр данных) или ER-диаграмму (рис. 65), проанализируйте таблицу tracks. Определите, какие поля в этой таблице будут внешними ключами в другой таблице. На основании определенных вами внешних ключей определите, какие таблицы связаны с таблицей tracks.

Решение. Анализируя таблицу tracks, мы видим три поля с целочисленными значениями, которые могут быть внешними ключами.

Поля AlbumId, MediaTypeId и GenreId соответствуют таблицам albums, media_types и genres соответственно.

Рис. 138

Вопрос 2. Создайте внутреннее соединение между таблицами albums и tracks и отобразите названия альбомов и названия треков в едином наборе результатов.

Решение:

SELECT

t. composer AS "Artist Name",

a. title AS "Album Title",

t. Name AS "Track Name"

FROM

albums a

INNER JOIN

tracks t

ON

a. AlbumId = t.AlbumId

Вопрос 3. Создайте третье внутреннее соединение — с таблицей genres, которую вы нашли, отвечая на вопрос 1. Включите в ваш набор результатов поле Name из этой таблицы.

Решение:

SELECT

g. name AS Genre,

t. composer AS "Artist Name",

a. title AS "Album Title",

t. Name AS "Track Name"

FROM

albums a

INNER JOIN

tracks t

ON

a. AlbumId = t.AlbumId

INNER JOIN

genres g

ON

g. GenreId = t.GenreId

Глава 7. Контрольные вопросы

Вопрос 1. Создайте однострочный список рассылки для всех клиентов из США, включая полные имена, написанные заглавными буквами, и полные адреса с пятизначными почтовыми индексами, в следующем формате: