Сегодня я хочу поговорить о тех простых моментах, которые помогут начинающим программистам SQL более правильно, продуманно и просто составлять логику своих запросов и быстрей освоить язык SQL.
Все эти моменты я выделяю как «полезные советы», которые основаны как на личном опыте, так и на опыте других более опытных людей. И сегодня я хочу поделиться ими с Вами. Получилось у меня их 10.
- Совет 1 — перечисляйте поля
- Совет 2 — не пишите сложные многоуровневые запросы
- Совет 3 — не используйте в WHERE функции
- Совет 4 — перечисляйте столбцы во время INSERT
- Совет 5 — используйте значение по умолчанию, избегайте NULL
- Совет 6 — в ORDER BY используйте имена столбцов
- Совет 7 — сохраняйте SQL запросы
- Совет 8 — не создавайте много курсоров
- Совет 9 — проверяйте и тестируйте условия при UPDATE и DELETE
- Совет 10 — используйте понятные названия
Совет 1 — перечисляйте поля
При написании запроса перечисляйте поля. Не ставьте *, так как в дальнейшем могут возникнуть некоторые проблемы, хотя с первого взгляда Вы их не замечаете, а, напротив, думаете, что это намного удобней. Проблемы могут возникнуть следующие: не задействуются индексы, появляются столбцы с одинаковыми названиями, это возникает тогда, когда в запросе Вы объединяете несколько таблиц, в которых есть поля с одинаковыми названиями. И в данном случае потом, например, разработчик клиентской части, не подозревая, может выводить пользователю не те данные, которые нужны.
Не нужно так делать
SELECT * FROM table
Лучше так
SELECT col, col2, col3 FROM table
Примечание! Если Вы начинающий программист и у Вас нет базовых знаний языка SQL, то я Вам рекомендую почитать книгу «SQL код» – это самоучитель по данному языку. Книга написана мной, в ней я очень подробно рассказываю о языке SQL.
Совет 2 — не пишите сложные многоуровневые запросы
Не делайте сложные, большие, многоуровневые запросы. Вы просто запутаетесь, так как такой запрос трудно переделывать, и вообще — это влияет на скорость работы. Если запрос используется часто, то вынесите наиболее сложную часть в функцию или процедуру, и вообще, не стесняйтесь писать свои функции для любых нужд, конечно, если предполагается, что эти функции будут активно использоваться во всевозможных запросах, а в запросе в нужном месте вызывайте ее. Это намного упрощает написание запросов, в дальнейшем не придется изучать заново логику запроса, например, если Вам необходимо что-то в нем переделать, а также в некоторых случаях увеличится скорость работы запроса.
Примечание! Если Вы не знаете, как писать собственные функции, можете ознакомиться со статьей, которая посвящена именно этому Как написать функцию на PL/pgSQL. В языке T-SQL для упрощения написания кода запросы есть специальная конструкция WITH.
Совет 3 — не используйте в WHERE функции
Не используйте в условии функции, которые будут вычислять какое-то значение на основе поля в текущей таблице, так как это будет сделано для каждой строки, и, соответственно, увеличится нагрузка и как следствие уменьшится скорость работы. Также это относится и к подзапросам. Хотя во многих случаях без этого не обойтись, но помните, если есть возможность подумать и не использовать это, то лучше подумайте и реализуйте эту задачу по-другому. Все это можно отнести, например, и к секции SELECT, но здесь такое требуется довольно часто.
Совет 4 — перечисляйте столбцы во время INSERT
При добавлении данных в таблицу, так же как и в SELECT перечисляйте поля таблицы, например:
Не нужно так делать
INSERT INTO table VALUES (col1, col2, col3……)
Лучше так
INSERT INTO table (col1, col2, col3……) VALUES (col1, col2, col3……)
Так как поля в таблице могут добавляться, и поэтому могут возникнуть некоторые трудности, даже если Вы позаботились о значении по умолчанию для новой колонки.
Совет 5 — используйте значение по умолчанию, избегайте NULL
Данный совет вытекает из предыдущего. Старайтесь при создании таблицы задавать значения по умолчанию, чтобы избавиться от NULL, так как если Вы этого не будете делать, то могут возникать такие значения как NULL, а следует помнить, что NULL — это не значение, а это состояние ячейки, т.е. отсутствие значения. Чем так плохо это значение, а тем, что при написании запросов, Вам придется помнить, что у Вас могут встречаться такие значения и соответственно принимать их во внимание. Так как если Вы забудете или попросту не знаете, что в какой-то таблице есть значения NULL, то в дальнейшем Вы можете выводить неправильные данные, а это не есть хорошо.
Совет 6 — в ORDER BY используйте имена столбцов
При сортировке (ORDER BY) лучше использовать имена столбцов, а не их позиции (номера), так как могут возникнуть проблемы. Например, Вы использовали сортировку по их номеру и отдали запрос разработчику приложения, затем через некоторое время возникла необходимость изменить данный запрос путем добавления или удаления некоторых полей, а про сортировку забыли и снова отдали запрос разработчику. И теперь при выводе данных будет использоваться неправильная сортировка, а со стороны пользователя вообще может возникнуть мнение, что выводятся неправильные данные, он об этом скажет Вам, а Вы будете не понимать, ведь все же работало, что же не так. А все потому, что никакой ошибки не возникнет, чтобы ее можно было отследить, а все банально и просто, Вы использовали сортировку по номеру столбца.
Не нужно так делать
SELECT col, col2, col3 FROM table ORDER BY 2, 1
А лучше так
SELECT col, col2, col3 FROM table ORDER BY col2, col
Совет 7 — сохраняйте SQL запросы
Если Вы пишите какой-то разовый запрос и в дальнейшем он может, и никогда не будет использоваться, все равно сохраните этот запрос в любом виде, обычно в файлах .sql, так как по опыту могу сказать, что он может пригодиться и для других задач или помочь их решить намного быстрей. Если Вы не сохраните, то Вам придется продумывать всю логику, алгоритм заново что, конечно же, влияет на скорость выполнения задания.
Совет 8 — не создавайте много курсоров
Не создавайте много курсоров. Так как курсор — это достаточно ресурсоемкая операция для сервера, поэтому если есть возможность обойтись без него, то лучше его не использовать. Хотя есть такие задачи, когда курсор это единственное возможное решение, поэтому он тоже, в некоторых случаях, очень полезен.
Примечание! А если Вы даже не знаете, как создавать курсоры, то в этом Вам поможет следующая статья Как использовать курсор в функциях на PL/pgSQL
Совет 9 — проверяйте и тестируйте условия при UPDATE и DELETE
Совет на собственную проверку. Иногда, когда требуется что-то массово обновить (UPDATE), всегда тестируйте запрос на тестовой базе, иначе, например, одно не верное условие может быть практически необратимо. Поэтому всегда под рукой должна быть тестовая база.
Совет 10 — используйте понятные названия
Создавайте понятные названия столбцов в таблицах, а также используйте понятные название переменных, данный совет относится не только к SQL, но и к программированию в целом.
Надеюсь, эти советы Вам помогут правильно составлять свои запросы и не наступать на те же грабли, как многие другие начинающие программисты.