【TRY! ORACLE MASTER】11g SQL基礎I 編
(第3回 グループ関数、複数の表からのデータ取得)

みなさん、こんにちは。おそくなりましたが、本年もよろしくお願いします。今回はグループ関数と複数の表からのデータ取得についてです。
*前回同様、問題文のボックスの後に解説を掲載しています。スクロールしすぎて回答をみてしまうとシラケてしまいますので、ご注意ください! ^^


まずは、グループ関数に関する問題です。

問題(5)

グループ関数ではないものを下記の選択肢から 1 つ選んでください。

  1. COUNT 関数
  2. MAX 関数
  3. NVL 関数
  4. SUM 関数


回答と解説:

 正解は、3.です。

表計算ソフトなどでもなじみのあるグループ関数ですが、代表的なものとして、COUNT 関数や、MAX 関数、MIN 関数、SUM
関数、AVG 関数などがあります。グループ関数は集計を行う関数で、複数の行のインプットに対して、1行の結果を返します。

例えば、社員の平均給与を表示するといった場合、  SELECT AVG(salary) FROM employees というSQL文になり、複数(全社員のレコード)のインプットに対して、平均給与という1つの値(行)を返します。

こ れに対して、第2回でみたNVL関数などは集計を行うグループ関数ではなく、単一行関数と呼ばれます。(1行のインプットに対して、1行の結果を返しま す。)例えば、SELECT NVL(salary, 0) FROM employees というSQLでは全社員のレコードを返します。



どうでしたか?グループ関数のトピックには、グループ毎での集計や重複を排除してのカウントなど、実際に使う重要な機能が多数あります。不安のある方はぜひ見直してください。次は、複数の表からのデータの取得についてです。


問題(6)

(   )に該当する言葉を次の中から1つ選択してください。 

USING句を使用して表を結合する場合のルールとして誤っているものを、次の選択肢から1つ選んでください。

  1. 1つのSELECT文の中で、Natural Join 句とUSING句の両方を指定することはできない
  2. USING句に指定されている列を修飾することはできない
  3. USING句に指定された列が、SQL文のUSING句以外の場所に指定されている場合、その列には別名を指定できない
  4. 両方の表に共通しており、USING句で指定されていない他の列に対して、列名の前に表別名を指定することはできない


回答と解説:

 正解は、4.です。

USING句を使用して表を結合する場合、USING句で指定されている列を修飾することはできません。

複数の表の結合を行う場合、Oracle構文とANSI表記の2つの記述方法があります。この問題はANSI表記に関するものでですが、両方ともマスターしておきましょう。

ANSIでの表記方法の1つであるUSING句を使用して複数の表を結合する場合、以下のようになり、2つの表に共通する名前の列の値が一致する行の組み合わせが結果として返されます。

  SELECT ...
 FROM TabA INNER JOIN TabB
 USING (col1)

この際に、SELECT句などで、  TabA.col1 という記述(修飾)はできないという構文ルールがありますので注意してください。



いかがでしたでしょうか。不正解だったかたは各トピックを見直してください。次回は「副問合せ」 と 「集合演算子」を確認します。お楽しみに!