こんにちは、はじめまして! saku-chanです!
このアカウントは、社会人1年目のWebディレクター見習い(初心者)がSQLを学ぶ成長記録になっています。
ひよっこから成長する過程を残し、ついでに皆さんからアドバイスを頂けたら良いな! 私と同じように知識ゼロからSQLを始める人の一つの指針になればいいな!という思いで作成しました。
ちなみに、ブログを含め記事などを書いた経験がないため読みづらい部分も多々あるかと思いますが、そこも含めて皆さまアドバイス頂けると嬉しいですmm
◆記事の内容は、SQL初心者の自分が、同じような初心者の方でも理解しやすいように心がけながら、SQLの基本に関して学んだことを懇切丁寧に記載しています◆
目次
- はじめに
-
WHERE句とは
└①基本的な絞り込み(等号や不等号などを使用した条件設定)
└②複数条件での絞り込み(INを使用した条件設定)
└③任意の文字での絞り込み(LIKEを使用した条件設定) - まとめ
- 最後に
はじめに
今回はSQLのSELECT文で使用されるWHERE句
に関して勉強したことを記載します!
前回同様、初めてSQLを勉強する方(プログラミング経験自体がなくてもOK)が気軽に読んでいただける記事になっています^^
ではスタート!
⇒前回の記事【集約関数】はこちら
⇒前々回の記事【SELECT句とFROM句】はこちら
⇒記事一覧
WHERE句とは
SELECT句
は列方向に絞り込むために使用しますが、それに対してWHERE句
は行方向の絞り込みを行うために使用します。
とりあえず基本形はこちら!
SELECT <取り出したいカラム名> FROM <使用するテーブル名> WHERE<行方向に絞り込むための条件> ;
このような形で、WHERE句
はFROM句
の後に記述します。
WHERE句では様々な条件を指定して絞り込みを行うことができるので、1つずつ紹介していきます!
①基本的な絞り込み(等号や不等号などを使用した条件設定)
②複数条件での絞り込み(INを使用した条件設定)[⇒]
③任意の文字での絞り込み(LIKEを使用した条件設定)[⇒]
①基本的な絞り込み(等号や不等号などを使用した条件設定)
今回はこちらのテーブルを使用します。
テーブル名:friends_2
id | name | age | color |
---|---|---|---|
01 | けん | 14 | red |
02 | あおい | 21 | NULL |
03 | みほ | 16 | pink |
04 | さやか | 9 | green |
05 | たくや | 16 | NULL |
06 | あい | 16 | green |
まずはcolorで絞ってみましょう。
クエリと実行結果は以下の通りです。
SELECT name,color
FROM friends_2
WHERE color = 'green' ;
name | color |
---|---|
さやか | green |
あい | green |
直感でわかりますが、このクエリの意味は
colorカラムにgreenという値が入っているレコード(行)の、nameカラムとcolorカラムを取得する
です。
もう1つ例をあげてみます。
クエリと実行結果は以下の通りです。
SELECT id,name,age
FROM friends_2
WHERE age >= 14 ;
id | name | age |
---|---|---|
01 | けん | 14 |
02 | あおい | 21 |
03 | みほ | 16 |
05 | たくや | 16 |
06 | あい | 16 |
このクエリは
ageカラムの値が14以上のレコードの、idカラム、nameカラム、ageカラムを取得する
という意味なので、ちゃんとfriends_2テーブルから4レコード目(age=9)が除かれていることが確認出来ます。
とっても簡単ですね!
また、否定の場合はNOT
を使用します。
SELECT name,age
FROM friends_2
WHERE NOT age = 16 ;
このように記述すると、以下のようにageが16 以外 のデータを抽出することが出来ます。
name | age |
---|---|
けん | 14 |
あおい | 21 |
さやか | 9 |
②複数条件での絞り込み(INを使用した条件設定)
続いてはWHERE句で複数の条件を指定する方法をみていきましょう!
複数の条件を指定するにはIN
を使用します。
SELECT id,name,color
FROM friends_2
WHERE color IN('pink', 'green') ;
このようにIN
の後に()
を使用して、指定したい値を記述します。
先ほどのクエリの実行結果はこちらです。
id | name | color |
---|---|---|
03 | みほ | pink |
04 | さやか | green |
06 | あい | green |
colorの値がpinkまたはgreenのレコードに絞ることが出来ました。
また、このIN
を使用した条件指定は、以下のようにOR
を使っても同様の結果を得ることが出来ます。
SELECT id,name,color
FROM friends_2
WHERE color = 'pink' OR color = 'green' ;
id | name | color |
---|---|---|
03 | みほ | pink |
04 | さやか | green |
06 | あい | green |
③任意の文字での絞り込み(LIKEを使用した条件設定)
最後に便利なLIKE述語
を紹介します!
LIKE
を使用することで柔軟な絞り込みを実現出来ます。
以下のデータテーブルを使って説明していきますね!
(とっても余談ですが、題材考えている時に、神社って確かに色々呼ばれ方あるけど違い理解してないな、、ってなりました(._.) )
Table名:Shrine
types |
---|
神社 |
東照宮 |
神宮 |
大社 |
天満宮 |
稲荷 |
明神 |
たとえば、"神"がつくものに絞りたいとき。
そんなときに便利なのが%
を使用したLIKE述語です。
SELECT types
FROM Shrine
WHERE type LIKE '%神%' ;
このようなクエリを実行すると、以下のように"神"がつくものに絞ることが出来ます。
type |
---|
神社 |
神宮 |
明神 |
前に"神"がついている「神社」「神宮」だけでなく、後ろに"神"がついている「明神」も取得出来ていることがわかります。
これは、%
が0文字以上の任意の文字列を指定する役割をもつからです。
では「天満宮」と「神宮」を区別したい時はどうすればよいでしょうか。
%
を使用すると「天満宮」「神宮」どちらも取得してしまうことになります。
そんな時に使用するのが_
です。
_
は%
と異なり、任意の1文字を指定することが出来ます。
なので、以下のようなクエリを実行すると、
SELECT types
FROM Shrine
WHERE type LIKE '_宮' ;
このように「神宮」だけを取り出すことが出来ます。
types |
---|
神宮 |
"宮"がついていない「稲荷」などはもちろん、"宮"の前に2文字ある「天満宮」や「東照宮」も除外することが出来ました。
以上を踏まえると、
WHERE type LIKE '_宮%'
と記述すれば「神宮」を取得出来ますが、
WHERE type LIKE '_宮_'
と記述すると今回のテーブル(Shrine)には該当データがないということになります。
%
は0文字以上の任意の文字列を指定する
_
は任意の1文字を指定する
からですね!
もちろん「○○宮○」のようなものがテーブル内に存在していれば、先ほどのどちらのクエリでもデータを取得することが出来るということになります。
このようにLIKE
はデータを探索する上で非常に便利です!
まとめ
-
WHERE句
は行方向の絞り込みを行うために使用する -
WHERE句
では等号や不等号を使用することができ、否定の場合はNOT
を使用する - 複数の条件を指定するには
IN
を使用する - 任意の文字で絞り込む場合は
LIKE
を使用し、0文字以上の場合は%
、任意の1文字の場合は_
を使用する
最後に
今回はWHERE句に関してまとめてみました!
いかかでしたでしょうか?
記事にまとめながら、自分の頭の中を改めて整理することが出来たような気がします。
もし間違いなど見つけた場合は優しく教えて頂けると嬉しいです><
ではまた次回!
追:@rye_442さんが否定の場合に関して教えてくださいました。ありがとうございましたmm
⇒記事一覧