MySQL で行を検索して部分文字列を検索する
状況によっては、テーブル内の文字列またはサブ文字列を検索する必要があります。
たとえば、employee テーブルの Gmail ユーザーの数を知りたいとします。もう 1つの例は、employee テーブルで Je で始まるすべての firstname を検索することです。
ここでは、文字列または部分文字列の検索が図に示されています。検索にはさまざまな方法があります。標準 SQL の場合は POSITION()、MySQL の場合は LOCATE() と%ワイルドカード、Oracle の場合は INSTR()。
MySQL でサポートされているメソッドを学習し、MySQL でサブストリングを見つけるために行を検索するための最良かつ簡単な方法を観察します。それらすべてを見て、自分のケースに最適な方法を決定できます。
方法 1:%ワイルドカードを使用して文字列/部分文字列を検索する
%ワイルドカードは、文字列内の 1つまたは複数の文字を置き換えるために使用されます。このワイルドカードは LIKE 演算子で使用され、LIKE 演算子は WHERE 句で使用されます。
練習するために、employee という名前の新しいテーブルを作成しました。以下に示すサンプルコードを使用して、同じものを作成し、データを入力できます。
このようにして、同じページを見ながら学習することができます。
#Create employee table
CREATE TABLE employee(
id int not null primary key,
firstname varchar(60) not null,
lastname varchar(60) not null,
gender varchar(30) not null,
city varchar(40) not null,
email varchar(60) not null
);
#Insert data into employee table.
INSERT INTO employee VALUES
(1,'James','Robert','Male','London','jrober@gmail.com'),
(2,'Mary','Patricia','Female','Berlin','patricia@gmail.com'),
(3,'John','Michael','Male','Paris','johnmichael@yahoo.com'),
(4,'Jennifer','Linda','Female','Lisbon','jennifer@hotmail.com'),
(5,'William','David','Male','Rome','wdwilliam@gmail.com'),
(6,'Elizabeth','Barbara','Female','Dublin','elibarbara011@yahoo.com'),
(7,'Richard','Joseph','Male','Oslo', 'richard@gmail.com'),
(8,'Susan','Jessica','Female','Hamburg','susan01@yahoo.com'),
(9,'Thomas','Charles','Male','Texas', 'thomas.charles@hotmail.com'),
(10,'Karen','Nancy','Female','Washington','karenofficial@gmail.com');
SELECT * FROM employee;
出力:

%ワイルドカードを使用して文字列またはサブ文字列を見つけるために行を検索するためのさまざまなシナリオを検討することを理解しましょう。
シナリオ 1:すべての Gmail ユーザーを検索します。つまり、メールで部分文字列を見つける必要があります。
SELECT firstname, lastname from employee where email LIKE '%@gmail.com';
上記の SQL クエリは、email 文字列に gmail.com が含まれている employee テーブルから firstname と lastname を選択します。
出力:

シナリオ 2:文字 a で終わる名前を選択します。ここに、文字列 lastname があります。
SELECT lastname FROM employee WHERE lastname LIKE '%a';
出力:

シナリオ 3:L で始まり、n で終わり、間に 4 文字の city 名を見つけましょう。1つのアンダースコア(_)は 1 文字用です。
SELECT city FROM employee WHERE city LIKE 'L____n';
出力:

ワイルドカード文字の詳細については、こちらをご覧ください。
方法 2:LOCATE() 関数を使用して文字列/部分文字列を検索する
LOCATE 関数は、文字列内で最初に出現する部分文字列を返します。元の文字列内に部分文字列が見つからない場合は、0 を返します。
この関数は大文字と小文字を区別しない検索を実行します。つまり、HELLO と hello は LOCATE 関数と同じです。次の構文で使用されます。
LOCATE(substring, string, start)
上記の構文では、substring および string という名前の最初の 2つのパラメーターは必須ですが、start という名前の 3 番目のパラメーターはオプションです。
出力がどのように見えるかについて質問があるかもしれませんか?次の画像で理解しましょう。

SELECT LOCATE("hotmail", email) FROM employee;
出力:

まとめ
さまざまなデータベースプラットフォームがさまざまな方法をサポートしていると結論付けました。LOCATE() やワイルドカードは MySQL と互換性があります。
例を使用して、MySQL がサポートする文字列または部分文字列を検索する方法を学びました。そして、理解するために出力を観察します。
