質問: ### 知りたいこと VIEWを使い、0〜99のデータを作るSQLがあるのですが、どのような処理(流れ)で2桁の整数が生成されているのかが、よくわかりません。 以下のSQLをご参照の上、処理の流れについてご教授お願いいたします。 ### 該当のソースコード t_digit digit | -------+ 0 1 2 3 4 5 6 7 8 9 ``` create view t_test AS SELECT (d1.digit+(d2.digit*10)) AS Number FROM (t_digit d1 join t_digit d2); SELECT * FROM t_test; ``` ### 自分の解釈 1行目 t_test という名前のVIEWをつくる 2行目 digitというフィールドとdijitを10倍したフィールドを足してNumberというフィールド名で呼ぶ 3行目 t_digit と t_digitのテーブルを結合する 4行目 t_testを全部表示する ### 疑問 1.d1.digitとd2.digitとあるが、d1やd2はなぜこのように書くのか?命名ルールがわからない。任意なのでしょうか? 2.3行目でテーブルを結合していますが、0〜9のテーブルと0〜90のテーブルを外部結合するので(0+0〜9)、(10+0〜9)、(20+0〜9)・・・という処理がされて0〜99のデータが生成されるのでしょうか?
回答: ``` create view t_test AS SELECT (d1.digit+(d2.digit*10)) AS Number FROM (t_digit d1 join t_digit d2); ``` で view [t_test] を定義し、 ``` SELECT * FROM t_test; ``` で定義した[t_test]からデータを呼び出していますね。 1.d1.digitとd2.digitとあるが、d1やd2はなぜこのように書くのか?命名ルールがわからない。任意なのでしょうか? d1 や d2 はテーブルに対する別名(エイリアス)です。 `t_digit d1` で `t_digit を d1 という別名として扱う`という意味になります。 2.3行目でテーブルを結合していますが、0〜9のテーブルと0〜90のテーブルを外部結合するので(0+0〜9)、(10+0〜9)、(20+0〜9)・・・という処理がされて0〜99のデータが生成されるのでしょうか? FROM句で `FROM TABLE1 JOIN TABLE2` とした際(LEFT JOIN 等でなく)、対象となるデータは、TABLE1 の各行と TABLE2 の各行の全ての組み合わせになります。 同一のテーブルをJOINする場合、どちらがどちらなのか判断つかなくなるので、別名をつけます。 それが d1、d2 です。 対象としているデータはどちらも同じく t_digit です。 という事で、`FROM (t_digit d1 join t_digit d2)` は、d1 の digit列(つまり d1.digit)とd2のdigit列(d2.digit)の2列からなるデータとなります。 つまり、`SELECT (d1.digit+(d2.digit*10))` は、d1 を 一の位、d2 を十の位として、足したものを取得しています。 一の位が0~9、十の位が0〜9 の各組み合わせとなるので、 0〜99 が各行として変えるクエリになるでしょう。