SQLiteのWHERE句とLIKE演算子を使いこなす
SQLiteで特定の文字列を含む行を選択する方法
例:
SELECT * FROM テーブル名 WHERE 列名 LIKE '%検索文字列%';
解説:
SELECT * FROM テーブル名
: テーブル名からすべての列を選択します。WHERE 列名 LIKE '%検索文字列%'
:WHERE
: 絞り込み条件を指定します。列名
: 検索対象となる列を指定します。LIKE
: パターンマッチングを行います。'%検索文字列%'
:%
: 0文字以上の任意の文字列を表します。検索文字列
: 検索したい文字列を指定します。
ポイント:
- 大文字と小文字を区別したい場合は、
LIKE
演算子の代わりにGLOB
演算子を使用します。 - 部分一致だけでなく、前方一致や後方一致など、さまざまなパターンマッチングが可能です。詳細はSQLiteのドキュメントを参照してください。
例:商品名に「スマホ」を含む商品をすべて選択する
SELECT * FROM 商品テーブル WHERE 商品名 LIKE '%スマホ%';
このクエリは、商品テーブル
から、商品名
列に「スマホ」という文字列を含むすべての商品を選択します。
例:著者名が「山田太郎」で始まる書籍をすべて選択する
SELECT * FROM 書籍テーブル WHERE 著者名 LIKE '山田太郎%';
このクエリは、書籍テーブル
から、著者名
列が「山田太郎」で始まる書籍をすべて選択します。
その他のパターンマッチング:
- 前方一致:
LIKE '検索文字列%'
演習:
- 自分のSQLiteデータベースで、
LIKE
演算子を使ってさまざまなパターンマッチングを試してみましょう。 GLOB
演算子を使って、大文字と小文字を区別するパターンマッチングを試してみましょう。
テーブル: products
CREATE TABLE products (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
price INTEGER NOT NULL
);
データ:
INSERT INTO products (name, price) VALUES ('iPhone 14', 100000);
INSERT INTO products (name, price) VALUES ('Galaxy S23', 90000);
INSERT INTO products (name, price) VALUES ('Google Pixel 7', 80000);
INSERT INTO products (name, price) VALUES ('Macbook Air M2', 150000);
INSERT INTO products (name, price) VALUES ('iPad Pro 12.9', 120000);
価格が10万円以上の商品をすべて選択
SELECT * FROM products WHERE price >= 100000;
結果:
id | name | price
--- | -------------- | --------
1 | iPhone 14 | 100000
4 | Macbook Air M2 | 150000
5 | iPad Pro 12.9 | 120000
SELECT * FROM products WHERE name LIKE '%スマホ%';
id | name | price
--- | -------------- | --------
1 | iPhone 14 | 100000
2 | Galaxy S23 | 90000
メーカー名が「Apple」で始まる商品をすべて選択
SELECT * FROM products WHERE name LIKE 'Apple%';
id | name | price
--- | -------------- | --------
4 | Macbook Air M2 | 150000
5 | iPad Pro 12.9 | 120000
SELECT * FROM products WHERE price BETWEEN 80000 AND 100000;
id | name | price
--- | -------------- | --------
3 | Google Pixel 7 | 80000
SELECT * FROM products WHERE stock >= 10;
(no rows)
商品名が「A」から始まる商品をすべて選択
SELECT * FROM products WHERE name LIKE 'A%';
(no rows)
SELECT * FROM products WHERE name LIKE '%A';
(no rows)
商品名が「iPhone」と完全に一致する商品をすべて選択
SELECT * FROM products WHERE name = 'iPhone';
id | name | price
--- | -------------- | --------
1 | iPhone 14 | 100000
商品名が「iPhone」または「Galaxy」を含む商品をすべて選択
SELECT * FROM products WHERE name LIKE '%iPhone%' OR name LIKE '%Galaxy%';
id | name | price
--- | -------------- | --------
1 | iPhone 14 | 100000
2 | Galaxy S23 | 90000
SELECT * FROM products WHERE price < 100000 AND stock >= 5;
id | name | price
--- | -------------- | --------
2 | Galaxy S23 | 90000
3 | Google Pixel 7 | 80000
価格が昇順に並べられた商品をすべて選択
SELECT * FROM products ORDER BY price ASC;
id | name | price
--- | -------------- | --------
3 | Google Pixel 7 | 80
SQLiteで特定の文字列を含む行を選択するその他の方法
SELECT * FROM products WHERE name IN ('iPhone 14', 'Galaxy S23');
このクエリは、products
テーブルから、name
列が「iPhone 14」または「Galaxy S23」のいずれかである行をすべて選択します。
EXISTSサブクエリを使用する
SELECT * FROM products
WHERE EXISTS (
SELECT * FROM reviews
WHERE reviews.product_id = products.id
AND reviews.rating >= 4
);
このクエリは、products
テーブルから、レビューの平均評価が4以上である商品をすべて選択します。
CASE式を使用する
SELECT * FROM products
ORDER BY CASE
WHEN name LIKE '%スマホ%' THEN 1
ELSE 2
END;
このクエリは、products
テーブルから、商品名を昇順に並べ替えます。商品名に「スマホ」を含む商品は、名前の前に「1」が表示されます。
REGEXP演算子を使用する
SELECT * FROM products WHERE name REGEXP '^A.*';
FTS5を使用する
SELECT * FROM products
WHERE name MATCH 'スマホ';
FTS5は、全文検索機能を提供します。このクエリは、products
テーブルから、商品名に「スマホ」を含む商品をすべて選択します。
SQLiteで特定の文字列を含む行を選択するには、さまざまな方法があります。使用する方法は、検索条件や目的によって異なります。
sqlite