7.SQL演習(2/3)

お願い:

SQLZOOの問題文の日本語訳で、おかしな部分や分かりにくい部分が有ったら指摘してください。修正します。

※SQLZOOの問題は毎年更新されています。問題が更新・追加などで訳とずれている場合もあります。

SQL演習応用:SQLの select 文について集計関数、条件指定、グループ化を詳説する。

キーワード:

グループ化、集計SQL

サブクエリ―についても今回扱う。 演算子 ALL と IN とサブクエリ―の関係を学ぶ。

参考資料:

■Webclass

>>新基本情報技術者試験学習教材

>>テクノロジ系対策コース2

>>第3章データベース

3.11 データ操作(5)

上記テキストに関する細かい突っ込み:

・データ操作(5)

並べ替え順での 空白(NULL値) の扱いについて: 空白 を並べ替えの際にどのように扱うかはデータベースのエンジンごとに挙動が異なるので要確認。
order by case when foo is Null then 0 else 1 asc , foo
のように Null に対して値を設定して並べ替えるなど工夫が必要。

>>データベース入門

第6章 データベース言語SQL

6-5 データ集計とグループ化

外部サイト: サブクエリーと ALL ANY の利用について http://www.techscore.com/tech/sql/SQL7/07_02.html/

HAVING と WHERE の差について https://codezine.jp/article/detail/652

旧講義資料:

関数とSELECT文の句 (GROUP BY の部分)

表の結合とサブクエリー (今回は、サブクエリーの部分)

演習0:

SQLZOO の練習問題 Tutorial Section から

5.SUM and COUNT

5-6 5-7 5-8 GROUP BY や HAVING を利用する問題

上記の問題を解く。先週の課題として、サブクエリ―、GROUP BY や HAVING を各自で予習して回答済みの人は、省略してよい。

演習1:

SQLZOO の練習問題 Tutorial Section から

4.SELECT within SELECT Tutorial

に取り組む。

問題の回答は、メモ帳などに 問題番号( 4-1 の様な形式)とSQL文をコピーして

記録しておく。

回答を記録したテキストファイルを、WebClassに 3113999.txt の形式のファイル名で提出。

問題文 と エラーメッセージ の訳文:

■問題文
4.SELECT within SELECT Tutorial
このチュートリアルで、より複雑なクエリ―を実行するために、select文の中で select 文を利用する方法を示す。
   

4-1 ロシア(Russia)よりも人口(population)が多い各国を表示する

4-2 国民一人当たりの国内総生産(per Capita GDP)がイギリスよりも大きなヨーロッパの国を表示する。

4-3 'Argentina'または'Australia' を含む大陸にある国の、国名と大陸を表示する。国名順に表示する。

4-4 人口がカナダ Canadaよりも多く、ポーランドPolandよりも少ない国の、国名と人口を表示する。

4-5 ドイツは(人口 80000000人)とヨーロッパで最大の国である。オーストリア(8500000人)はドイツの人口の11%である。

ヨーロッパの各国について 国名と人口を表示する。ドイツ人口の何%かで表示する。

パーセント表示には、 % 記号を使え。

(ヒント) ROUND と CONCAT 関数を使う(リンク先参照)

4-6 ヨーロッパのどの国のGDPよりも大きなGDPを持つ国の国名だけを表示する。(GDPがNULL の国も有る)

(ヒント) WHEREの条件で ALL を利用するとよい。加えて、GDPが null である国を除外する条件も付ける。

(担当講師注)値 null が比較演算に含まれる場合の扱いについて、調べて見よう。

4-7 (ちょこっと予習) テーブル名とフィールド名について、テーブル名を指定したフィールドの指定が可能。テーブル名の指定は、表の結合で利用するが、今回は、サブクエリーと外のクエリ―の表の区別に、テーブル名の名前の付け替えを利用している。

各大陸のもっとも大きな国(面積で)の大陸、国名、面積を表示する。

※自己相関クエリー というテクニックを利用して解きます。

4-8 各大陸を表示する。その大陸で、アルファベット順で先頭の国名も表示する。

(ここから先、難問。まだ出てきていないテクニックが必要。予習して解く)

4-9 総人口が 250000000 より小さい大陸に属する、国の名前と大陸と人口を表示。

4-10 ある国は、おなじ大陸内の他のどの国よりも3倍大きな人口を持っている。国名と大陸を表示する。

(ヒント)条件は、「その国の population/3 が、他国の中で population が最大の国よりも大きい」

■エラーメッセージなど
You have an error in your SQL syntax 文法エラー
Too many rows 行が多すぎる(条件の指定ミス)
Too few rows 行が少なすぎる(条件の指定ミス)
Too many columnss 列が多すぎる(表示項目の指定ミス)
Too few columnss 列が少なすぎる(表示項目の指定ミス)
Unknown column 'xxxxxxxxx' in 'field list'  (xxxxxxxxx がフィールド名に無い。スペルミスか、テーブルの指定ミス)
Show correct result 正しい答えを表示する(表示内容が間違っていた場合表示される。クリックで正解の出力結果を表示)

演習2:

は 復習問題

SQLZOO の練習問題 Tutorial Section の 1,2,3 の最下部に、クイズ(Quiz)が載っているので解いてみること。

(回答すると、正解が表示される。この課題は提出は不要)