0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SQL SELECT 句 で真偽値(ブール値 Boolean)を返す(MySQL / Presto)

Posted at

今日学んだ知らなかったこと

下記は仮のSQLですが、今日は以下のようなクエリを見て

SELECT
  id,
  created_at,
  city_id IS NOT NULL AS is_city
FROM test_requests
...

3カラム目がなぜ真偽値が1行に1行に割り振られているのかがわかりませんでした。

原因

今までなんとなく書いていたので以下の意識がありませんでした。

WHERE 句 の直後には検索条件となる真偽値を与えなければいけない ということ。

SELECT * FROM WHERE id IS NULL

当たり前ですが、上記のように書けば、WHERE句がTRUEになる行だけが抽出されて、出力されます。

ということは、WHERE句内は真偽値が返ってきていると言うことです。

今日見たクエリは、それをSELECT句に書いただけです。

例題

以前作成したテーブルで試してみましょう。

実行結果はこちらで確認できます。

CREATE TABLE companies (
	id INT NOT NULL PRIMARY KEY auto_increment,
	company_name TEXT,
	company_group_id INT,
	address TEXT
);

INSERT INTO companies VALUES
(1, 'ACE', 1, 'Japan Tokyo chiyoda 1-1'),
(2, 'ACE_1', 1, 'Japan Tokyo chiyoda 1-1'),
(3, 'ACE_2', 1, 'Japan Tokyo chiyoda 1-2'),
(4, 'RAINBOW_MEAL', 2, 'Japan Tokyo koukyogaien 1-1'),
(5, 'STEP_INDUSTRY', 3, 'Japan Osaka fuchu midorigaoka 1-1');

Query

SELECT
	*,
	company_group_id IS NOT NULL
FROM companies

MySQLとPrestoの実行結果の違いを記載しておきます。

MySQL v8.0

id company_name company_group_id address company_group_id = NULL
1 ACE 1 Japan Tokyo chiyoda 1-1 1
2 ACE_1 1 Japan Tokyo chiyoda 1-1 1
3 ACE_2 1 Japan Tokyo chiyoda 1-2 1
4 RAINBOW_MEAL 2 Japan Tokyo koukyogaien 1-1 1
5 STEP_INDUSTRY 3 Japan Osaka fuchu midorigaoka 1-1 1

Presto

id company_name company_group_id address company_group_id = NULL
1 ACE 1 Japan Tokyo chiyoda 1-1 false
2 ACE_1 1 Japan Tokyo chiyoda 1-1 false
3 ACE_2 1 Japan Tokyo chiyoda 1-2 false
4 RAINBOW_MEAL 2 Japan Tokyo koukyogaien 1-1 false
5 STEP_INDUSTRY 3 Japan Osaka fuchu midorigaoka 1-1 false

以上です。

アウトプット100本ノック実施中

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?