計算列と式の優先順位
SELECTリスト内の算術演算、連結、演算子の優先順位を学びます。
「計算列と式の優先順位」はCoddyKit上の無料Coding Interview Prepレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCoding Interview Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Coding 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チューター)、Coding Interview Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Coding Interview Prepコースには全4レッスンが含まれています。
「計算列と式の優先順位」で何を学びますか?
SELECTリスト内の算術演算、連結、演算子の優先順位を学びます。 ブラウザで直接実行するハンズオンコードでCoding Interview Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Coding Interview Prepを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCoding Interview Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「計算列と式の優先順位」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCoding Interview Prepレッスンでコードを書いて実行できますか?
はい。すべてのCoding Interview Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。