MySQL - NOT REGEXP演算子
NOT REGEXPの導入
こんにちは、データベースの熱心な愛好家たち!今日は、MySQLのNOT REGEXP演算子の興味深い世界に飛び込みます。あなたの親切な近所のコンピュータ教師として、私はこのトピックを最初に学んだときと同じ兴奋をあなたに伝えながら案内します。信じてください、このレッスンの終わりまでに、あなたはこの強力なツールをデータベースの魔術師のように使いこなすでしょう!
NOT REGEXPとは?
具体的な内容に入る前に、まずNOT REGEXPが実際に何を意味するか理解しましょう。簡単な言葉で言えば、NOT REGEXPはエクスクルーシブなクラブのボーイッシュのように、特定のパターンを検索結果から排除します。
REGEXPは正規表現を意味し、検索パターンを形成する文字のシーケンスです。NOTを前に付けることで、私たちは「このパターンに一致しないすべてのものを表示してくれ!」と言っています。
MySQL NOT REGEXP演算子の実際の使用
では、実際にどのように動作するかを確認しましょう。まず、book_club
というテーブルとbook_title
というカラムがあると仮定します。タイトルに「ミステリー」という単語がないすべての本を探したいとします。
SELECT book_title
FROM book_club
WHERE book_title NOT REGEXP 'mystery';
この例では、MySQLは「ミステリー」という単語を含まないすべての書籍タイトルを返します。図書館の司書にミステリー以外のすべての本を尋ねるのと同じです。すごく便利ですね!
大文字と小文字の区別
重要なポイントとして、デフォルトではREGEXP(およびNOT REGEXP)は大文字小文字を区別しません。したがって、「mystery」、「Mystery」、「mYsTeRy」などすべてが前の例で排除されます。大文字小文字を区別したい場合は、BINARYキーワードを使用します。
SELECT book_title
FROM book_club
WHERE book_title NOT REGEXP BINARY 'mystery';
この場合、小文字の「mystery」のみが排除され、「Mystery」や「MYSTERY」はまだ結果に表示されます。
高度なNOT REGEXPパターン
少し進んだパターンを見てみましょう。NOT REGEXPは非常に多様です!
複数の単語を排除
タイトルに「ミステリー」または「スリラー」がある本を排除したい場合はどうでしょうか?
SELECT book_title
FROM book_club
WHERE book_title NOT REGEXP 'mystery|thriller';
|
シンボルは「または」演算子として機能します。このクエリは「ミステリー」または「スリラー」のいずれかを含まないすべての本を返します。
先頭または末尾に単語がない場合
タイトルが「The」で始まらない本を探したい場合はどうでしょうか?
SELECT book_title
FROM book_club
WHERE book_title NOT REGEXP '^The';
^
シンボルはパターンを文字列の先頭に固定します。同様に、タイトルが「Chronicles」で終わらない本を探す場合には以下のようになります:
SELECT book_title
FROM book_club
WHERE book_title NOT REGEXP 'Chronicles$';
$
シンボルはパターンを文字列の末尾に固定します。
クライアントプログラムを使用したNOT REGEXP演算子
では、クライアントプログラムでNOT REGEXPを使用する方法を見てみましょう。PythonとMySQL Connectorライブラリを使用する例を示しますが、他の言語でも同じ概念が適用されます。
import mysql.connector
# 接続を確立
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="book_club_db"
)
mycursor = mydb.cursor()
# NOT REGEXPクエリを実行
mycursor.execute("SELECT book_title FROM book_club WHERE book_title NOT REGEXP 'fantasy|sci-fi'")
# 結果を取得して表示
for x in mycursor:
print(x)
このスクリプトはデータベースに接続し、タイトルに「fantasy」または「sci-fi」を含まないすべての本を探すクエリを実行し、結果を表示します。
一般的なNOT REGEXPパターン
以下に、役立つ可能性のある一般的なパターンをいくつか紹介します:
パターン | 説明 | 例 |
---|---|---|
[^...] |
ブラケット内にない任意の文字を一致 |
'[^aeiou]' は任意の非母音を一致 |
.* |
任意の文字のシーケンスを一致 |
'not.*end' は「not」と「end」の間に任意の文字を一致 |
\d |
任意の数字を一致 |
'\d' は任意の1桁の数字を一致 |
\D |
任意の非数字を一致 |
'\D' は任意の1桁の非数字を一致 |
\s |
任意の空白文字を一致 |
'\s' は空白、タブ、改行を一致 |
\S |
任意の非空白文字を一致 |
'\S' は空白、タブ、改行以外の任意の文字を一致 |
結論
そして、未来のデータベースの達人たち!NOT REGEXP演算子の基本的な使用から高度なパターンまでを探求しました。覚えておいてください、どんな強力なツールでも、熟練するには練習が必要です。さまざまなパターンを試してみて、どんな結果が得られるかを確認してください。
私の教師生活の中で、NOT REGEXPに頭を悩ませていた生徒が、複雑なクエリで無邪気に使用するようになるのを見てきました。あなたも彼らに加わる道を歩んでいます!
最後に、ちょっとしたデータベースのユーモアをあなたに:開発者がなぜ仕事を辞めたのか?彼は給料の話題について「TABLE」できないかったのです!(わかりますか?TABLE?いいえ、自分で外に出ますね...)
練習を続け、好奇心を持ち、ハッピークエリを!
Credits: Image by storyset