dポイントプレゼントキャンペーン実施中!

参考書の内容で質問します。
言葉だけではわかりずらいので、下の二つのテーブルを参考にされてください。

P.230
◎順位をつけの妙技 その2
---------------------------------
参考書の内容の抜粋です。
 サブクエリを使うと、いろいろな方法で順位付けができるのです。
しかし、自己結合でやるよりも、わかりやすくなります。
 ここでは、サブクエリを使った順付の方法を1つだけご紹介します。
 売上情報テーブル「tb」の、売上順位をつけてみます。
今回は別のテーブルを用意して、順位をカラムに入力します。
-----------------------------------------------------------
それで質問です。 
 私的には、マイクロソフトアクセスを学んだ経験~「リネーショナルデータベース」
と「サブクエリ」は同一との考えです。ならば
「サブクエリ」とは 一部以外は書式が違っている「テーフ゛ル同士」があり
状況応じて必要になったデータを「サブクエリ」の技術を利用して、データを取りまとめ
(クエリ)ることのよりそのデータを取り出すことができる技術だと思います。

 しかし 、この参考書は、テーフ゛ル「tb」をコピーして新してテーフ゛ル「tb_zyun;」
を作成しています。
① 書式:CREATE TABLE tb_zyun LIKE tb;
を実行して さらに
②「tb_zyun」に「連続番号期のを持つカラム[zyun]を加える」
 書式:ALTER TABLE tb_zyun ADD zyun INT AUTO_INCREMENT PRIMARY KEY;

この時点で、もうサブクエリは必要ないような気がします。

テーフ゛ル「tb_zyun;」は元テーフ゛ルの「tb」にカラム[zyun]を追加したでけ
であるので 「サブクエリ」は必要ないような気がします。
 サブクエリを使わなくてもテーフ゛ル「tb_zyun;」だけで 「売り上げ」カラム[uria]
の降順と「順番」であるカラム[ zyun]が表を見ることができるのではないでしょうか?

 mysql> INSERT INTO tb_zyun (bang,uria,tuki) (SELECT bang,uria,tuki FROM tb ORDER BY uria DESC);
Query OK, 10 rows affected (0.01 sec)
Records: 10 Duplicates: 0 Warnings: 0
ここでは「サブクエリ」
mysql> select * from tb;
+------+------+------+
| bang | uria | tuki |
+------+------+------+
| A103 | 101 | 4 |
| A102 | 54 | 5 |
| A104 | 181 | 4 |
| A101 | 184 | 4 |
| A103 | 17 | 5 |
| A101 | 300 | 5 |
| A102 | 205 | 6 |
| A104 | 93 | 5 |
| A103 | 12 | 6 |
| A107 | 87 | 6 |
+------+------+------+
10 rows in set (0.01 sec)

mysql> SELECT * FROM tb_zyun;
+------+------+------+------+
| bang | uria | tuki | zyun |
+------+------+------+------+
| A101 | 300 | 5 | 1 |
| A102 | 205 | 6 | 2 |
| A101 | 184 | 4 | 3 |
| A104 | 181 | 4 | 4 |
| A103 | 101 | 4 | 5 |
| A104 | 93 | 5 | 6 |
| A107 | 87 | 6 | 7 |
| A102 | 54 | 5 | 8 |
| A103 | 17 | 5 | 9 |
| A103 | 12 | 6 | 10 |
+------+------+------+------+
10 rows in set (0.00 sec)

下記は
参考書の流れの「抜粋」です。

P.230
◎順位をつけの妙技 その2
---------------------------------
このコメントは 「私擬」
ここでのポイントはカラム[uria]をDESCで降順(大きいもの順)並び替えをする。
それに伝導した新たなカラム[zyun]にデータ型「INT AUTO_INCERMENT PRIMARY KEY」
を施し 順位をつける。

以下本文です。
 ①テーブル[tb]のカラム構造だけをコピーしてテーブル「tb_zyun」を作成する。(P.103参照する。)
 書式:CREATE TABLE tb_zyun LIKE tb;
 実行結果
 mysql> CREATE TABLE tb_zyun LIKE tb;
Query OK, 0 rows affected (0.02 sec)
 
 ②「tb_zyun」に「連続番号期のを持つカラム[zyun]を加える(P.76、87)」
 書式:ALTER TABLE tb_zyun ADD zyun INT AUTO_INCREMENT PRIMARY KEY; SQLハンドP.210
 実行結果
 mysql> ALTER TABLE tb_zyun ADD zyun INT AUTO_INCREMENT PRIMARY KEY;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
 
 ③サブクエリを使い、テーブル「tb」をカラム「uria」の降順に並べ替え、
  [bang][uria][tuki]を「tb_zyun」に挿入する
  ③で、カラム[zyun]には連続番号が自動的に入力され、これが順位になる。
 書式:INSERT INTO tb_zyun 解説:
  (bang,uria,tuki)
  (SELECT
  bang,uria,tuki
  FROM tb
  ORDER BY uria DESC);
  実行結果
mysql> INSERT INTO tb_zyun (bang,uria,tuki) (SELECT bang,uria,tuki FROM tb ORDER BY uria DESC);
Query OK, 10 rows affected (0.01 sec)
Records: 10 Duplicates: 0 Warnings: 0

④新規テーブル「tb_zyun」を確認する
書式:SELECT * FROM tb_zyun;
実行結果;
mysql> SELECT * FROM tb_zyun;~は

以上の表を参考にされください。

質問者からの補足コメント

  • HAPPY

    ご回答くださいましてありがとうございました。
    そうですね!ここでは 新たに作ったテーフ゛ル
    「tb_zyun」を作成後、更にサブクエリの技術を使って
    「売り上げ」カラム[uria]の降順と「順番」であるカラム[ zyun]
    を作成していて、成功している以上は「サブクエリ」が成立して
    います。
    ここではサブクエリの使い方の紹介なので私が質問した内容は別
    の意味となり比較することはできないことが分かりました。

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/09/11 16:22

A 回答 (1件)

>ここでは「サブクエリ」必要ないのではない!?


「ここで」が、
l> INSERT INTO tb_zyun (bang,uria,tuki) (SELECT bang,uria,tuki FROM tb ORDER BY uria DESC);

の後なら必要ないですね。すでにサブクエリを使った後なので。
この回答への補足あり
    • good
    • 1
この回答へのお礼

ご回答くださいましてありがとうございます。
 どうもすみません
 誤り:ここでは「サブクエリ」必要ないのではない!?
 正解:ここでは「サブクエリ」必要ないのではないでしょうか!?

手が空き次第、補足でご回答します。
しばらくお待ちください。

お礼日時:2021/09/10 12:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!