【SQLの基礎知識⑥】 SQLにおける論理演算子の基本

SQLの基礎知識
この記事は約8分で読めます。
スポンサーリンク

SQLにおける論理演算子の基本

条件判断をするときに、条件が1つしかないということは滅多にありません。膨大なデータの中から有用なデータを探すためには、たくさんの条件から判断した検索結果が必要になることが多いでしょう。条件式を比較演算子で記述するには、前のセクションで解説しました。しかし、複数の条件を並べることは比較演算子だけではできません。このようなときに使うのが論理演算子です。

【SQLの基礎知識⑤】 SQLにおける比較演算子の基本
この章では、SQLの問合せにおける条件式の記述方法を習得できます。解説文だけでなく、具体的・実践的なSQL文と実行結果を確認することで、理解を深めることができます。いちれべ.comは、オラクル、MS-SQL、MS-Access で使用可能か一目でわかるサイトです。

論理演算子は、SQL文ではWHERE句の内部に記述され、条件式を評価し、その結果を真、または偽で返します。論理演算子には次のようなものがあります。

論理演算子内容
AND2つの条件式の結果が両方真になるときに真を返す
OR2つの条件式の結果の片方が真になれば真を返す
NOT後に続く条件式の結果が真なら偽を、偽なら真を返す

AND演算子

AND演算子は、2つの条件式の両方が真になったときに、真を返す演算子です。そのため左辺と右辺に並んでいるどちらかの条件式が偽になると偽を返します。
実際にAND演算子を使ってみましょう。「在庫リスト」表から単価が10000以上、カテゴリが実用商品のものを検索するときには、次のように入力します。
SQL文
SELECT * FROM 在庫リスト
WHERE 単価 > 10000 AND カテゴリ = '実用商品';


実行結果

商品番号商品名カテゴリ単価在庫
4見えない眼鏡実用商品2000012

表:在庫リスト

商品番号商品名カテゴリ単価在庫
1時の卵空想商品123452
2解けない氷実用商品50032
3地面に沈む羽空想商品12004
4見えない眼鏡実用商品2000012
5柄のない包丁危険商品32003
単価が10000以上で、実用商品の両方の条件を満たす行だけが結果として返されます。この例では「見えない眼鏡」が単価10000以上で、なおかつ実用商品なので、検索結果として出力されています。

OR演算子

OR演算子は、2つの条件式のどちらかが真になったときに、真を返す演算子です。左辺と右辺のどちらかが真なら真を返し、両方が真の場合も真を返します。偽を返すのはどちらも偽の場合だけになります。

OR演算子の使用例としては、「在庫リスト」表で、カテゴリが空想商品もしくは危険商品の商品を検索してみます。

SQL文
 SELECT * FROM 在庫リスト
WHERE カテゴリ = '空想商品' OR カテゴリ = '危険商品';
実行結果

商品番号商品名カテゴリ単価在庫
1時の卵空想商品123452
3地面に沈む羽空想商品12004
5柄のない包丁危険商品32003

表:在庫リスト

商品番号商品名カテゴリ単価在庫
1時の卵空想商品123452
2解けない氷実用商品50032
3地面に沈む羽空想商品12004
4見えない眼鏡実用商品2000012
5柄のない包丁危険商品32003

2つの=演算子を使った条件式の間に、OR演算子を使うことで、結果として2つの条件式のどちらかを満たす行が返されます。

NOT演算子

 NOT演算子は、条件式を否定する演算子です。これは、条件式が真になった場合に偽を返し、条件式が偽になったときに真を返します。要するに条件式の結果を反転させる働きを持っています。

実際に、NOT演算子を使ってみましょう。次の例では、NOT演算子を付けて、=演算子でカテゴリが空想商品を検索しています。

SQL文
SELECT * FROM 在庫リスト WHERE NOT カテゴリ = '空想商品';実行結果

商品番号商品名カテゴリ単価在庫
2解けない氷実用商品50032
4見えない眼鏡実用商品2000012
5柄のない包丁危険商品32003
「カテゴリ = '空想商品'」で、カテゴリが空想商品の商品を選択していますが、NOT演算子を使ったことで、結果が反転し、カテゴリが空想商品以外のものが結果として返されています。
なお、NOT演算子を使って記述できる条件式の一部は、比較演算子の<>演算子を使っても同じ結果を得ることができます。
SQL文
 SELECT * FROM 在庫リスト WHERE カテゴリ <> '空想商品';
実行結果

