【SQL超入門講座】13.AND, OR|複数条件で抽出する方法

こんにちは。キノコードです。
SQL超入門講座でWhereについて紹介しました。
そこで、特定の条件でデータを抽出する場合について説明しました。
そのレッスンで紹介したのは、idが2と等しいもの、idが2以上ものといったように条件が1つのみのデータ抽出方法でした。
ただ、idが2以上で10以下といったような2つの条件。
idが2以上で10以下で、なおかつ、売上が1万円以上といったような2つ以上の条件で指定したい場合があると思います。
そこで、この動画では、2つ以上の条件式を組み合わせてデータ抽出をする方法について解説をします。
2つ以上の条件式をデータ抽出する方法の中でも、この動画では、論理演算子のANDとORを使った方法を説明をします。
なお、論理演算子とは、複数の条件を判断させる演算子のことです。
日本語でいうと「かつ」とか「または」のことです。英語でいうとandとorです。
これだけ聞くと難しい感じがしますが、簡単です。
動画でわかりやすく解説します。

キノコードでは、この動画の他にも、たくさんのプログラミングのレッスンを配信しています。
チャンネル登録がまだの方は、チャンネルがどこにいったかわからなくならないように、チャンネル登録をお願いします。

この記事の信頼性

この記事は、Youtubeにて日本最大級のプログラミング教育のチャンネルを運営しているキノコードが執筆、監修しています。
私自身は、2012年からプログラミング学習を始め、2019年以降はプログラミング教育に携わってきた専門家です。
他にも、私には下記のような実績や専門性があります。

  • キノコードは毎月10名以上、合計100名以上ののプログラミング学習者と1対1でお悩みを聞き、アドバイスをしています
  • キノコード自身は、プログラミングスクールに通ったり、本や有料åの動画で勉強してきた経験もあります
  • キノコードは、プログラミング学習サービス「キノクエスト」を運営しています
  • 本の出版、プログラミング雑誌への寄稿の実績があります

プログラミング学習サービス「キノクエスト」のご紹介

キノコードでは、プログラミングを習得するためのプログラミング学習サービス「キノクエスト」を運営しています。
Pythonの問題の他に、SQLの問題も120問以上あります。
キノクエストには、学習カリキュラムがあり、学習順番に悩むことなく学習を進められます。
月額1,990円と本1冊分の値段です。

キノクエストの特徴は下記の通りです。

  • SQLの問題も120問以上
  • プログラミング学習をしている仲間が集まるコミュニティがある
  • 1000問以上の問題を解いてプログラミングを習得
  • 環境構築不要ですぐに始められる
  • 動画と連動しているので、インプットもできる。
  • 月額1,990円で、コミュニティもセット

キノクエストを詳しく知りたい方は、紹介ページをご覧ください。

▼キノクエストの紹介ページはこちら▼
https://kino-code.com/kq_service_a/

それでは、レッスンスタートです。

論理演算子のANDとORについて

論理演算子のANDとORは、「AかつB」、「AまたはB」といった2つ以上の条件式を組み合わせてデータ抽出を行う際に使用します。

SELECTに、論理演算子を追加した構文は次の通りです。

SELECT カラム FROM テーブル
WHERE 条件式A AND 条件式B ;
SELECT カラム FROM テーブル
WHERE 条件式A OR 条件式B ;

それでは実際にテーブルを使って使い方を確認していきましょう。
test_tableを使って説明を進めていきます。

AND演算子の使い方

まずAND演算子の使い方を確認していきましょう。
AND演算子を使うと「AかつB」というように、2つの条件式を両方とも満たすレコードを抽出することができます。

それではtest_tableからAND演算子を使って、「商品分類がボトムス」、「単価が6,000円以上」という2つの条件をどちらも満たすレコードを抽出してみましょう。
SQLは次のように書くことができます。

SELECT * FROM test_table
WHERE 商品分類 = 'ボトムス' AND 単価 >= 6000

WHERE句で2つの条件式をANDでつなぎます。
これで「商品分類がボトムスかつ単価が6,000円以上」という条件が成立します。

それではSQLを実行してみましょう。

意図した通り「商品分類がボトムス」、「単価が6,000円以上」を両方とも満たすレコードだけを抽出することができました。

