SQL - IS NOT NULL: 基礎ガイド
こんにちは、将来のSQL魔法使いさんたち!今日は、私がこれまでに多くの学生が困難と感じていたSQLの興味深い側面に一緒に潜り込みます。でも心配しないでください - このチュートリアルの終わりまでに、NULL値をプロのように扱えるようになるでしょう!
SQLのIS NOT NULL演算子
基本から始めましょう。SQLでは、NULLは欠けている情報を表す特別な値(または、価値の欠如)です。フォームに空白のフィールドを残すことと同じように、データベースではNULLがそれに相当します。
ここで厄介な部分があります:NULLには通常の比較演算子(=や!=)を使えません。そこで、私たちの英雄が登場します - それがIS NOT NULL演算子です!
基本構文
IS NOT NULLの基本構文は以下の通りです:
SELECT column_name(s)
FROM table_name
WHERE column_name IS NOT NULL;
実際の例で分解してみましょう。students
というテーブルがあり、student_id
、name
、email
というカラムがあるとします。
SELECT name, email
FROM students
WHERE email IS NOT NULL;
このクエリは、データベースにメールアドレスがある学生のみの名前とメールアドレスを返します。まるで、「データベース、実際にメールフィールドを記入した学生だけを教えてくれ!」と言っているのと同じです。
'!=' または '<>'を使わない理由
「なぜ 'email != NULL' を使わないのか?」と思うかもしれません。素晴らしい質問です!SQLでは、NULLは未知の値を表します。未知の値であるため、何かと比較することはできません - 甚至是自分自身とも比較できません!まるで、リンゴを何もに比較するようなものです。
例を見てみましょう:
-- 期待通りに動作しません
SELECT name, email
FROM students
WHERE email != NULL;
-- 正しい方法
SELECT name, email
FROM students
WHERE email IS NOT NULL;
最初のクエリは、テーブルのデータに関係なく実際には結果を返しません。2番目のクエリは、メールに値があるすべての行を正しく返します。
IS NOT NULLとCOUNT()関数
基本を理解したので、IS NOT NULLが他のSQL関数、例えばCOUNT()とどのように使われるかを見てみましょう。
非NULL値のカウント
COUNT()関数は、特定の基準に一致する行の数を数えるために使われます。IS NOT NULLと組み合わせると、特定のカラムに値がある行の数を教えてくれます。
SELECT COUNT(*) AS total_students,
COUNT(email) AS students_with_email
FROM students;
このクエリでは、COUNT(*)
はすべての行を数え、COUNT(email)
はメールがNULLでない行のみを数えます。データの完璧さを確認する素晴らしい方法です!
パーセンテージ計算
さらに一歩進めて、提供されたメールの学生のパーセンテージを計算します:
SELECT
COUNT(*) AS total_students,
COUNT(email) AS students_with_email,
(COUNT(email) * 100.0 / COUNT(*)) AS email_percentage
FROM students;
このクエリは、総学生数とメールを提供した学生数、そしてそのパーセンテージを計算します。まるで、出席を取り、宿題をした学生を把握するようなものです!
IS NOT NULLとDELETE文
時々、データベースをクリーンアップするために欠損データの行を削除する必要があります。ここでIS NOT NULLがDELETE文で便利に使えます。
基本的なDELETEとIS NOT NULL
特定のカラムがNULLである行を削除する方法は以下の通りです:
DELETE FROM students
WHERE phone_number IS NULL;
このクエリは、電話番号が提供されていないすべての学生記録を削除します。まるで、アドレス帳から空白の行を消去するようなものです。
結合条件
IS NOT NULLを他の条件と組み合わせることもできます:
DELETE FROM students
WHERE graduation_year IS NULL
AND enrollment_date < '2020-01-01';
このクエリは、卒業年度が設定されていないかつ2020年以前に入学した学生記録を削除します。古い、不完全な記録をクリーンアップする方法です。
IS NOT NULLとUPDATE文
最後に、IS NOT NULLがUPDATE文でどのように使われるか見てみましょう。
非NULL値の更新
例えば、NULLでないすべてのメールアドレスを小文字に更新したいとします:
UPDATE students
SET email = LOWER(email)
WHERE email IS NOT NULL;
このクエリは、メールアドレスがNULLでないすべての既存のメールアドレスを小文字に変更します。まるで、連絡先リストを確認し、すべてのメールアドレスが一貫した書式で記載されているか確認するようなものです。
条件付き更新
IS NOT NULLをより複雑なUPDATE文で使うこともできます:
UPDATE students
SET status = 'Active'
WHERE enrollment_date IS NOT NULL
AND graduation_date IS NULL;
このクエリは、入学日があるが卒業日がないすべての学生のステータスを「Active」に更新します。情報に基づいて学生のステータスを自動的に更新する方法です。
結論
そして、みなさん!IS NOT NULLの世界を旅しました。SELECT、COUNT、DELETE、UPDATE文での使用を探求しました。NULL値を正しく扱うことはデータベース管理において非常に重要です。正確な結果を得ることと、NULL結果を得ることの違いです!
以下に、私たちがカバーした方法の簡単な参照表を示します:
操作 | 例 |
---|---|
SELECT | SELECT * FROM table WHERE column IS NOT NULL |
COUNT | SELECT COUNT(column) FROM table |
DELETE | DELETE FROM table WHERE column IS NULL |
UPDATE | UPDATE table SET column = value WHERE other_column IS NOT NULL |
これらのクエリを練習し、遊びましょう。そしてすぐに、NULL値を扱うことが自然になるでしょう。コードを続け、学び続け、忘れないでください - データベースの世界では、時々「何も」(NULL)がすべてを意味するかもしれません!
Credits: Image by storyset