リストを出力する際に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.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で結合するというのはなぜでしょうか?
なんのテーブルのどこのカラムかというのを指定してひとつの変数に各カラムを代入してもそれだけでは無意味ということでしょうか?
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文をつなげて文字列として代入し、これを引数として受け取る何らかの関数で実行します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) access フォーム 大分類、小分類 1 2022/08/11 18:03
- MySQL PHP 画像のアップロード Qiita 2 2022/11/28 04:44
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- SQL Server AccessのInsertクエリのあとつづけてDeleteクエリを行いたいがSQLでどう書いたらいい 3 2023/05/27 14:12
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- MySQL あと、MySQLの文字コードはutf8 気になりますね 1 2022/12/01 07:22
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- Oracle SQLの書き方について 1 2023/04/13 09:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
列が存在しないと言われる
-
DBから日付順に指定件数の削除...
-
大量データを更新したら、処理...
-
動的に生成したカラムを使ったF...
-
postgreSQLの日付を変数にする...
-
constraint と index の違い
-
アクセスクエリの計算
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
「直需」の意味を教えてください
-
Oracle 2つのDate型の値の差を...
-
Accessでテーブルの値をテキス...
-
FROM の中で CASE を使えるでし...
-
Access テキスト型に対する指定...
-
作番ってどういう意味でしょうか?
-
IT用語について質問です。 以前...
-
accessでの請求管理について
-
Accessでテーブル名やクエリ名...
-
Accessのクエリでデータの入力...
-
BLOB型のPDF出力の方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
列が存在しないと言われる
-
PostgreSQLで表結合+DELETEしたい
-
0の除算
-
長いSQL文を実行するには?
-
alter tableすると、処理が止ま...
-
INSERTできるレコード数を制限...
-
constraint と index の違い
-
DBから日付順に指定件数の削除...
-
COPY時のtimestamp型について
-
動的に生成したカラムを使ったF...
-
Null値を無視してユニークにしたい
-
postgreSQLの日付を変数にする...
-
INSERTできない
-
DB2 「既存カラムへのnot null...
-
大量データを更新したら、処理...
-
SQLite:項目が存在しない場合の...
-
SQLで特定データがNULLなら別デ...
-
複数キーワードでのあいまい検索
-
powergres(postgres)にalter文...
-
DB2でUNIQUE制約を削除したい
おすすめ情報