このレッスンでやること
データベースは、たくさんの行をまとめて調べるのが得意です。いくつあるか、種類ごとにいくつあるか、対応するものがないのはどれか。このレッスンでは、ショップのデータベースに COUNT、GROUP BY、JOIN、LEFT JOIN を使って4つの質問をします。データは何も変えません。
はじめる前に
メモ
このレッスンの上のバーにある ラボを起動 を押して、実行中と表示されるまで待ちます。最初の起動は少し時間がかかります。そのときにショップのデータベースが作られるからです。下の 実行 ボタンを押すと、コマンドがラボのターミナルに順番に入力されます。同じセッションの中で続けて動きます。動きを見たり自分で入力したりするには、バーの ターミナルを開く(新しいタブ) を押します。
1. ターミナルにサインイン方法を教える
SQL の基本と同じ2つのコマンドです。1つ目は、クライアント(データベースに接続するプログラム)が MySQL 自身の証明書を受け入れるようにします。2つ目は、shop データベースにサインインして文を1つ実行するための短い名前 sql を作ります。ターミナルを再起動したときは、もう一度実行してください。何度やっても問題ありません。
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnfここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
alias sql='mariadb -h db -u student -pstudent shop -t -e'ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
2. 行を数える
COUNT(*) は行の数を数えます。AS customers は、答えの列に customers という名前を付けます。このショップのお客さんは40人です。
sql "SELECT COUNT(*) AS customers FROM customers"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
3. 種類ごとに数える
GROUP BY country は、国ごとに答えの行を1つ作ります。COUNT(*) は、それぞれの国のお客さんの数を数えます。ORDER BY customers DESC は、多い順に並べます。イギリスが14人で一番多くなります。
sql "SELECT country, COUNT(*) AS customers FROM customers GROUP BY country ORDER BY customers DESC LIMIT 3"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
4. 2つの表をまたいで数える
商品は、カテゴリを数字でしか持っていません。JOIN を使うと、その数字のとなりにカテゴリの名前が並ぶので、カテゴリごとの商品の数を数えられます。Books、Kitchen、Outdoors は5つずつです。カテゴリのない商品が2つあり、JOIN ではその2つは結果に出ません。
sql "SELECT categories.name, COUNT(*) AS products FROM products JOIN categories ON products.category_id = categories.id GROUP BY categories.name ORDER BY products DESC LIMIT 4"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
5. ないものを見つける
普通の JOIN は、対応する行があるものだけを残します。LEFT JOIN はお客さん全員を残し、対応する注文がないところには NULL(何も入っていないという印)を入れます。WHERE orders.id IS NULL でそれだけを選ぶと、一度も注文したことのないお客さん4人が出てきます。
sql "SELECT customers.first_name, customers.country FROM customers LEFT JOIN orders ON orders.customer_id = customers.id WHERE orders.id IS NULL"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
先生へ
ヒント
このレッスンは、ラボで進めるレッスンの小さな例です。手順と実行ボタンがレッスンで、ラボは生徒一人ひとりのコピーです。このレッスンは SQL の基本と同じ MySQL のラボを使うので、生徒の sql のショートカットや履歴も引き継がれます。ショップのデータベースは、見つけるものがあるように作ってあります。注文したことのないお客さん、売れたことのない商品、空の値などです。ご自分のモジュールにコピーして変更するか、レッスンビルダーの ラボ メニューから最初から作ってください。