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 がサポートする文字列または部分文字列を検索する方法を学びました。そして、理解するために出力を観察します。