MySQL SELECT で NULL 値を含むレコードを除外する方法
MySQL SELECT で NULL 値を除外する方法
MySQL の SELECT
ステートメントでは、WHERE
句やその他の条件句を使用して、結果から特定のレコードをフィルタリングできます。この機能を使用して、NULL 値を含まないレコードのみを選択することもできます。
方法
NULL 値を除外するには、以下の 3 つの方法があります。
IS NOT NULL
演算子は、指定された列が NULL 値でないかどうかをテストします。
SELECT * FROM テーブル名 WHERE 列名 IS NOT NULL;
この例では、テーブル名
テーブルの 列名
列が NULL 値でないすべてのレコードが選択されます。
<> 演算子を使用する
<>
演算子は、2 つの値が等しくないかどうかをテストします。
SELECT * FROM テーブル名 WHERE 列名 <> NULL;
COALESCE
関数は、最初の引数が NULL 値の場合、2 番目の引数を返します。
SELECT COALESCE(列名, '') FROM テーブル名;
補足
- 上記の方法を組み合わせて使用することもできます。
WHERE
句以外にも、HAVING
句やORDER BY
句で使用することもできます。
例
SELECT *
FROM テーブル名
WHERE 列名1 IS NOT NULL
AND 列名2 <> NULL
ORDER BY 列名3;
この例では、テーブル名
テーブルの 列名1
列と 列名2
列が NULL 値でないレコードが選択され、列名3
列に基づいて結果が並べ替えられます。
-- テーブル作成
CREATE TABLE テーブル名 (
id INT NOT NULL AUTO_INCREMENT,
名前 VARCHAR(255) NULL,
年齢 INT NULL,
PRIMARY KEY (id)
);
-- データ挿入
INSERT INTO テーブル名 (名前, 年齢) VALUES ('山田太郎', 20);
INSERT INTO テーブル名 (名前, 年齢) VALUES ('佐藤花子', NULL);
INSERT INTO テーブル名 (名前, 年齢) VALUES ('田中次郎', 30);
-- NULL 値を含まないレコードの選択
SELECT * FROM テーブル名 WHERE 年齢 IS NOT NULL;
-- 結果
-- id | 名前 | 年齢
-- -- | -- | --
-- 1 | 山田太郎 | 20
-- 3 | 田中次郎 | 30
-- COALESCE 関数を使用して空の文字列を挿入
SELECT COALESCE(名前, '') AS 名前, 年齢 FROM テーブル名;
-- 結果
-- 名前 | 年齢
-- -- | --
-- 山田太郎 | 20
-- 佐藤花子 |
-- 田中次郎 | 30
- 最初の
CREATE TABLE
ステートメントは、id
、名前
、年齢
の 3 つの列を持つテーブルを作成します。 - 2 番目の
INSERT INTO
ステートメントは、3 つのレコードをテーブルに挿入します。 - 3 番目の
SELECT
ステートメントは、年齢
列が NULL 値でないレコードのみを選択します。 - 4 番目の
COALESCE
関数は、名前
列が NULL 値の場合、空の文字列を挿入します。
実行結果
上記のコードを実行すると、以下の結果が表示されます。
-- NULL 値を含まないレコードの選択
-- id | 名前 | 年齢
-- -- | -- | --
-- 1 | 山田太郎 | 20
-- 3 | 田中次郎 | 30
-- COALESCE 関数を使用して空の文字列を挿入
-- 名前 | 年齢
-- -- | --
-- 山田太郎 | 20
-- 佐藤花子 |
-- 田中次郎 | 30
CASE
式を使用して、NULL 値の場合とそうでない場合で異なる値を返すことができます。
SELECT CASE WHEN 年齢 IS NOT NULL THEN 年齢 ELSE '不明' END AS 年齢
FROM テーブル名;
この例では、年齢
列が NULL 値の場合、「不明」が返されます。
EXISTS
サブクエリを使用して、NULL 値ではない値を持つレコードのみを選択します。
SELECT *
FROM テーブル名
WHERE EXISTS (
SELECT *
FROM テーブル名2
WHERE テーブル名2.id = テーブル名.id
AND テーブル名2.列名 IS NOT NULL
);
GROUP BY
句を使用して、NULL 値を含むグループを除外できます。
SELECT 列名, COUNT(*) AS 件数
FROM テーブル名
GROUP BY 列名
HAVING COUNT(*) > 0;
- 简单的な方法で NULL 値を除外したい場合は、
IS NOT NULL
演算子を使用するのがおすすめです。 - NULL 値の場合とそうでない場合で異なる値を返したい場合は、
CASE
式を使用するのがおすすめです。 - 特定の条件に合致するレコードのみを選択したい場合は、
EXISTS
サブクエリを使用するのがおすすめです。 - NULL 値を含むグループを除外したい場合は、
GROUP BY
句を使用するのがおすすめです。
mysql sql select