Иллюстрированный самоучитель по SQL для начинающих

Десять советов по извлечению данных

В этой главе…

  • Проверка структуры базы данных
  • Использование тестовых баз данных
  • Тщательная проверка любого запроса с оператором join
  • Проверка запросов с подвыборками
  • Использование предложения group by вместе с итоговыми функциями
  • Внимательное отношение к ограничениям из предложения group by
  • Использование круглых скобок в выражениях
  • Защита базы данных с помощью управления полномочиями
  • Регулярное резервное копирование базы данных
  • Предвидение ошибок и их обработка

База данных может быть настоящим виртуальным кладом с информационными сокровищами, но, как и сокровища, принадлежавшие много лет назад карибским пиратам, то, что вам действительно нужно, скорее всего, зарыто и спрятано далеко от людских глаз. Чтобы откопать эту скрытую информацию, вам потребуется специальный инструмент – оператор SQL SELECT. Но даже если вы четко знаете, что вам действительно нужно, сформулировать запрос может оказаться достаточно трудным делом. Если в своем запросе вы чуть отклонитесь в сторону, результаты будут неправильными, пусть даже очень близкими к ожидаемым. Причем настолько близкими, что могут ввести вас в заблуждение. Поэтому, чтобы иметь меньше шансов быть обманутым, придерживайтесь следующих десяти принципов.

Проверяйте структуру базы данных

Если полученные из базы данные не кажутся вам разумными, проверьте структуру этой базы. Существует много баз данных с неудачной структурой, и если вы работаете с такой базой, то вначале исправьте ее структуру, а лишь затем используйте другое "лекарство". Помните – хорошая структура является предварительным условием сохранения целостности данных.

Испытывайте запросы на тестовой базе данных

Создайте тестовую базу данных с такой же структурой, как и база, с которой вы работаете, но имеющую в своих таблицах небольшое количество строк, которые взяты для примера. В этих строках должны быть такие данные, чтобы можно было знать наперед, каким должен быть результат ваших запросов. Отправляйте запрос в тестовую базу на выполнение и затем смотрите, соответствуют ли его результаты тем, которые вы ожидали. Если не соответствуют, то, возможно, запрос нужно будет переписать. Но если запрос очевидно правильный, то тогда, видимо, придется переделывать структуру базы данных.

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

Дважды проверяйте запросы, имеющие операторы JOIN

Общеизвестно, что операторы JOIN наглядными никак не назовешь. И если какое-либо из них находится в вашем запросе, то, перед тем, как добавлять в запрос какие-либо предложения WHERE или другие усложняющие компоненты, обязательно проверьте, делает ли это предложение то, что вы от него ожидаете.

Трижды проверяйте запросы с подвыборками

Подзапросы позволяют совмещать данные одной таблицы с данными другой, и их часто используют неправильно. Необходимо проверять, чтобы данные, получаемые внутренним оператором SELECT, были теми, которые нужны внешнему оператору SELECT для получения нужного конечного результата. А если имеется более двух уровней подвыборок, то надо быть еще более осторожным.

Подводите итоги, используя предложение GROUP BY

Скажем, у вас есть таблица NATIONAL (Национальная бейсбольная лига), содержащая поля с фамилией игрока (поле Player), командой (поле Team) и количеством успешных ударов битой по мячу (поле Homers) для каждого игрока из Национальной лиги. Итоговые данные для всех команд можно получить, если использовать примерно такой запрос:

SELECT Team, SUM (Homers)
FROM NATIONAL
GROUP BY Team;

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

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.