OR演算子の使い方

同じようにOR演算子の使い方を確認していきましょう。
OR演算子を使うと「AまたはB」というように、2つの条件式のどちらかを満たすレコードを抽出することができます。

今度はtest_tableから「商品分類がボトムス」、「単価が6,000円以上」という2つの条件のどちらかを満たすレコードを抽出してみましょう。
SQLは次のように書きます。

SELECT * FROM test_table
WHERE 商品分類 = 'ボトムス' OR 単価 >= 6000

先ほどのAND演算子の説明で使ったSQLのANDをORに変更するだけなので簡単ですね。
ではSQLを実行してみましょう。

想定した通り「商品分類がボトムス」、「単価が6,000円以上」のどちらかを満たすレコードをすべて抽出できました。

論理演算子ANDとORの違いは理解できましたでしょうか。
ANDとORで抽出されるデータの関係性は、ベン図で見ると分かりやすいので確認しておきましょう。
AND演算子で抽出されるデータは条件式Aと条件式Bのどちらも満たす必要があります。
そのため交わった領域が抽出対象のデータになります。

一方でOR演算子で抽出されるデータは条件式Aと条件式Bのどちらかを満たせばよいので、2つの領域を合わせたものが抽出対象のデータになります。

and-or

AND演算子とOR演算子の併用について

WHERE句でANDとORを併用して条件式を作ることもできます。
ANDとORを併用した抽出について最後に確認しておきましょう。
例えば「商品分類がボトムスかつ単価が6,000円以上」または「売上金額が100,000円以上」という条件で抽出を行うにはどうすればよいでしょうか。

SQLは次のように書くことができます。

SELECT * FROM test_table
WHERE 商品分類 = 'ボトムス' AND 単価 >= 6000 OR 売上金額 >= 100000

SQLを実行します。

想定した通りの抽出結果を得ることができました。

今度は「商品分類がボトムスまたは単価が6,000円以上」かつ「売上金額が100,000円以上」という条件で抽出を行ってみましょう。
こういった条件で抽出する場合、論理演算子の優先順位に注意してください。
論理演算子の優先順位を知らずに、次のようにSQLを書いてしまうと意図した通りの抽出結果を得ることができません。

SELECT * FROM test_table
WHERE 商品分類 = 'ボトムス' OR 単価 >= 6000 AND 売上金額 >= 100000

試しにSQLを実行してみます。

この通り売上金額100,000円以下のレコードが抽出されてしまっており、意図した通りの抽出結果を得られていません。
これはAND演算子がOR演算子よりも優先されているからです。
つまり先ほどのSQLだと「商品分類がボトムス」または「単価が6,000円以上かつ売上金額が100,000円以上」という条件で抽出が行われてしまっています。

そのため正しく条件を指定するためには、()をつけて論理演算子の優先順位を明示することが必要です。

正しくは次のようにSQLを書くことができます。

SELECT * FROM test_table
WHERE (商品分類 = 'ボトムス' OR 単価 >= 6000) AND 売上金額 >= 100000

SQLを実行します。

()の中の条件は優先的に処理されるため、今度は意図した通りの実行結果を得ることができました。

このようにANDとORを併用する場合は条件が複雑になっていきますので、論理演算子の優先順位には気を付けるようにしましょう。

レッスンは以上です。

キノコードでは、プログラミングを習得するためのプログラミング学習サービス「キノクエスト」を運営しています。
Pythonの問題の他に、SQLの問題も120問以上あります。
キノクエストには、学習カリキュラムがあり、学習順番に悩むことなく学習を進められます。
月額1,990円と本1冊分の値段です。

キノクエストの特徴は下記の通りです。

  • SQLの問題も120問以上
  • プログラミング学習をしている仲間が集まるコミュニティがある
  • 1000問以上の問題を解いてプログラミングを習得
  • 環境構築不要ですぐに始められる
  • 動画と連動しているので、インプットもできる。
  • 月額1,990円で、コミュニティもセット

キノクエストを詳しく知りたい方は、紹介ページをご覧ください。

▼キノクエストの紹介ページはこちら▼
https://kino-code.com/kq_service_a/