What is Pattern matching in SQL and how it is done?

In SQL, we sometimes need to filter our resultset based on some pattern matching techniques. SQL has a standard pattern matching technique using the 'LIKE' operator. But, it also supports the regular expression pattern matching for better functionality.

Generally, the REGEXP_LIKE(column_name, 'regex') function is used for pattern matching in SQL. SQL also supports some operators that work similar to this function, these are: 'REGEXP' and 'RLIKE' operator. So in this blog, we will learn about all those functions and operators that provide pattern matching functionality in SQL.

Note: In this blog, we will take all the examples using the MySQL database only. We'll be using the below-mentioned course table for demonstrating the examples. The table is as follows:

Now let us learn about these pattern-matching functions and operators one-by-one.

LIKE Operator

The LIKE operator provides standard pattern matching in SQL that is always used after a WHERE clause. It matches any pattern based on some conditions provided using the wildcard characters.

Some of the commonly used wildcard characters in MySQL are as follows:

  • '%' represents zero or more characters.
  • '_' represents exactly 1 character.

In MySQL the syntax of the LIKE operator can be as follows:

SELECT [table.columns..] FROM table WHERE table.column LIKE 'wildcard_characters';

Now let us take an example using the wildcard characters 'd%' that searches for 'd' in the beginning and then there can be zero or any number of characters because % denotes zero or more characters.

The MySQL query for the above operation can be:

SELECT * FROM course WHERE course_name LIKE 'd%';

The output for the above query can be as follows:

It is to be noted that pattern matching in MySQL is case insensitive. In the above example, you can see that the patterns starting with 'D' are also present in the output.

Note: To make the pattern matching case sensitive in MySQL, the 'BINARY' operator is used.

The query for the above pattern matching using the BINARY operator along with the LIKE operator can be as follows:

SELECT * FROM course WHERE course_name LIKE BINARY 'd%';

The output for the above query can be as follows:

In the above output, you can see that the pattern matching is performed in a case sensitive manner. Thus, we do not get any resultset as there are no strings starting with the d character.

Now, if we use the wildcard characters %s, it will search for all such patterns that can have 0 or any number of characters in the beginning but has a 's' character in the end.

The MySQL query for pattern matching using the above wildcard characters and LIKE operator can be as follows:

SELECT * FROM course WHERE course_name LIKE '%s';

The output for the above query can be as follows:

Now, if we use the wildcard characters ____(4 underscores), it will search for exactly 4 characters.

The MySQL query for pattern matching using the above wildcard characters and LIKE operator can be as follows:

SELECT * FROM course WHERE course_name LIKE '____';

The output for the above query can be as follows:

Now, if we use the wildcard characters D%s, it will search for all such patterns that have a D character, in the beginning, a s character at the end, and 0 or any number of characters in between them.

The MySQL query for pattern matching using the above wildcard characters and LIKE operator can be as follows:

SELECT * FROM course WHERE course_name LIKE 'D%s';

The output for the above query can be as follows:

Note: For using negation in pattern matching, the NOT operator is used in MySQL.

The syntax for using the NOT operator along with the LIKE operator can be as follows:

SELECT [table.columns..] FROM table WHERE table.column NOT LIKE 'wildcard_characters';

The MySQL query for pattern matching using the above wildcard characters, the LIKE and NOT operators can be as follows:

SELECT * FROM course WHERE course_name NOT LIKE 'D%s';

The output for the above query can be as follows:

REGEXP_LIKE(column_name, 'regex') Function

MySQL also has an extended regular expression pattern matching using the REGEXP_LIKE(column_name, 'regex') function, which takes the column name and the regular expression as parameters.

Some of the commonly used characters in MySQL for regular expression are as follows:

  • '^' represents the starting of the regular expression
  • '$' represents the end of the regular expression
  • '.' represents a single character

The syntax for the REGEXP_LIKE(column_name, 'regex') function can be as follows:

SELECT [table.columns..] FROM table WHERE REGEXP_LIKE (table.column, 'regex');
Note: In all the below examples, we'll use the regex - [A-Za-z]{4,} that accepts all the characters from A to Z in both the cases i.e. upper and lower. This regular expression will accept at least 4 characters and will not allow blank spaces in the pattern.

The MySQL query for pattern matching using the above regular expression in the function can be as follows:

SELECT * FROM course WHERE REGEXP_LIKE (course_name, '^[A-Za-z]{4,}$');

The output for the above query can be as follows:

Here also, the NOT operator is used for negation. The MySQL query for pattern matching using the above regular expression and NOT operator in the function can be as follows:

SELECT * FROM course WHERE NOT REGEXP_LIKE (course_name, '^[A-Za-z]{4,}$');

The output for the above query can be as follows:

REGEXP Operator

The REGEXP operator performs exactly the same functionality as the REGEXP_LIKE(column_name, 'regex') function.

The syntax for the REGEXP operator can be as follows:

SELECT [table.columns..] FROM table WHERE table.column REGEXP 'regex';

The MySQL query for pattern matching using the same regular expression as above in the REGEXP operator can be as follows:

SELECT * FROM course WHERE course_name REGEXP '^[A-Za-z]{4,}$';

The output for the above query can be as follows:

The NOT operator can be used along with the REGEXP operator in order to perform negation. The MySQL query for pattern matching using the same regular expression, REGEXP and NOT operator can be as follows:

SELECT * FROM course WHERE course_name NOT REGEXP '^[A-Za-z]{4,}$';

The output for the above query can be as follows:

RLIKE Operator

The RLIKE operator also performs the same functionality as the above two.

The syntax for the RLIKE operator can be as follows:

SELECT [table.columns..] FROM table WHERE table.column RLIKE 'regex';

The MySQL query for pattern matching using the same regular expression as above in the RLIKE operator can be as follows:

SELECT * FROM course WHERE course_name RLIKE '^[A-Za-z]{4,}$';

The output for the above query can be as follows:

Here also, the NOT operator can be used along with the RLIKE operator in order to perform negation. The MySQL query for pattern matching using the same regular expression, RLIKE and NOT operator can be as follows:

SELECT * FROM course WHERE course_name NOT RLIKE '^[A-Za-z]{4,}$';

The output for the above query can be as follows:

This is all about the various pattern-matching techniques in SQL. Hope you learned something new today. That's it for this blog.

Do share this blog with your friends to spread the knowledge. Visit our YouTube channel for more content. You can read more blogs from here.

Keep Learning :)

Team AfterAcademy!