今日学んだ知らなかったこと
下記は仮の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本ノック実施中