SQL - WHERE句
こんにちは、未来のデータベース魔术師たち!今日は、あなたのSQLツールキットの中でも特に強力なツール之一であるWHERE句に潜り込んでみましょう。あなたの近所の親切なコンピュータサイエンスの先生として、このエキサイティングな旅を案内します。それでは、バーチャルの魔杖(キーボード)を手に取り、SQLの魔法をかけましょう!
SQL WHERE句
巨大な図書館にいると仮定して、龍に関する特定の本を探しているとします。全部の本を一冊ずつ見るでしょうか?もちろんありません!図書館司書に龍に関する本を見つけてもらいます。SQLでは、WHERE句があなたの助手的な図書館司書です。
WHERE句は、特定の条件に基づいてデータをフィルタリングすることができます。データベースに「この条件に合った特定の情報だけを見せて欲しい」と言っているようなものです。
基本的な構文は以下の通りです:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
これは少し威圧感があるかもしれませんが、少しずつ分解して説明しますので、すぐにプロのようにデータをフィルタリングできるようになります!
WHERE句とSELECT文
まず、簡単な例から始めましょう。students
という名前のテーブルがあり、id
、name
、age
というカラムがあるとします。18歳のすべての学生を見つけたいと思っています。
SELECT *
FROM students
WHERE age = 18;
このクエリでは:
-
SELECT *
は、すべてのカラムを見たいという意味です。 -
FROM students
は、どのテーブルを照会しているかを指定しています。 -
WHERE age = 18
は、条件です。これは「年齢が正好18歳の行だけを表示して欲しい」と言っています。
それでは、これらの18歳の学生の名前だけを見たいと思っています:
SELECT name
FROM students
WHERE age = 18;
*
をname
に変更したところを見てください。これで、すべてのカラムではなく、名前だけが表示されます。
WHERE句とUPDATE文
WHERE句はSELECT文だけでなく、データを更新する際にも非常に便利です。例えば、名前が"Alice"のすべての学生の年齢を19歳に更新したいとします。
UPDATE students
SET age = 19
WHERE name = 'Alice';
このクエリは、名前がAliceである学生の年齢を19歳に変更します。WHERE句が無ければ、すべての学生の年齢を誤って変更してしまうでしょう!
WHERE句とIN演算子
では、18歳、19歳、20歳の学生を見つけたい場合はどうでしょうか?複数のOR条件を使用することもできますが、よりスマートな方法があります。それはIN演算子です。
SELECT *
FROM students
WHERE age IN (18, 19, 20);
このクエリは、年齢が18歳、19歳、または20歳のすべての学生を返します。これは「年齢がこのリストの値の中にあるか?」という意味です。
WHERE句とNOT IN演算子
では、18歳、19歳、20歳以外の学生を見つけたい場合はどうでしょうか?簡単です!INの前にNOTを追加します:
SELECT *
FROM students
WHERE age NOT IN (18, 19, 20);
これは、年齢が18歳、19歳、または20歳以外のすべての学生を返します。
WHERE句とLIKE演算子
時々、テキストデータのパターンを検索する必要があります。その際に便利なのがLIKE演算子です。例えば、名前が'A'で始まるすべての学生を見つけたいと思っています:
SELECT *
FROM students
WHERE name LIKE 'A%';
このクエリでは、'%'はワイルドカードであり、任意の文字列を一致させます。したがって、'A%'は「'A'で始まり、任意の文字列に続く」という意味です。
名前が'n'で終わる学生を見つけたい場合は:
SELECT *
FROM students
WHERE name LIKE '%n';
名前に'li'が含まれている学生を見つけたい場合は:
SELECT *
FROM students
WHERE name LIKE '%li%';
WHERE句とAND、OR演算子
しばしば、複数の条件を組み合わせる必要があります。その際にANDとOR演算子が便利です。
例えば、18歳で名前が'A'で始まる学生を見つけたい場合は:
SELECT *
FROM students
WHERE age = 18 AND name LIKE 'A%';
または、18歳または名前が'A'で始まる学生を見つけたい場合は:
SELECT *
FROM students
WHERE age = 18 OR name LIKE 'A%';
これらの演算子を組み合わせて複雑な条件を作成することもできます:
SELECT *
FROM students
WHERE (age = 18 OR age = 19) AND (name LIKE 'A%' OR name LIKE 'B%');
このクエリは、18歳または19歳で、名前が'A'または'B'で始まる学生を見つけます。
以下に学習した演算子の表を示します:
演算子 | 説明 | 例 |
---|---|---|
= | 等しい | WHERE age = 18 |
<> or != | 等しくない | WHERE age <> 18 |
> | より大きい | WHERE age > 18 |
< | より小さい | WHERE age < 18 |
>= | より大きいか等しい | WHERE age >= 18 |
<= | より小さいか等しい | WHERE age <= 18 |
IN | リストのいずれかの値に一致 | WHERE age IN (18, 19, 20) |
NOT IN | リストのいずれかの値に一致しない | WHERE age NOT IN (18, 19, 20) |
LIKE | パターン一致 | WHERE name LIKE 'A%' |
AND | 両方の条件が真 | WHERE age = 18 AND name LIKE 'A%' |
OR | いずれかの条件が真 | WHERE age = 18 OR name LIKE 'A%' |
そして、皆さん!WHERE句の使い方を学びました。実践を重ねることで完璧になります。自分でクエリを書いて、さまざまな条件を試してみてください。そして、WHERE句が常にあなたが探しているものを見つけることを祈っています!
Credits: Image by storyset