← Все курсы · Курс SQL

Как комментировать в SQL

Два синтаксиса, два способа комментирования строки разрывают запрос, а односимвольная привычка исправляет и то, и другое. · Часть Analyst Prep Kit

К , аналитик данных · Обновлено

Выучить весь язык, а не только этот фрагмент? SQL для аналитиков, полная версия объединяет 239-страничное руководство, систему комментариев и руководство по аналитическому мышлению в один пакет. SQL для аналитиков, полная версия, 39 долларов США →

SQL имеет два синтаксиса комментариев, и сегодня вы будете использовать оба. -- скрывает остальную часть одной строки. /* открывает блок, который остается скрытым до тех пор, пока */ закрывает его, сколько бы строк это ни заняло. Ничто внутри комментария не выполняется.

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

Краткая версия. -- за одну строку, /* */ за блок. Пишите списки столбцов с запятой в начале каждой строки, и любой столбец можно будет безопасно закомментировать.
Что здесь
  1. Два способа написать комментарий
  2. Где вы можете положить один
  3. Две фигуры, которые ломаются, когда вы комментируете строку
  4. Привычка использовать запятую, которая делает ее безопасной
  5. Что похоже на комментарий и чем не является
  6. Как закомментировать несколько строк одновременно
  7. Различия между базами данных
  8. Другая вещь, называемая комментарием
  9. Что на самом деле должен сказать комментарий
  10. Шпаргалка

Два способа написать комментарий

Перед ответом: один из этих двоих может скрыть половину запроса одним нажатием клавиши, а другой — нет. Угадайте, что именно, тогда читайте дальше.

Два тире скрывают остальную часть строки. Все после --, вплоть до разрыва строки, игнорируется. Следующая строка работает нормально.

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+CCtrl+K, затем Ctrl+U
MySQL рабочая средаCtrl+/ (Cmd+/ на Маке)Опять те же ключи
ДБиверCtrl+/ для линий, Ctrl+Shift+/ за блокОпять те же ключи
pgAdmin 4Ctrl+/ (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 в начале линии. Это ничего не стоит, около суток выглядит странно, а закомментирование строки из того, что нужно проверить, превращается в то, что можно делать не задумываясь.

Если у вас под рукой есть бумага, запишите наиболее часто используемый запрос, переместив знаки препинания вперед. Увидеть собственный запрос в форме стоит больше, чем прочитать о нем.

Какую строку в текущем запросе вам больше всего хотелось бы включать и выключать?

Каждый пример здесь был запущен до публикации. Приведенные сообщения об ошибках являются реальными, которые возвращает SQLite, а не их описанием. Другие двигатели описывают одни и те же две неисправности по-разному.
Знать, куда идет комментарий, — это легкая половина. Знать, что в него положить, — это работа.

Система комментариев SQL — это двухрежимный стандарт, 12-балльная критерий оценки и агент для Клод или ЧатGPT, который применяет оба режима к запросам, которые вы фактически пишете.

Система комментариев SQL, 29 долларов США →

Хотите более широкий навык, а не одну привычку? SQL для аналитиков читает запросы построчно простыми словами, и это та же привычка, по которой написаны эти комментарии. SQL для аналитиков, 19 $ →

Пишите запросы, а не просто читайте их.

тот Курс SQL охватывает SELECT, WHERE, JOIN и GROUP BY с отработанными примерами, практикой и пробным экзаменом, и все это в браузере. Если у вас еще нет базы данных для практики, начните с установка за пятнадцать минут.

Откройте набор SQL →

Или введите их самостоятельно по одному: открыть SQL-практикум, тринадцать запросов, каждый из которых добавляет что-то одно к последнему.