こんにちは
株式会社ゼネット新人の藤﨑です。
先日SQL文を書く際、副問い合わせにかなり苦戦しました…。
私と同じようにJava初心者の方、副問い合わせで躓いた方に
ぜひ読んでほしいです。
1.はじめに
私は、Java経験が現在3か月の初心者です。
初心者の私が間違えた点を紹介していきます。
2.実際に間違えた具体例
・SELECT句での副問い合わせについて
私が一番間違えた点は、
「副問い合わせで1行を指定しているか」
基本的にSELECT句では1行を取得しなければなりません。
私はSELECT句での副問い合わせで1行を超える行の選択をよくしていました。
今回は2つのテーブルを結合し、副問い合わせをつかってまとめて表示したいと思います。
ここからは具体的にコードを載せていきます。
通常では3つテーブルを用意しますが今回は簡単にするため2つ用意します。
今回は全受注のフルーツが何個売れたか、
現在庫量も一緒に表示したいと思います。
下記にコードを示します。
SELECT id,name,price,stock,(SELECT SUM(amount) FROM orders WHERE item_id = item.id) FROM item;
例1)全受注のフルーツが売れた量と在庫量
こんな簡単に書きましたが、私はかなり苦戦しました。
ここからはその際、間違えたコードを提示します。
SELECT id,name,stock,(SELECT amount FROM orders WHERE item_id = item.id) FROM item;
ここでの副問い合わせは1行のみを返すものでなければなりません。
よって正解は、SELECT句の「amount」を「SUM(amount)」にする必要があります。
この記事を読んでくれているあなたが、データの参照(WHERE)についての
理解が浅い、なんとなくテーブル同士の結合をしてSELECT文で
表示をしているのならば、かなり危険です(私自身がそうでした)。
条件付き参照(WHERE)について
詳しく説明するとかなり長くなってしまうので
この記事では割愛させていただきます。
3.おわりに
改めて、SQL文での副問い合わせでの注意点は
「副問い合わせで1行を指定しているか」
複数行を指定しないように気を付けましょう。
いかがだったでしょうか。
最後まで読んでいただきありがとうございました。