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>