商品番号商品名カテゴリ単価在庫
2解けない氷実用商品50032
4見えない眼鏡実用商品2000012
5柄のない包丁危険商品32003

論理演算子の優先順位

 論理演算子を使えば、問合せを行うときに複数の条件式を組合せて検索を行えます。この論理演算子でも、算術演算子と同じように、「( )」を使うことで処理の優先順位を指定することができます。

通常論理演算を評価する順序は、先に記述してあるものから順番に行われます。

<条件式1> AND <条件式2> OR <条件式3>
このような論理演算があると、まず条件式1と条件式2のAND演算を行い、その演算結果と条件式3のOR演算を行います。実際のサンプルとして次のSQL文を実行してみます。
SQL文
SELECT * FROM 在庫リスト WHERE 単価=1000
AND カテゴリ='空想商品' OR カテゴリ='実用商品';

実行結果

商品番号商品名カテゴリ単価在庫
1時の卵空想商品123452
2解けない氷実用商品50032
3地面に沈む羽空想商品12004
4見えない眼鏡実用商品2000012

表:在庫リスト

商品番号商品名カテゴリ単価在庫
1時の卵空想商品123452
2解けない氷実用商品50032
3地面に沈む羽空想商品12004
4見えない眼鏡実用商品2000012
5柄のない包丁危険商品32003
このSQL文では、まず条件式「単価>1000」と条件式「カテゴリ='空想商品'」を評価してから、条件式「カテゴリ='実用商品'」を評価します。そのため、「単価が1000以上のものでカテゴリが空想商品のもの、またはカテゴリが実用商品」という順番になります。
この条件式の順番を変えるには、「( )」を使います。「( )」を使って複数の論理演算を記述すると括弧が優先して評価されます。
<条件式1> AND (<条件式2> OR <条件式3>)
このように入力している場合には、まず条件式2と条件式3の評価を先に行い、その演算結果を条件式1のAND演算を行います。実際のサンプルでは次のようになります。

SQL文
SELECT 商品番号,商品名,カテゴリ,単価 FROM 在庫リスト
WHERE 単価 > 1000
 AND (カテゴリ='空想商品' OR カテゴリ='実用商品');

実行結果

商品番号商品名カテゴリ単価
1時の卵空想商品12345
3地面に沈む羽空想商品1200
4見えない眼鏡実用商品20000

表:在庫リスト

商品番号商品名カテゴリ単価在庫
1時の卵空想商品123452
2解けない氷実用商品50032
3地面に沈む羽空想商品12004
4見えない眼鏡実用商品2000012
5柄のない包丁危険商品32003

このSQL文では、まず「( )」で囲んでいる「カテゴリ=’空想商品’」と「カテゴリ=’実用商品’」の条件式のOR演算を行ってから、「単価>1000」とのAND演算を行っています。

演算子の優先順位

ここまでいくつかのセクションで演算子を紹介してきました。しかし、SQLで扱える演算子はこれだけではなく、各演算子のリファレンスで紹介するように、他にも多くのものがあります。

SQLリファレンス > 演算子
演算子によって列に対する様々な演算が行えます。このページは、使用できる演算子の一覧表です。いちれべ.comは、オラクル、MS-SQL Server、MS-Access で使用可能か一目でわかるのが特徴のSEサポートサイトです。

そして、算術演算子、論理演算子など、各演算子の中での優先順位については、それぞれの中で解説をしていますが、演算子全体での優先順位というものもあります。この優先順位は、演算子の種類を組合せて使う場合には、知っておく必要があります。

主な演算子の優先順位は、次のようになっています。

主な演算子の優先順位

演算子優先順
* / %
+ -
= > >= < <= <> !=
& | 
NOT
AND
BETWEEN IN LIKE OR SONE

優先順位を変更したい場合には、それぞれの演算子の優先順位でも解説した「( )」を使って、優先順位の変更を行います。

関連リンク

次の章に進む
【SQLの基礎知識⑦】 SQLにおけるNULLの扱い
NULLとは、値が存在していないことを言います。この章では、最低限知っておくべきSQLにおけるNULLの扱い方を習得できます。いちれべ.comは、オラクル、MS-SQL、MS-Access で使用可能か一目でわかるサイトです。
目次
【SQLの基礎知識】基本ルールや基礎の基礎をマスターしよう
こちらの記事を読み進めることで、SQLの基礎が充分に身に付きます。これからSQLを身に着けたい初心者・入門者の方に最適です。データベース製品ごとに表現方法が異なることがありますので、ある程度SQLのスキルがある方も利用できるサイトです。

タイトルとURLをコピーしました