比較演算子の使い方

比較演算子は 2 つの値を比較し、大きいか小さいか、等しいか等しくないか、などの評価を行います。ここでは PostgreSQL で利用できる比較演算子の使い方について解説します。

(Last modified: )

大小および等しいかどうかの比較

比較演算子は左辺と右辺を比較し、結果として boolean 型の値を返します。

大きさを比較する比較演算子は < 、 <= 、 > 、 >= の 4 つが用意されています。

<    左辺は右辺よりより小さい
>    左辺は右辺より大きい
<=   左辺は右辺と等しいかより小さい
>=   左辺は右辺と等しいかより大きい

等しいかどうかの比較演算子は = 、 <> 、 != の 3 つが用意されています。

=    左辺と右辺は等しい
<>   左辺と右辺は等しくない
!=   左辺と右辺は等しくない

-- --

では実際に試してみます。次のようなテスト用のテーブルを作成しました。

create table customer(
  name varchar(10),
  old integer
);

大小および等しいかどうかの比較(1)

次のようなデータをテーブルに追加しました。

insert into customer values
  ('Yamada', 28),
  ('Suzuki', 18),
  ('Hori', 20),
  ('Shimada', 34),
  ('Tanaka', 17);

大小および等しいかどうかの比較(2)

それでは SELECT コマンドを使って old カラムの値が 20よりも大きいか小さいか、それとも等しいかについて確認してみます。

select name, old, 
  old < 20 as "20より小さい", 
  old > 20 as "20より大きい", 
  old = 20 as "20と等しい" 
  from customer;

大小および等しいかどうかの比較(3)

比較演算子を使ってカラムに格納されている値を評価した結果を取得しました。

範囲内にあるかどうかの比較(BETWEEN)

between 述語は比較する対象の値が指定した範囲内にあるのかどうかを比較し、結果として boolean 型の値を返します。

a BETWEEN x AND y      x 以上 y 以下の範囲にある
a NOT BETWEEN x AND y  x 以上 y 以下の範囲にない

比較する対象の値 a が x 以上 y 以下であれば TRUE となります。 NOT が付いている場合は x 以上 y 以下でない場合に TRUE となります。

between 述語は比較演算子と論理演算子を使って次のように記述することができます。次の 2 つは同じ意味になります。

a >= x AND a <= y
a BETWEEN x AND y

また not between 述語も比較演算子と論理演算子を使って次のように記述することができます。次の 2 つは同じ意味になります。

a < x OR a > y
a NOT BETWEEN x AND y

a BETWEEN x AND y のように指定した場合に x が y よりも大きい値が指定されると x 以上 y 以下という値は存在しないため常に FALSE となります。 SYMMETRIC を指定しておくと x と y の値をソートして、小さい方の値から大きい方の値の範囲内かどうかを評価します。

a BETWEEN SYMMETRIC x AND y
a NOT BETWEEN SYMMETRIC x AND y

比較する対象の値 a が x または y の小さいほうの値から大きい方の値の範囲内にあれば TRUE となります。 NOT が付いている場合は逆となります。

-- --

それでは実際に試してみます。先ほど使用した customer テーブルに対して、 old カラムの値が 15から25の範囲内かどうかを確認します。

select name, old, 
  old between 15 and 25 as "15以上25以下" 
  from customer;

範囲内にあるかどうかの比較(between)(1)

指定した範囲内にある場合は TRUE 、そうでな場合は FALSE となりました。

次にbetween 述語の範囲を表す数値を入れ替えてみます。

select name, old, 
  old between 25 and 15 as "25以上15以下"
  from customer;

範囲内にあるかどうかの比較(between)(2)

25 以上 15 以下という範囲は存在しないため、すべて FALSE という結果になりました。

SYMMETRIC を指定しておけば、 範囲を指定した 2 つの値を並べ替えて範囲の指定が適切になるようにしてくれます。

select name, old, 
  old between symmetric 25 and 15 as "15以上25以下" 
  from customer;

範囲内にあるかどうかの比較(between)(3)

15 と 25 の小さい方の値から大きい方の値までの範囲内になる場合は TRUE 、そうでない場合は FALSE となりました。

値がNULLかどうかの比較(IS NULL)

IS NULL 述語は比較する対象の値が NULL かどうかを比較し、結果として boolean 型の値を返します。

expression IS NULL      expression が NULL
expression IS NOT NULL  expression が NULLではない

比較する対象の値が NULLであれば TRUE となります。 NOT が付いている場合は NULL ではい場合に TRUE となります。値を NULL かどうか調べるときに比較演算子の = で比較しても正しい結果とはなりません。

また非標準の構文で同じ結果となる次の述語も用意されています。

expression ISNULL   expression が NULL
expression NOTNULL  expression が NULLではない

-- --

では実際に試してみます。次のようなテスト用のテーブルを作成しました。

create table friends(
  name varchar(10),
  old integer
);

値がNULLかどうかの比較(IS NULL)(1)

次のようなデータをテーブルに追加しました。

insert into friends values ('Yamada', 32), ('Suzuki', NULL), (NULL, 19);

値がNULLかどうかの比較(IS NULL)(2)

※ デフォルトの設定では NULL を取得して表示すると何も表示されないので、 NULL だった場合は 'NULL' と表示されるように設定してあります。

それでは SELECT コマンドを使って name カラムおよび old カラムに格納されている値が NULL かどうか判別してみます。

select name, name is null as "NULL?", old, old is null as "NULL?" from friends;

値がNULLかどうかの比較(IS NULL)(3)

カラムに格納されている値が NULL の場合は TRUE 、そうでない場合は FALSE となりました。

-- --

PostgreSQL で用意されている比較演算子の使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。