SQL
 Computer >> コンピューター >  >> プログラミング >> SQL

MySQLのIF()・IFNULL()・NULLIF()関数の使い方を徹底解説

他のプログラミング言語と同様に、SQL(構造化照会言語)にもデータの流れを制御するための条件分岐が用意されています。MySQLのIF関数は、条件が真であれば指定した値を返し、偽であれば別の値(または何も)返しません。この記事では、MySQLを例に、SQLのIF系関数の基本的な使い方を詳しく見ていきましょう。

準備:サンプルテーブルの作成

この記事では、名前・年齢・性別を格納したサンプルスキーマを使用します。ご自身の開発環境(IDE)で以下のSQLを実行して、同じテーブルを作成しておいてください。

create table names (
   id INT,
   name VARCHAR(50),
   age INT,
   gender VARCHAR(50)
);
insert into names (id, name, age, gender) values (1, 'Bret Starkings', 55, 'M');
insert into names (id, name, age, gender) values (2, 'Bobbye Eyckel', 76, 'F');
insert into names (id, name, age, gender) values (3, 'Barbie Veschi', 50, 'F');
insert into names (id, name, age, gender) values (4, 'Electra Blazewicz', 47, 'F');
insert into names (id, name, age, gender) values (5, 'Estrella Borleace', 57, 'F');
insert into names (id, name, age, gender) values (6, 'Washington Pittwood', 75, 'M');
insert into names (id, name, age, gender) values (7, 'Phaedra Tertre', 27, 'F');
insert into names (id, name, age, gender) values (8, 'Nicolina Elie', 76, 'F');
insert into names (id, name, age, gender) values (9, 'Hugh Hughson', 86, 'M');
insert into names (id, name, age, gender) values (10, 'Dare Ravilious', 59, 'M');
insert into names (id, name, age, gender) values (11, 'Cad Levins', 13, 'M');
insert into names (id, name, age, gender) values (12, 'Sollie Kimbury', 33, 'M');
insert into names (id, name, age, gender) values (13, 'Elga Rearie', 61, 'F');
insert into names (id, name, age, gender) values (14, 'Cherey Terron', 54, 'F');
insert into names (id, name, age, gender) values (15, 'Abbie Kent', 23, 'F');
insert into names (id, name, age, gender) values (38, 'Nelia Picot', 2, 'F');
insert into names (id, name, age, gender) values (39, 'Benedetto Smithin', 33, 'M');
insert into names (id, name, age, gender) values (40, 'Rickie Maymand', 83, 'F');
insert into names (id, name, age, gender) values (41, 'Kristoforo Dashkov', 6, 'M');
insert into names (id, name, age, gender) values (42, 'Cherice Genty', 6, 'F');
insert into names (id, name, age, gender) values (43, 'Shirley Fake', 95, 'F');
insert into names (id, name, age, gender) values (44, 'Aeriel Plant', 36, 'F');
insert into names (id, name, age, gender) values (45, 'Halimeda Gook', 74, 'F');
insert into names (id, name, age, gender) values (46, 'Minor Harriot', 63, 'M');
insert into names (id, name, age, gender) values (47, 'Greggory Found', 61, 'M');
insert into names (id, name, age, gender) values (48, 'Vivien Braund', 94, 'F');
insert into names (id, name, age, gender) values (49, 'Gaylord Pochet', 96, 'M');
insert into names (id, name, age, gender) values (77, 'Nataline Sealand', 43, 'F')

IF()関数の基本構文

IF(expression, expr_true, expr_false);

MySQLにおけるIF関数は、IFキーワードに続けて3つの引数を受け取ります。1つ目は評価対象となるブール式(条件式)、2つ目は条件が真の場合に返す値、3つ目は条件が偽の場合に返す値です。

SELECT name, age, IF(age >= 18, "YES", "NO") AS OVER_18
FROM names;

上記のクエリでは、まず各レコードのnameとageを選択し、続いてOVER_18という名前の条件付き列を出力しています。年齢が18歳以上なら「YES」、そうでなければ「NO」が表示されます。実行結果の一部は以下の通りです。

nameageOVER_18
Bret Starkings55YES
Bobbye Eyckel76YES
Barbie Veschi50YES
Electra Blazewicz47YES
Estrella Borleace57YES
Washington Pittwood75YES
Phaedra Tertre27YES
Nicolina Elie76YES
Hugh Hughson86YES
Dare Ravilious59YES
Cad Levins13NO

IFNULL()関数でNULLを置き換える

IFNULL()は、最初の式がNULLかどうかを判定する条件関数です。最初の式がNULLであれば2番目の式を返し、NULLでなければ1番目の式をそのまま返します。

IFNULL(NULL, 2) → 2 を返す
IFNULL(0, 4) → 0 を返す

SELECT name, IFNULL(age, "NOT ENTERED") AS age
FROM names;

このMySQLステートメントは、ageという列を返します。NULLのレコードはすべて文字列「NOT ENTERED」に置き換えられます。NULL値をユーザーにとってわかりやすい表示に変えたい場合などに非常に便利な関数です。

NULLIF()関数で等しい値をNULLにする

NULLIF()は、関数に渡された2つの式が等しい場合にNULLを返します。等しくない場合は、1番目の式がそのまま返されます。

SELECT name, NULLIF(name, age)
FROM names;

これは極端な例です。名前と年齢が一致することは通常あり得ないためです。しかし、少なくともこのような構文で書けるということが分かります。実務では、例えば「NULLIF(分母, 0)」のように使うことで、0による除算エラーを未然に防ぐといった活用方法があります。このような条件分岐が役立つ場面を、ぜひ自分でも考えてみてください。

まとめ

MySQLには、データの流れを柔軟に制御するためのIF系関数が複数用意されています。IF()による条件分岐、IFNULL()によるNULL値の置き換え、NULLIF()による特定条件時のNULL化と、それぞれ用途が異なる点を押さえておきましょう。これらの概念は、使用しているデータベースが異なっても同様に応用できます。詳細な構文については、お使いのデータベースの公式ドキュメントを参照してください。

  1. ハッシュ関数とハッシュテーブルの基本を徹底解説!代表的な3つの手法とは

    ハッシュ化(ハッシング)とは、ハッシュ関数と呼ばれる数学的な関数を用いて、テキストや数値のリストから値を生成する処理のことです。数値キーや英数字キーを扱うハッシュ関数は数多く存在し、それぞれ計算方法や特性が異なります。本記事では、代表的なハッシュ関数である「除算法」「乗算法」「中央二乗法」の仕組みと計算例を解説し、あわせてそれらを活用するデータ構造「ハッシュテーブル」についても詳しく紹介します。 ハッシュ関数とは ハッシュ関数は、任意のキー(データ)を受け取り、固定範囲内の数値(ハッシュ値)へ変換する関数です。以下に、代表的なハッシュ関数を3つ紹介します。 1. 除算法(デビジョン法) 除

  2. MacでPython 3にアップグレードして使いこなす方法

    購入したばかりの新しいMacには、必要なソフトウェアの最新版がすべて入っていると思いがちですが、ユーザー向けアプリについては概ね正しくても、基盤となるフレームワークに関しては話が別です。安定版の最新リリースがPython 3.5であるにもかかわらず、新しいMacには今なおPython 2.7.10がプリインストールされています。バージョン間の差が大きく感じられるのはそのためです。ただし、新しいバージョンが必ずしも優れているとは限りません。Python 3はPython 2との後方互換性を持たず、多くの開発者は依然としてPython 2を使い続けているのです。 2to3を使うか、使わないか?