Оператор MySQL LIKE
Оператор MySQL LIKE проверяет, соответствует ли конкретная символьная строка указанному шаблону.
expr LIKE pat [ESCAPE 'escape_char']
- Сопоставление с образцом с использованием простого сравнения регулярных выражений SQL. Возвращает 1 (ИСТИНА) или 0 (ЛОЖЬ). Если expr или pat имеют значение NULL, результат равен NULL.
- Шаблон не обязательно должен быть литеральной строкой. Например, его можно указать как строковое выражение или столбец таблицы.
- В соответствии со стандартом SQL, LIKE выполняет сопоставление для каждого символа, поэтому он может давать результаты, отличные от оператора сравнения =.
- Оператор LIKE использует WILDCARDS (то есть%, _) для сопоставления с шаблоном. Это очень полезно для проверки наличия в записях определенного символа или строки.
% используется для соответствия любому количеству символов, даже нулю символов.
_ используется для соответствия ровно одному символу.
Чтобы проверить наличие буквенных символов подстановочного знака, перед ним должен быть escape-символ. Если вы не укажете символ ESCAPE, подразумевается «/».
/% используется для соответствия одному символу «%».
/ _ Соответствует одному символу «_»
Версия MySQL: 5.6
Пример: оператор MySQL LIKE
Следующая инструкция MySQL сканирует всю таблицу авторов, чтобы найти любое имя автора, имя которого начинается с символа «W», за которым следуют любые символы.
SELECT aut_name, country FROM author WHERE aut_name LIKE 'W%';
mysql> mysql> SELECT aut_name, страна -> ОТ автора -> ГДЕ aut_name LIKE 'W%'; + ----------------- + --------- + | aut_name | страна | + ----------------- + --------- + | Уильям Нортон | Великобритания | | Уильям Моэм | Канада | | Уильям Энтони | Великобритания | + ----------------- + --------- + 3 ряда в наборе (0,05 сек)
List of authors whose name starts with 'w', along with their country:
Publisher Country query('SELECT aut_name, country FROM author WHERE aut_name LIKE "W%"') as $row) < echo ""; echo "" . $row['aut_name'] . " "; echo "" . $row['country'] . " "; echo " "; > ?>
Publisher Country %> catch (Exception ex) < out.println("Can’t connect to database."); >%>
Пример: оператор MySQL LIKE, соответствующий концу
Следующая инструкция MySQL сканирует всю таблицу авторов, чтобы найти любого автора, имя которого заканчивается строкой ‘on’.
SELECT aut_name, country FROM author WHERE aut_name LIKE '%on';
mysql> SELECT aut_name, страна -> ОТ автора -> ГДЕ aut_name LIKE '% on'; + ---------------- + --------- + | aut_name | страна | + ---------------- + --------- + | Уильям Нортон | Великобритания | | Томас Мертон | США | | Пирс Гибсон | Великобритания | | Джозеф Мильтон | США | + ---------------- + --------- + 4 ряда в наборе (0,00 сек)
Пример: оператор MySQL LIKE, соответствующий строке
Следующая инструкция MySQL сканирует всю таблицу авторов, чтобы найти любого автора, в имени которого есть строка «an». Имя автора хранится в столбце aut_name.
SELECT aut_name, country FROM author WHERE aut_name LIKE '%an%';
mysql> SELECT aut_name, страна -> ОТ автора -> ГДЕ aut_name LIKE '% an%'; + ---------------------- + ----------- + | aut_name | страна | + ---------------------- + ----------- + | Уильям Энтони | Великобритания | | С.Б.Сваминатан | Индия | | Томас Морган | Германия | | Джон Бежеман Хантер | Австралия | | Эван Хайек | Канада | | Батлер Андре | США | + ---------------------- + ----------- + 6 рядов в наборе (0,00 сек)
Пример: оператор MySQL LIKE, соответствующий указанной строке
Следующее утверждение MySQL ищет всех авторов, чьи родные города, такие как «Лондон», «Лэндон» и т. Д., Подстановочный знак подчеркивания используется для упоминания одного символа.
SELECT aut_name, country,home_city FROM author WHERE home_city LIKE 'L_n_on';
mysql> ВЫБРАТЬ aut_name, страну, home_city -> ОТ автора -> ГДЕ home_city LIKE 'L_n_on'; + -------------- + --------- + ----------- + | aut_name | страна | home_city | + -------------- + --------- + ----------- + | Пирс Гибсон | Великобритания | Лондон | | Си Джей Уайльд | Великобритания | Лондон | + -------------- + --------- + ----------- + 2 ряда в наборе (0,00 сек)
Пример: оператор MySQL LIKE, соответствующий управляющему символу
Для поиска символа подстановки или комбинации символа подстановки и любого другого символа символу подстановки должен предшествовать строка ESCAPE. В MySQL строка ESCAPE по умолчанию — «/». Следующая инструкция MySQL возвращает те записи, чьи isbn_no содержат «_16».
SELECT book_name,isbn_no,no_page,book_price FROM book_mast WHERE isbn_no LIKE '%\_16%';
mysql> SELECT book_name, isbn_no, no_page, book_price -> ОТ book_mast -> ГДЕ isbn_no НРАВИТСЯ "% / _ 16%"; + --------------------------------- + ------------- + - -------- + ------------ + | book_name | isbn_no | no_page | book_price | + --------------------------------- + ------------- + - -------- + ------------ + | Сети и Телекоммуникации | 00009790_16 | 95 | 45,00 | + --------------------------------- + ------------- + - -------- + ------------ + 1 ряд в наборе (0,00 сек)
Пример: оператор MySQL LIKE, соответствующий начальной и конечной строке
Подстановочные знаки также можно использовать в середине шаблона поиска. Следующая инструкция MySQL найдет всех авторов, чьи имена начинаются с ‘t’ и заканчиваются на ‘n’.
SELECT aut_name, country FROM author WHERE aut_name LIKE 't%n';
mysql> SELECT aut_name, страна -> ОТ автора -> ГДЕ aut_name LIKE 't% n'; + --------------- + --------- + | aut_name | страна | + --------------- + --------- + | Томас Морган | Германия | | Томас Мертон | США | + --------------- + --------- + 2 ряда в наборе (0,00 сек)
Слайд-шоу функции сравнения MySQL и операторов
Предыдущий: Меньше чем оператор ( <)
Далее: НЕ МЕЖДУ И
PHP MySQL — WHERE and LIKE
To search for specific values, to extract only those records that fulfill a specified criterion, add a WHERE clause to the SELECT query.
The WHERE clause is used to filter records, and is added after the name of the table.
— Syntax :
SELECL column_name(s) FROM table_name WHERE condition(s)
» condition(s) » — is one ore more conditionals that specifies the select criteria. These conditionals can use comparison, arithmetic and logical operators.
The table below lists the most common operators in MySQL WHERE expressions:
Operator | Meaning | Example |
---|---|---|
= | Equals | WHERE `id`=3 |
Less than | WHERE `id` | |
> | Greater than | WHERE `id`>3 |
Less than or equal to | WHERE `id` | |
>= | Greater than or equal to | WHERE `id`>=3 |
!= (also <>) | Not equal to | WHERE `id`!=3 |
IS NOT NULL | Has a value | WHERE `id` IS NOT NULL |
IS NULL | Does not have a value | WHERE `email` IS NULL |
BETWEEN min AND max | Within a specific range (min and max) | WHERE `id` BETWEEN 2 and 4 |
NOT BETWEEN min AND max | Not within a specific range (min and max) | WHERE `id` NOT BETWEEN 2 and 4 |
IN(val1, val2, val3) | Found within a list of values | WHERE `id` IN(1, 3, 4) |
OR | Where one of two conditionals is true | WHERE `id`>3 OR `name`=’MarPlo’ |
AND | Where both conditionals are true | WHERE `id`>3 AND `name`=’MarPlo’ |
— Example (selects all rows from «users» table where » name=MarPlo » and output the «id» and «email»):
$name = 'Marplo'; // sets the name in a variable // SELECT sql query $sql = "SELECT `id`, `email` FROM `users` WHERE `name`='$name'"; // perform the query and store the result $result = $conn->query($sql); // if the $result contains at least one row if ($result->num_rows > 0) < // output data of each row from $result while($row = $result->fetch_assoc()) < echo '
id: '. $row['id']. ' - email: '. $row['email']; > > else < echo '0 results'; >$conn->close(); ?>
— As you can see, you don’t have to select a column on which you are performing a WHERE condition. The reason for this is that the columns listed after SELECT dictate only what columns to return and the columns listed in a WHERE dictate which rows to return.
— Notice, in the $sql query is used a variable ($name) which contains the name, this variable is aded within single quotes in the query becouse MySQL need to get its value as a string.
The example above will output:
• The WHERE clause can also be used with ORDER BY and LIMIT options to order and limit the data in the recordset.
Example: $sql ;
• You can perform mathematical calculations within your queries using the mathematic addition (+), subtraction (-), multiplication (*), division (/), and modulo (%) characters.
Example: $sql = «SELECT `name`, `pass` FROM `users` WHERE `id`=($x + $y)»;
LIKE, NOT LIKE
- % — matches any sequence of characters or none.
- _ (an underscore), matches exactly one character.
Examples of queries with LIKE /NOT LIKE
— This WHERE clause matches MarPlo, marius, Mars, and so on, but not Omar.
— This WHERE clause matches Mar, Omar, Romar, and so on, but not Mars. (‘ %mar% ‘ matches Mar s, Mar ius, Ro mar s, etc.).
— This query will return all rows whose «name» value not begins with Mar.
— This query will return all rows whose «name» value begins with Mar and has four characters (Mars, Mara, mar8, etc.).
Queries with LIKE terms are generally slower because they can’t take advantage of indexes.
To search for a literal percentage sign or underscore in text, precede it with a backslash ( \% or \_ ).
The underscore can be used in combination with itself; (example, LIKE ‘_ _’ would find any two-letter combination).
The LIKE keyword must always be followed by a string, even if the search term is limited to numbers.
PDO LIKE
Summary: in this tutorial, you’ll learn how to use PDO to execute a query with the LIKE operator.
Introduction to the SQL LIKE operator
The LIKE operator returns true if a character string matches a specified pattern. Typically, a pattern includes wildcard characters like:
For example, the %er% will match any string that contains the string er , e.g., peter , understand , etc.
Typically, you use the LIKE operator in the WHERE clause of the SELECT , UPDATE , and DELETE statement.
Execute a query that contains the LIKE operator in PDO
To execute a query that contains a LIKE operator in PDO, you need to construct the pattern upfront.
For example, to select the book with titles that contain the string ‘es, you first construct a SELECT statement like this:
$sql = 'SELECT book_id, title FROM books WHERE title LIKE :pattern';
Code language: PHP (php)
And then bind the string ‘%es%’ to the prepared statement.
The following example illustrates how to execute a query that includes the LIKE operator:
/** * Find books by title based on a pattern */ function find_book_by_title(\PDO $pdo, string $keyword): array < $pattern = '%' . $keyword . '%'; $sql = 'SELECT book_id, title FROM books WHERE title LIKE :pattern'; $statement = $pdo->prepare($sql); $statement->execute([':pattern' => $pattern]); return $statement->fetchAll(PDO::FETCH_ASSOC); > // connect to the database $pdo = require 'connect.php'; // find books with the title matches 'es' $books = find_book_by_title($pdo, 'es'); foreach ($books as $book) < echo $book['title'] . '
'; >
Code language: PHP (php)
The function find_book_by_title() returns the books with the title that matches with the $keyword .
First, make the pattern by adding the wildcard characters to the beginning and end of the $keyword :
$pattern = '%' . $keyword . '%';
Code language: PHP (php)
Second, construct an SQL statement that contains a LIKE operator in the WHERE clause:
$sql = 'SELECT book_id, title FROM books WHERE title LIKE :pattern';
Code language: PHP (php)
Third, create a prepared statement:
$statement = $pdo->prepare($sql);
Code language: PHP (php)
After that, execute the statement with the value that comes from the pattern:
$statement->execute([':pattern' => $pattern]);
Code language: PHP (php)
Finally, return all rows from the result set by using the fetchAll() method:
return $statement->fetchAll(PDO::FETCH_ASSOC);
Code language: PHP (php)
The following code find books with the title contains the keyword ‘es’ :
// connect to the database $pdo = require 'connect.php'; // find books with the title matches 'es' $books = find_book_by_title($pdo, 'es'); foreach ($books as $book) < echo $book['title'] . '
'; >
Code language: PHP (php)
Marcus Makes a Movie Box of Butterflies
Code language: PHP (php)