SQL для начинающих

         

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



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

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



Используйте круглые скобки с ключевыми словами AND, OR и NOT



Используйте круглые скобки с ключевыми словами AND, OR и NOT

Когда AND и OR используются вместе, SQL иногда не обрабатывает выражение в том порядке, который вы ожидаете. Чтобы полученный результат был тем, на который вы рассчитываете, используйте круглые скобки. Несколько лишних щелчков на кнопках — это достаточно низкая цена, которую следует заплатить за более достоверные результаты. Кроме того, круглые скобки помогают сделать так, чтобы ключевое слово NOT применялось именно необходимому к терму или выражению.



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



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

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

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



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



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

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

SELECT Team, SUM (Homers)

FROM NATIONAL

   GROUP BY Team ;



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



Предусмотрите достойный выход из ошибочных ситуаций



Предусмотрите достойный выход из ошибочных ситуаций

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

 



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



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

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



Регулярно выполняйте резервное копирование своих баз данных



Регулярно выполняйте резервное копирование своих баз данных

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



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



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

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



Управляйте полномочиями на получение данных



Управляйте полномочиями на получение данных

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



Использование предложения group by вместе



В этой главе...

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

Внимательно относитесь к ограничениям предложения GROUP BY



Внимательно относитесь к ограничениям предложения GROUP BY

Предположим, вам нужен список самых результативных хиттеров (игроков с битой) Национальной лиги. Проанализируйте следующий запрос:

SELECT Player, Team, Homers

   FROM NATIONAL

   WHERE Homers >= 2 0

   GROUP BY Team ;

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

SELECT Player, Team, Homers

   FROM NATIONAL

   WHERE Homers >= 20

   GROUP BY Team, Player, Homers ;

Так как все столбцы, которые вы хотите отобразить, указаны в предложении GROUP BY, то запрос выполнится успешно и выведет те результаты, которые вам нужны. Благодаря этой формулировке полученный список будет сперва отсортирован по полю Team, затем по полю Player и Homers.