本記事では、海外のSQL学習サイト【SQL Bolt】を利用して、データベース初心者向けにSQLの基本を解説します。
第3回は「SQL Lesson 3: Queries with constraints (Pt. 2)」、前回につづいて制約条件つきのクエリについてです。
ざっくり和訳
前回のLesson2では、表の中から行を取り出す際に、WHERE句を使って数値に関する条件指定をする方法を学びました。
今回は、WHERE句を使って文字列に関する条件指定をする方法を解説していきます。
文字列に関する条件式の書き方
まず、SQL Boltの原文にあった表を日本語に翻訳してみました。
条件式 | 条件の意味 | |
---|---|---|
① | = | 文字列が完全に一致する(大文字と小文字を区別する) |
② | != または <> | 文字列が完全に一致しない(大文字と小文字を区別する) |
③ | LIKE | 文字列が一致する(大文字と小文字を区別しない) |
④ | NOT LIKE | 文字列が一致しない(大文字と小文字を区別しない) |
⑤ | % | 文字列の任意の場所で、0文字以上の連続した文字と一致する(LIKEまたはNOT LIKEと併用) |
⑥ | – | 文字列の任意の場所で使用し、1文字に一致する(LIKEまたはNOT LIKEと併用) |
⑦ | IN (…) | 文字列が … の中に存在する |
⑧ | NOT IN (…) | 文字列が … の中に存在しない |
正直わかりづらい…
ということで、表の①~⑧について1つずつ例を挙げて説明していきます。
条件式の例
数値条件のときは「WHERE id = 3」のように書きましたが、文字列にかかわる条件のときは「WHERE name = “abc”」のように「””」ダブルクォーテーションを付ける必要があります。
ここからは、「SELECT * FROM テーブル名」に続く条件部分のみ取り出して紹介していきます
- ① WHERE name = “Abc”
-
nameの列の値が「Abc」である行が取り出さる。「abc」や「aBc」など、大文字・小文字が一致しないものは取り出されない。
- ② WHERE name != “Abc” または WHERE name <> “Abc”
-
nameの列の値が「Abc」ではない行が取り出される。「abc」や「aBc」など、大文字・小文字が一致しないものは取り出されない。
- ③ WHERE name LIKE “Abc”
-
nameの列の値が、大文字・小文字関係なく「abc」である行が取り出される。「Abc」だけでなく「abc」や「aBc」も取り出される。
- ④ WHERE name NOT LIKE “Abc”
-
nameの列の値が、大文字・小文字関係なく「abc」でない行が取り出される。「Abc」だけでなく「abc」や「aBc」は取り出されない。
- ⑤ WHERE name LIKE “abc%”
-
大文字・小文字関係なく「abc」の後ろに0文字以上の文字が付いているものが取り出される。つまり、nameの列の値が、大文字・小文字関係なく「abc」で始まる行が取り出される。
- ⑥ WHERE name LIKE “abc_”
-
大文字・小文字関係なく「abc」の後ろに1文字ついているものが取り出される。つまり、nameの列の値が「abcc」「ABCc」などが取り出される。
- ⑦ WHERE name IN (“abc”, “abcc”, “aabc”)
-
nameの列の値が、「abc」「abcc」「aabc」のどれかと一致する行が取り出される。
- ⑧ WHERE name NOT IN (“abc”, “abcc”, “aabc”)
-
nameの列の値が、「abc」「abcc」「aabc」のどれとも一致しない行が取り出される。
演習問題の和訳・解答
- 1. Find all the Toy Story movies
-
【和訳】『Toy Story』の映画をすべて探してください。
SELECT * FROM movies WHERE Title LIKE "%Toy Story%";
- 2. Find all the movies directed by John Lasseter
-
【和訳】『 John Lasseter』によって作られた映画をすべて探してください。
SELECT * FROM movies WHERE Director = "John Lasseter";
- 3. Find all the movies (and director) not directed by John Lasseter
-
【和訳】『 John Lasseter』によって作られていない映画をすべて探してください。
SELECT * FROM movies WHERE NOT Director = "John Lasseter";
- 4. Find all the WALL-* movies
-
【和訳】『WALL』で始まる映画をすべて探してください。
SELECT * FROM movies WHERE Title LIKE "WALL%";
コメント