Соединения, NULL, индексы, виртуальные таблицы. Самая частая тема на собеседовании.
Ниже — 2 вопроса с разбором. Всего по этой теме
8 вопросов, и в тренажёре они задаются вперемешку
и без подсказок: там проверяется, что тема уложилась, а не что её
приятно читать.
Внутреннее оставляет только строки, для которых нашлось соответствие в обеих таблицах; левое сохраняет все строки левой таблицы, подставляя NULL там, где справа ничего нет — верно
Левое соединение всегда работает быстрее внутреннего, потому что не проверяет наличие пары, — поэтому в отчётах предпочитают именно его
Внутреннее соединение применимо только к справочникам и документам, а левое — к регистрам и их виртуальным таблицам, где строки могут отсутствовать, поэтому вид соединения определяется типом таблицы, а не задачей
Разницы нет: платформа сама выбирает вид соединения исходя из плана запроса и статистики по таблицам, поэтому писать можно любое
Внутреннее — пересечение, левое — все строки слева плюс совпадения справа. По скорости внутреннее обычно даже быстрее, потому что оптимизатор может отбросить строки раньше.
Почему условие «Поле = NULL» никогда не находит строк?
NULL означает «значение неизвестно», поэтому любое сравнение с ним даёт не Истину и не Ложь. Проверять надо через ЕСТЬ NULL — верно
Это синтаксическая ошибка: платформа не даст сохранить такой запрос в конструкторе
Так писать можно: сравнение с NULL просто выполняется медленнее обычного, потому что платформа проверяет каждую строку отдельно
NULL корректно сравнивается только с пустой строкой либо с пустой ссылкой нужного типа
NULL не равен ничему, включая другой NULL. Единственный способ проверки — ЕСТЬ NULL / ЕСТЬ НЕ NULL. Это первое, что ломается у новичков при левых соединениях.
О чём ещё спрашивают по этой теме
Вы соединяете шапку документа с его табличной частью и берёте СУММА(Док.СуммаДокумента). Что произойдёт?
В чём разница между ГДЕ и ИМЕЮЩИЕ?
Вы делаете ЛЕВОЕ СОЕДИНЕНИЕ и хотите отфильтровать присоединяемую таблицу. Куда поставить условие?
Какие конструкции убивают производительность запроса в 1С? (несколько ответов)