HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Представим, что мы хотим собрать некоторую статистику по пользователям нашей системы - найти похожие фамилии, начинающиеся с "Sch" - Schuster, Schumm, Schmitt. Оператор сравнения = позволит найти только точное соответствие:</p>
1 <p>Представим, что мы хотим собрать некоторую статистику по пользователям нашей системы - найти похожие фамилии, начинающиеся с "Sch" - Schuster, Schumm, Schmitt. Оператор сравнения = позволит найти только точное соответствие:</p>
2 <p><a>View on DB Fiddle</a></p>
2 <p><a>View on DB Fiddle</a></p>
3 <p>Такой запрос выберет всех пользователей по фамилии Schumm. Но как быть с остальными фамилиями? Можно создать много подобных запросов на точное соответствие фамилии, а затем объединить результаты, но это неудобно и неэффективно. Родственных фамилий может быть много, а какие-то мы можем упустить.</p>
3 <p>Такой запрос выберет всех пользователей по фамилии Schumm. Но как быть с остальными фамилиями? Можно создать много подобных запросов на точное соответствие фамилии, а затем объединить результаты, но это неудобно и неэффективно. Родственных фамилий может быть много, а какие-то мы можем упустить.</p>
4 <h2>Как фильтровать по подстроке</h2>
4 <h2>Как фильтровать по подстроке</h2>
5 <p>В языке SQL существует возможность фильтрации строки по шаблону - подстроке, которую мы хотим найти. Для фильтрации текста по шаблону используется оператор LIKE, после которого мы указываем шаблон. В нашей задаче мы хотим найти людей, чьи фамилии начинаются на "Sch", поэтому шаблон будет выглядеть так:</p>
5 <p>В языке SQL существует возможность фильтрации строки по шаблону - подстроке, которую мы хотим найти. Для фильтрации текста по шаблону используется оператор LIKE, после которого мы указываем шаблон. В нашей задаче мы хотим найти людей, чьи фамилии начинаются на "Sch", поэтому шаблон будет выглядеть так:</p>
6 <p><a>View on DB Fiddle</a></p>
6 <p><a>View on DB Fiddle</a></p>
7 <p>В приведенном шаблоне символ % заменяет любое количество любых символов. В том числе и ноль символов.</p>
7 <p>В приведенном шаблоне символ % заменяет любое количество любых символов. В том числе и ноль символов.</p>
8 <p>Это значит, что в нашем запросе будут выбраны строки, в которых поле last_name начинается на "Sch", а дальше идет любое количество любых символов. Например, этому условию будут удовлетворять фамилии Schuster, Schumm, Schmitt и другие.</p>
8 <p>Это значит, что в нашем запросе будут выбраны строки, в которых поле last_name начинается на "Sch", а дальше идет любое количество любых символов. Например, этому условию будут удовлетворять фамилии Schuster, Schumm, Schmitt и другие.</p>
9 <p>Символ % можно поставить и в начало шаблона:</p>
9 <p>Символ % можно поставить и в начало шаблона:</p>
10 <p><a>View on DB Fiddle</a></p>
10 <p><a>View on DB Fiddle</a></p>
11 <p>В этом запросе будут выбраны все пользователи, чьи фамилии оканчиваются на "man": Wyman, Herman и другие.</p>
11 <p>В этом запросе будут выбраны все пользователи, чьи фамилии оканчиваются на "man": Wyman, Herman и другие.</p>
12 <p>Символ % можно также использовать и в середине шаблона оператора LIKE:</p>
12 <p>Символ % можно также использовать и в середине шаблона оператора LIKE:</p>
13 <p><a>View on DB Fiddle</a></p>
13 <p><a>View on DB Fiddle</a></p>
14 <p>Этот запрос выберет пользователей с фамилиями, которые начинаются на "Sch" и заканчиваются на "t" - например Schmitt.</p>
14 <p>Этот запрос выберет пользователей с фамилиями, которые начинаются на "Sch" и заканчиваются на "t" - например Schmitt.</p>
15 <p>Попробуем повторить последний запрос, но в шаблоне укажем фамилию с маленькой буквы:</p>
15 <p>Попробуем повторить последний запрос, но в шаблоне укажем фамилию с маленькой буквы:</p>
16 <p><a>View on DB Fiddle</a></p>
16 <p><a>View on DB Fiddle</a></p>
17 <p>Такой запрос не выберет ничего, потому что шаблон подстроки регистрозависимый, а фамилии хранятся в базе с большой буквой в начале. Чтобы не задумываться о регистре букв в шаблоне можно воспользоваться оператором ILIKE, который ищет строки без учета регистра</p>
17 <p>Такой запрос не выберет ничего, потому что шаблон подстроки регистрозависимый, а фамилии хранятся в базе с большой буквой в начале. Чтобы не задумываться о регистре букв в шаблоне можно воспользоваться оператором ILIKE, который ищет строки без учета регистра</p>
18 <p><a>View on DB Fiddle</a></p>
18 <p><a>View on DB Fiddle</a></p>
19 <p>Такой запрос более универсален и выберет строки с фамилиями, записанными как строчными, так и заглавными буквами: Schmitt, schmitt, SCHMITT, SchMiTt.</p>
19 <p>Такой запрос более универсален и выберет строки с фамилиями, записанными как строчными, так и заглавными буквами: Schmitt, schmitt, SCHMITT, SchMiTt.</p>
20 <p>Кроме поиска строк, подходящих под шаблон, можно сделать наоборот - вывести строки, на заданный шаблон совсем не похожие. Это делается с помощью оператора NOT LIKE. Например, мы хотим выбрать всех пользователей, фамилия которых не оканчивается на "man".</p>
20 <p>Кроме поиска строк, подходящих под шаблон, можно сделать наоборот - вывести строки, на заданный шаблон совсем не похожие. Это делается с помощью оператора NOT LIKE. Например, мы хотим выбрать всех пользователей, фамилия которых не оканчивается на "man".</p>
21 <p><a>View on DB Fiddle</a></p>
21 <p><a>View on DB Fiddle</a></p>
22 <p>Такой запрос вернет пользователей, чьи фамилии имеют любые окончания кроме "man".</p>
22 <p>Такой запрос вернет пользователей, чьи фамилии имеют любые окончания кроме "man".</p>
23 <h2>Выводы</h2>
23 <h2>Выводы</h2>
24 <p>В этом уроке мы рассмотрели оператор LIKE для фильтрации данных по подстроке. Теперь вы сможете создать шаблон поиска с символом %, который заменяет любое количество любых символов. Таким образом удобно искать данные, соответствующие шаблону - например, схожие фамилии пользователей.</p>
24 <p>В этом уроке мы рассмотрели оператор LIKE для фильтрации данных по подстроке. Теперь вы сможете создать шаблон поиска с символом %, который заменяет любое количество любых символов. Таким образом удобно искать данные, соответствующие шаблону - например, схожие фамилии пользователей.</p>