Сертификация по 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. Создайте однострочный список рассылки для всех клиентов из США, включая полные имена, написанные заглавными буквами, и полные адреса с пятизначными почтовыми индексами, в следующем формате: