
リストを出力する際にSQLでデータの取得をする際に全く分からないことがあります。
2つのテーブルと1つのマスタがあり、リストを出力するときの項目となる部分に
ssql = A_TB.○○
ssql= A_TB.××
ssql= B_TB.**
ssql= B_TB.☆☆
ssql= A_TB.♪♪
ssql= C_MT.〒〒
ssql= A_TB.々々
のようにselectで各項目となる各テーブル、マスタのカラムを代入しています。
このときのformはどうなりますか?
No.2ベストアンサー
- 回答日時:
No.1ですが、回答に対していただきましたご質問にお答えします。
>> selectで指定したカラムのテーブルをいくつか取り出す場合
取り出されるデータは、レコードごとの行、カラムごとの列で形成される二次元の表形式ですから、
これは、取り出したデータがどのような表になるか、具体的に想像すれば、お判りでしょう。
仮にA_TBに、
商品名、顧客名, 数量、金額を表すカラムがあり、
商品A, Aさん, 10, 1000
商品B, Bさん, 20, 2000
商品C, Aさん, 30, 3000
とデータが格納されていて、
C_MTに、
顧客名、顧客住所を表すカラムがあり、
Aさん, 東京都
Bさん, 埼玉県
とデータが格納されているとします。
"SELECT * FROM A_TB, C_MT"
と、JOINを用いなければ、
A_TBの各レコードに対して、C_MTの全てのレコードが結合された、異常に膨大なデータ(直積)が取り出されます。
これを交差結合(Cross Join)と言います。
結果
商品A, Aさん, 10, 1000, Aさん, 東京都
商品A, Aさん, 10, 1000, Bさん, 埼玉県
商品B, Bさん, 20, 2000, Aさん, 東京都
商品B, Bさん, 20, 2000, Bさん, 埼玉県
商品C, Aさん, 30, 3000, Aさん, 東京都
商品C, Aさん, 30, 3000, Bさん, 埼玉県
これに対し、SQLのきちんとした文法を用いて、
SELECT * FROM A_TB INNER JOIN C_MT ON A_TB.顧客氏名 = C_MT.顧客氏名
と書けば、
上記の交差結合の結果のうち、A_TB.顧客氏名 = C_MT.顧客氏名の部分だけ取り出されます。
結果
商品A, Aさん, 10, 1000, Aさん, 東京都
商品B, Bさん, 20, 2000, Bさん, 埼玉県
商品C, Aさん, 30, 3000, Aさん, 東京都
>> なんのテーブルのどこのカラムかというのを指定してひとつの変数に各カラムを代入してもそれだけでは無意味
おっしゃる通り、無意味です。
前の回答にも書きましたが、基本的には、
一つの変数に、全ての句のSQL文をつなげて文字列として代入し、これを引数として受け取る何らかの関数で実行します。
No.1
- 回答日時:
こんばんは。
僕の知識が足らなくて、全く知らなかったことなのかも知れませんが、
おそらく、SQLでそういう書き方はしません。
実際に実行するのは、何らかのプログラムでSQL文を実行させるわけですよね??
基本的には、一つの変数に、全ての句のSQL文をつなげて文字列として代入し、これを引数として受け取る何らかの関数で実行します。
SQL文は、
"SELECT * FROM A_TB"
と書けば、A_TBのデータが全て取り出せます。
例えば、A_TBが請求書のデータを格納しているテーブルで、C_MTが顧客データを格納しているテーブルなら、
請求書の顧客IDと、顧客データの顧客IDが、紐づけられているハズです。
"SELECT * FROM A_TB LEFT JOIN C_MT ON A_TB.顧客ID = C_MT.顧客ID"
と書けば、各請求書に各顧客データを紐づけて、請求書のデータが全て取り出せます。
ちなみにSELECT文の*の部分は、テーブルのカラム名をカンマ区切りで指定できますが、
*を書けば全てのカラムが対象になります。
SELECT文で指定したカラムのテーブルは、
基本的には、FROM句で結合方法を決めて、全て指定しなくてはなりません。
…この辺までが、SQLのハローワールドでしょうか。
******
別のご質問の補足となりますが、SQLを学ばれるのであれば、SQLiteがオススメです。
1ファイルで完結し、容易にバックアップをとったり、持ち運びできるからです。
データベースブラウザには、DB Browser for SQLiteという、下記のURLからダウンロードして使えるものがオススメです。
http://sqlitebrowser.org/
ご丁寧な質問ありがとうございます!
ひとつ疑問があるのですが、selectで指定したカラムのテーブルをいくつか取り出す場合にもjoinで結合するというのはなぜでしょうか?
なんのテーブルのどこのカラムかというのを指定してひとつの変数に各カラムを代入してもそれだけでは無意味ということでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
長いSQL文を実行するには?
-
constraint と index の違い
-
「直需」の意味を教えてください
-
Excel 2019 のピボットテーブル...
-
ACCESS検索★ある文字を複数のフ...
-
【Access】フォームで自動計算...
-
エクセルグラフの凡例スペース
-
Accessのクエリでデータの入力...
-
日本語のテーブル名、カラム名...
-
Access クロス集計クエリについて
-
データがある場合のカラムの削除
-
再計算って出来ますか?
-
下記の事を行うSQLがわかりませ...
-
カウントが出来ません
-
Countと受付状態の表示に...
-
【続続】Access2002で連番のつ...
-
Accessでテーブル名やクエリ名...
-
accsessで顧客コードで氏名を呼...
-
AccessでNullをカウントする方法
-
Access2000 更新のタイミング?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
列が存在しないと言われる
-
INSERTできるレコード数を制限...
-
長いSQL文を実行するには?
-
PostgreSQLで表結合+DELETEしたい
-
constraint と index の違い
-
0の除算
-
COPY時のtimestamp型について
-
動的に生成したカラムを使ったF...
-
DBから日付順に指定件数の削除...
-
INSERTできない
-
SQLite:項目が存在しない場合の...
-
powergres(postgres)にalter文...
-
■一番最初に値が入っている(Nul...
-
カラムのデフォルト値に16進数
-
フィールドから値を読み出す
-
PostgreSQLの「not null」制約...
-
alter tableすると、処理が止ま...
-
インデックスの張り方について
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
おすすめ情報