Yuki's Tech Blog

仕事で得た知見や勉強した技術を書きます。

leet codeのSQL問題を1日1題解く【584. Find Customer Referee】

目次

初めに

今日もSQLの問題を解いて行きます。

問題

leetcode.com

セットアップ

以下のSQL文をローカル環境で実行します。

Create table If Not Exists Customer (id int, name varchar(25), referee_id int);
Truncate table Customer;
insert into Customer (id, name, referee_id) values ('1', 'Will', NULL);
insert into Customer (id, name, referee_id) values ('2', 'Jane', NULL);
insert into Customer (id, name, referee_id) values ('3', 'Alex', '2');
insert into Customer (id, name, referee_id) values ('4', 'Bill', NULL);
insert into Customer (id, name, referee_id) values ('5', 'Zack', '1');
insert into Customer (id, name, referee_id) values ('6', 'Mark', '2');

知らなかった or 理解があやふやな知識

デフォルトでは、カラムはNULL値を保持することができる

カラムはデフォルトでは、NULL値を保持することができます。 そのため、Integerカラムと言いつつも、NULL値を保持することができます。もし、NULLを許容したくないなら、NOT NULL制約をカラムに適用させます。

CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255) NOT NULL,
    Age int
);

www.w3schools.com

SQLでnot equalな条件文を作りたいなら、!= or <>のどちらかの比較演算子を使う

SQLでnot equalな条件文を作りたい場合、!= or <>のどちらかの比較演算子を使います。

www.javadrive.jp

SQL文で、NULLかどうかを判定したいなら、IS NULLを使う

NULLかどうかを判定したいならIS NULL、NULLではないを判定したいなら、IS NOT NULLを使います。

www.w3schools.com

解答

以下のSQL文を実行したら、無事クリアできました。

SELECT name
FROM Customer
WHERE referee_id != 2 OR referee_id IS NULL

終わり

明日もやります!

参考記事

MySQL AND, OR, NOT Operators

SQL における NULL との比較