Как комментировать в SQL
Выучить весь язык, а не только этот фрагмент? SQL для аналитиков, полная версия объединяет 239-страничное руководство, систему комментариев и руководство по аналитическому мышлению в один пакет. SQL для аналитиков, полная версия, 39 долларов США →
SQL имеет два синтаксиса комментариев, и сегодня вы будете использовать оба. -- скрывает остальную часть одной строки. /* открывает блок, который остается скрытым до тех пор, пока */ закрывает его, сколько бы строк это ни заняло. Ничто внутри комментария не выполняется.
Часть, о которой вас никто не предупреждает, — это то, что происходит, когда вы закомментируете строку, в которой содержался запрос. Есть ровно две формы, которые ломаются, и одна маленькая привычка мешает обеим. Эта привычка — причина читать дальше первого экрана.
-- за одну строку, /* */ за блок. Пишите списки столбцов с запятой в начале каждой строки, и любой столбец можно будет безопасно закомментировать.- Два способа написать комментарий
- Где вы можете положить один
- Две фигуры, которые ломаются, когда вы комментируете строку
- Привычка использовать запятую, которая делает ее безопасной
- Что похоже на комментарий и чем не является
- Как закомментировать несколько строк одновременно
- Различия между базами данных
- Другая вещь, называемая комментарием
- Что на самом деле должен сказать комментарий
- Шпаргалка
Два способа написать комментарий
Перед ответом: один из этих двоих может скрыть половину запроса одним нажатием клавиши, а другой — нет. Угадайте, что именно, тогда читайте дальше.
Два тире скрывают остальную часть строки. Все после --, вплоть до разрыва строки, игнорируется. Следующая строка работает нормально.
SELECT name, score -- the two columns the report needs
FROM players;
Слэш-звезда открывает блок, звездочка-слэш закрывает его. Все, что находится между ними, игнорируется, включая разрывы строк. Это тот, который может скрыть половину запроса, поскольку не останавливается в конце строки. Он останавливается только тогда, когда встречается */.
/* Pulled for the Q3 review.
Numbers were signed off by Dana on the 14th. */
SELECT name, score
FROM players;
Обе формы являются частью языка SQL, а не каким-либо одним продуктом, поэтому одни и те же два символа работают в SQLite, PostgreSQL, MySQL, SQL Server, Большой запрос и Снежинка. Вам не придется их заново изучать при смене баз данных.
Где вы можете положить один
Комментарий к строке может начинаться в любом месте строки. Впереди, скрывая всю очередь. Или после рабочего кода спрятать только хвост.
-- the whole line is hidden
SELECT name FROM players; -- only this tail is hidden
Комментарий к блоку может располагаться в середине строки, поскольку он имеет закрывающий знак, и после этого база данных возвращает код обратно. Это запускается и возвращает 3:
SELECT 1 + /* this is skipped */ 2;
Скажите вслух, почему это работает, прежде чем читать следующее предложение. Причина – вся разница между двумя формами: -- не имеет закрывающего знака, поэтому он доходит до конца строки, и все, что находится после него в этой строке, исчезает. /* */ имеет закрывающую метку, поэтому требуется только то, что находится между ними.
Две фигуры, которые ломаются, когда вы комментируете строку
Комментирование строки — самое распространенное действие, которое кто-либо делает с комментарием SQL. Вы проверяете, имеет ли значение фильтр, поэтому скрываете его и запускаете заново. Две фигуры кусаются, и обе оставляют запрос, который не анализируется.
Ловушка 1: запятая в списке SELECT.
Столбцы разделяются запятыми, и большинство людей ставят запятую в конце каждой строки. Скройте последний столбец, и запятая над ним останется указывающей на ничто.
SELECT id,
-- name,
FROM players;
База данных читает SELECT id, FROM players и останавливается. SQLite-отчеты near "FROM": syntax error. Другие движки пишут это по-другому и означают то же самое: запятая обещала еще один столбец, но ни один не прибыл.
Ловушка 2: висит И в ГДЕ
Та же ошибка, другое ключевое слово. К условиям присоединяются AND, AND обычно находится в конце строки, и сокрытие последнего условия приводит к застою.
SELECT id FROM players
WHERE score > 5 AND
-- status = 'active'
;
SQLite-отчеты incomplete input. Запрос не ошибочный, он не завершен. AND ждал второй вещи для тестирования, и комментарий съел ее.
Обратите внимание, что общего у этих двоих. В обоих случаях строка, которую вы закомментировали, сама по себе была хороша. Что сломалось, так это пунктуация на строке. выше то, к чему ты никогда не прикасался и на что не смотрел.
Привычка использовать запятую, которая делает ее безопасной
Переместите запятую и AND к передний строки, которой они принадлежат, а не конца предыдущей строки.
SELECT id
, name
, status
FROM players
WHERE score > 5
AND status = 'active';
Теперь каждая строка имеет свою пунктуацию. Комментировать , name и запятая идет вместе с ней. Комментировать AND status = 'active' и AND идет с этим. Запрос по-прежнему анализируется каждый раз, и вы можете переключать любую строку, не читая строку над ней.
SELECT id
-- , name
, status
FROM players
WHERE score > 5
-- AND status = 'active'
;
Оба бегут. Единственная строка, которую вы не можете скрыть таким образом, — это первый столбец, поскольку перед ним нет знаков препинания.
Представьте себе свой последний длинный запрос с выдвинутыми вперед запятыми. Какую строку вы бы включали и выключали, пока писали ее? Эта линия является причиной привычки.
Что похоже на комментарий и чем не является
Знаки комментариев внутри кавычек теряют свое значение. База данных, читающая строку в кавычках, рассматривает каждый символ в ней как текст, включая -- и /*. Это возвращает буквальный текст a -- b, нет a:
SELECT 'a -- b';
Это имеет значение, когда вы ищете текст, содержащий тире, или сохраняете фрагменты кода в таблице. Ничто из того, что вы пишете внутри кавычек, не может случайно закомментировать остальную часть вашего запроса.
В большинстве баз данных блочные комментарии также не являются вложенными. Первый */ закрывает блок, что бы ни было до него:
/* outer /* inner */ this part is now code */
Блок заканчивается первым */, так this part is now code */ передается в базу данных как SQL и завершается с ошибкой. Если вам нужно скрыть фрагмент, который уже содержит комментарий к блоку, поместите -- вместо этого в начале каждой строки. Ваш редактор сделает это для всего выделения одним нажатием клавиши, и в следующем разделе будут клавиши.
Как закомментировать несколько строк одновременно
Ввод текста -- впереди тридцати очередей – это не работа для человека. В каждом редакторе SQL есть ярлык, который позволяет выполнить то же самое с тем, что вы выбрали. Выделяйте строки, нажимайте клавиши и каждая строка получает свою --.
Доберитесь до этого вместо того, чтобы заворачивать растяжку в /* */. Комментарий к каждой строке по-прежнему работает, если участок уже содержит комментарий к блоку, а комментарий к блоку — нет.
| Редактор | Прокомментируйте, что вы выбрали | Отменить это |
|---|---|---|
| Студия управления SQL Serverом | Ctrl+K, затем Ctrl+C | Ctrl+K, затем Ctrl+U |
| MySQL рабочая среда | Ctrl+/ (Cmd+/ на Маке) | Опять те же ключи |
| ДБивер | Ctrl+/ для линий, Ctrl+Shift+/ за блок | Опять те же ключи |
| pgAdmin 4 | Ctrl+/ (Cmd+/ на Маке) | Опять те же ключи |
| VS-код | Ctrl+/ (Cmd+/ на Маке) | Опять те же ключи |
Двое из них ведут себя иначе, чем остальные, и оба застают людей врасплох.
SSMS - странный вариант. Это не один аккорд, это два нажатия подряд. Держать Ctrl, кран K, кран C. Кажется, ничего не происходит после K, и именно здесь большинство людей сдаются и считают, что ярлык неправильный.
MySQL рабочая среда — другой. В некоторых сборках ярлык привязан к клавише разделения на цифровой клавиатуре, а не к косой черте на основной клавиатуре. На ноутбуке без цифровой клавиатуры удерживайте Ctrl и Fn вместе и нажмите клавишу, которая выполняет функцию разделения. Это открытая ошибка в течение многих лет, так что это ваша клавиатура, а не ваш SQL.
Различия между базами данных
Две стандартные формы работают везде. Две меньшие вещи не путешествуют.
| вещь | Где это работает | Что делать |
|---|---|---|
-- строковый комментарий | Каждая крупная база данных | Используйте его свободно |
/* */ заблокировать комментарий | Каждая крупная база данных | Используйте его свободно |
# строковый комментарий | Только MySQL и МарияДБ | Использовать -- вместо этого запрос сохраняется при перемещении |
-- без пробела после него | Отлично почти везде, но MySQL отклоняет это | Всегда ставьте пробел после двух тире |
Вложенный /* */ блоки | Только PostgreSQL | Не полагайтесь на него, если запрос может переместиться |
незакрытый /* | SQLite запускает его до конца ввода, другие отклоняют его | Всегда закрывайте блок |
Два из них заслуживают внимания, потому что оба работают на вашей машине и не работают на чужой.
MySQL более строг в отношении -- чем все остальные. Требуется хотя бы один пробел или табуляция после второго тире. --note — это синтаксическая ошибка в MySQL и отличный комментарий почти везде, так что привыкните к пробелу, и этот вопрос никогда не возникнет.
PostgreSQL — это единственная база данных, в которую вложены блочные комментарии, что, как утверждается в собственной документации, является стандартным поведением, а в остальном мире — нет. В Постгрес приведенный выше пример скрывает всю строку, поскольку внешний /* ждет совпадения */. Напишите SQL, который зависит от этого, и он сломается в тот же день, когда его запустят где-нибудь еще.
Если вы пишете SQL, который вы можете использовать повторно где-нибудь еще, оставайтесь на месте. -- с пробелом используйте /* */ не вложив его, и закройте каждый блок. Это портативный набор.
Полная информация по каждому движку, включая то, что SQLite делает с блоком, который вы забыли закрыть, находится в Синтаксис комментариев SQL по базам данных.
Другая вещь, называемая комментарием
Стоит знать еще одно значение, поскольку это другая функция с практически таким же названием.
COMMENT ON TABLE не скрывает код. Это оператор, который вы запускаете, и он сохраняет описание внутри базы данных, прикрепленное к таблице, где коллега, который никогда не видел ваш файл запроса, все равно может его прочитать. Это описано в COMMENT ON TABLE.
Быстрый способ узнать, какой из них вам нужен. Попытка остановить запуск строки: --. Попытка записать, что означает столбец, чтобы он переживал ваш сценарий: COMMENT ON.
Что на самом деле должен сказать комментарий
Синтаксис — это легкая половина. Более сложный вопрос — что будет в комментарии, если он у вас есть.
Комментарий занимает свое место только тогда, когда он содержит что-то, чего еще не сказано в коде. -- filter to active customers сидя рядом с WHERE status = 'active' ничего не несет, потому что код сказал это первым, меньшим количеством слов, и код не может устареть.
То, что читатель действительно не может восстановить из кода, — это почему кто-то задал этот вопрос. Почему 500, а не 50. Зачем ранжировать по процентам, а не по чистому подсчету. Это призывы к суждению, и их часть обычно не учитывается. Полный формат записи этого, использованный слово в слово в трех опубликованных проектах портфолио, находится в Как комментировать SQL, чтобы он обучал.
Шпаргалка
| Вы хотите | Писать | Следите за |
|---|---|---|
| Скрыть остаток строки | -- your note | Ничто после этого в этой строке не выживает. |
| Скрыть несколько строк | /* your note */ | Закройте его и не вложите в него |
| Добавить примечание в конец строки | SELECT id -- note | Длинные строки становится трудно читать |
| Закомментируйте один столбец | Сначала загрузите запятую, затем -- , name | Завершающие запятые оставляют синтаксическую ошибку |
| Закомментируйте одно условие | Фронтальная загрузка AND, затем -- AND status = 'x' | свисающий AND оставляет запрос незавершенным |
Скрыть блок, который уже есть /* */ в этом | -- на каждой строке | Блоки не вложены друг в друга |
| Закомментируйте сразу много строк | Выберите их, затем Ctrl+/ | SSMS отличается: Ctrl+K, затем Ctrl+C |
| Напишите комментарий, который примут другие базы данных | -- или /* */ | # только MySQL |
Единственная привычка, которую нужно сохранить
Поставьте запятую и AND в начале линии. Это ничего не стоит, около суток выглядит странно, а закомментирование строки из того, что нужно проверить, превращается в то, что можно делать не задумываясь.
Если у вас под рукой есть бумага, запишите наиболее часто используемый запрос, переместив знаки препинания вперед. Увидеть собственный запрос в форме стоит больше, чем прочитать о нем.
Какую строку в текущем запросе вам больше всего хотелось бы включать и выключать?
Система комментариев SQL — это двухрежимный стандарт, 12-балльная критерий оценки и агент для Клод или ЧатGPT, который применяет оба режима к запросам, которые вы фактически пишете.
Система комментариев SQL, 29 долларов США →Хотите более широкий навык, а не одну привычку? SQL для аналитиков читает запросы построчно простыми словами, и это та же привычка, по которой написаны эти комментарии. SQL для аналитиков, 19 $ →
тот Курс SQL охватывает SELECT, WHERE, JOIN и GROUP BY с отработанными примерами, практикой и пробным экзаменом, и все это в браузере. Если у вас еще нет базы данных для практики, начните с установка за пятнадцать минут.
Откройте набор SQL →Или введите их самостоятельно по одному: открыть SQL-практикум, тринадцать запросов, каждый из которых добавляет что-то одно к последнему.