0Pricing
SQL Interview Prep · レッスン

計算列と式の優先順位

SELECTリスト内の算術演算、連結、演算子の優先順位を学びます。

「計算列と式の優先順位」はCoddyKit上の無料SQL Interview Prepレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Interview Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Interview Prepコースには全4レッスンが含まれています。

SELECT内の計算列

計算列とは、値を直接読み取るのではなく、SELECT内の式から値を導出する列です。たとえば、price * quantityのようなものです。常に分かりやすいエイリアスを付けてください。

SELECT product,
       price,
       quantity,
       price * quantity AS line_total
FROM order_items;

算術演算子

SQLには、想定どおりの数学演算子である+, -, *, /に加えて、剰余演算子があります。結果の型はオペランドに従いますが、そこに次の落とし穴が潜んでいます。

SELECT 7 + 3 AS sum_val,
       7 - 3 AS diff_val,
       7 * 3 AS prod_val,
       7 % 3 AS remainder;

整数除算の落とし穴

注意してください。2つの整数を割ると整数除算になるため、5 / 2の結果は2.5ではなく2です。片方をdecimalにキャストするか、1.0を掛けて修正します。

SELECT 5 / 2          AS int_div,    -- 2
       5 * 1.0 / 2    AS real_div,   -- 2.5
       CAST(5 AS DECIMAL) / 2 AS cast_div; -- 2.5

演算子の優先順位

SQLは通常の数学と同じ優先順位に従います。*と/は+と-より先に実行されます。そのため、2 + 3 * 4は20ではなく14です。括弧を使えば、この優先順位を上書きできます。

SELECT 2 + 3 * 4      AS no_parens,  -- 14
       (2 + 3) * 4    AS with_parens; -- 20

実際の割引クエリにおける優先順位

優先順位によるバグは、ビジネスロジックで起こりがちです。割引価格の場合、*が先に実行されるため、price - price * rateが正しい計算です。エンジンが実際に使用する式のまとまりを、必ず妥当性確認してください。

SELECT price,
       discount_rate,
       price - price * discount_rate / 100 AS net_price
FROM products;

文字列の連結

テキストの連結方法はデータベースによって異なります。Postgresと標準SQLでは|| 、SQL Serverでは+、MySQLではCONCAT()を使います。安全で移植性の高い選択肢はCONCAT()です。

-- Postgres / standard
SELECT first_name || ' ' || last_name AS full_name
FROM employees;

-- Portable
SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM employees;

NULLが算術演算を汚染する

重要な点です。NULLを含む算術演算の結果はNULLになります。そのため、bonusがない人ではbase_salary + bonusもNULLです。問題のある列をCOALESCEで包み、デフォルト値を指定してください。

SELECT base_salary,
       bonus,
       base_salary + bonus            AS unsafe_total,
       base_salary + COALESCE(bonus,0) AS safe_total
FROM employees;

方言ごとの連結とNULL

NULLはテキストにも影響し、方言によって動作が異なります。Postgresでは文字列全体が消えますが、SQL ServerのCONCATではNULLが空文字列として扱われます。予測可能な出力にするには、各要素をCOALESCEで包んでください。

SELECT COALESCE(first_name,'') || ' ' || COALESCE(last_name,'') AS full_name
FROM employees;

式の中での関数

計算列では、ROUND、ABS、UPPERなどの関数を自由に組み合わせられます。関数呼び出しも1つの式にすぎないため、算術演算の中にそのままネストできます。

SELECT product,
       ROUND(price * quantity * 1.0, 2) AS line_total,
       UPPER(product)                   AS product_caps
FROM order_items;

型変換とCAST

オペランドの型が異なる場合、SQLは暗黙的な型変換を行うため、予想外の結果になることがあります。CAST(expr AS type)を使って明示的に指定してください。面接官には、慎重で防御的なコードだと伝わります。

SELECT 'Order #' || CAST(order_id AS VARCHAR) AS label
FROM orders;

列としてのブール式

price > 100のような比較も、それ自体が式です。Postgresではこれをtrue/falseとしてSELECTできますが、移植性を考えるならCASEで包み、1/0やラベルを返すのが適切です。

-- Portable
SELECT product,
       CASE WHEN price > 100 THEN 1 ELSE 0 END AS is_pricey
FROM products;

確認問題

式を評価してみましょう。

まとめ

まとめると、計算列にはエイリアスを付けます。小数の除算にはキャストを使い、優先順位に注意し、移植性の高いテキスト処理にはCONCAT()を使います。また、NULLは算術演算を汚染するため、COALESCEで対処してください。

よくある質問

「計算列と式の優先順位」レッスンは無料ですか?

はい。「計算列と式の優先順位」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Interview Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Interview Prepコースには全4レッスンが含まれています。

「計算列と式の優先順位」で何を学びますか?

SELECTリスト内の算術演算、連結、演算子の優先順位を学びます。 ブラウザで直接実行するハンズオンコードでSQL Interview Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

SQL Interview Prepを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSQL Interview Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「計算列と式の優先順位」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSQL Interview Prepレッスンでコードを書いて実行できますか?

はい。すべてのSQL Interview Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 列の射影とエイリアスの落とし穴
  2. 計算列と式の優先順位
  3. 一意性におけるDISTINCTとGROUP BYの違い
  4. SELECT内のCASE式
← SQL Interview Prepに戻る