Help us understand the problem. What is going on with this article?

【WHERE句】#4 Webディレクター見習いが知識ゼロからSQLを学ぶ

こんにちは、はじめまして!  saku-chanです!
このアカウントは、社会人1年目のWebディレクター見習い(初心者)がSQLを学ぶ成長記録になっています。
ひよっこから成長する過程を残し、ついでに皆さんからアドバイスを頂けたら良いな! 私と同じように知識ゼロからSQLを始める人の一つの指針になればいいな!という思いで作成しました。
ちなみに、ブログを含め記事などを書いた経験がないため読みづらい部分も多々あるかと思いますが、そこも含めて皆さまアドバイス頂けると嬉しいですmm

◆記事の内容は、SQL初心者の自分が、同じような初心者の方でも理解しやすいように心がけながら、SQLの基本に関して学んだことを懇切丁寧に記載しています◆

目次

はじめに

今回は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

次の記事【GROUP BY句】

記事一覧

saku-chan
社会人1年目のWebディレクター見習いです。 ひよっこから脱出のため、空いた時間を使って今はSQLの勉強をしています。 間違いなどあれば、皆さん優しくご指摘していただけると嬉しいです。^^
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした