![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
受講履歴表(研修コード、社員番号、評価)と、社員マスター(社員番号、氏名、部署番号)という2つの表があるときに、次の2つのSQL文はどちらでも同じでしょうか?それとも違う意味があるでしょうか?
SELECT 社員マスター.社員番号, 研修コード, 評価, 氏名 FROM 受講履歴表, 社員マスター WHERE 受講履歴表.社員番号 = 社員マスター.社員番号
SELECT 受講履歴表.社員番号, 以下は上と同じ。
それから、もう一つ分からないのは、アクセスの講習を受けたときは、選択クエリを作るときは、多側のテーブルのフィールドを選んだのですが、SQLの教科書では、社員マスターのフィールドを選ぶように書いてありました。でも理由が書いていないので、なぜそうなのか、よくわかりません。
アクセスの選択クエリと、上のSQL文では、意味が違うのでしょうか?どなたかわかる方、教えていただければありがたいです。
No.3ベストアンサー
- 回答日時:
どちらのクエリも意味は同じです。
このようなクエリを内部結合とかインナージョインとか
いうのですが、= で結ばれるカラムはどちらの表のもの
を指定してもまったく等価でクエリの結果は同じです。
簡単に、表Aと表Bがあるとします。
表A
c1 c2
1 X
2 Y
表B
c1 c3 c4
1 a 10
1 b 20
2 x 0
SELECT * FROM 表A, 表B
では結果はこんな感じになります。
表A.c1 表A.c2 表B.c1 表B.c3 表B.c4
1 X 1 a 10
1 X 1 b 20
1 X 2 x 0
2 Y 1 a 10
2 Y 1 b 20
2 Y 2 x 0
次に
SELECT * FROM 表A,表B
WHERE 表A.c1 = 表B.c1
の結果は上記から表A.c1 = 表B.c1 のものを取り出した
形になるのでこんな感じです。
表A.c1 表A.c2 表B.c1 表B.c3 表B.c4
1 X 1 a 10
1 X 1 b 20
2 Y 2 x 0
結合の条件として = が使われるとその条件の列は必ず
等しくなりますので、
SELECT 表A.c1, c2,c3,c4 FROM 表A,表B
WHERE 表A.c1 = 表B.c1
も
SELECT 表B.c1, c2,c3,c4 FROM 表A,表B
WHERE 表A.c1 = 表B.c1
も同じ結果を返します。つまり等価なクエリです。
結果は同じなのですが、選択する列によって実行速度
に違いが出たりする場合があります。
DBMSの内部処理の実装によるので一概にどちらのほう
よいともいえません。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_01.png?5a7ff87)
No.2
- 回答日時:
現状ではNO1の方のおっしゃるとおりと思います。
select 社員マスター.社員番号, 研修コード, 評価, 氏名 from 社員マスター left join 受講履歴表 on 社員マスター.社員番号 = 受講履歴表.社員番号
といった連結を勉強してみてください。違いがわかってくると思います。
回答ありがとうございました。
今持っている教科書は本当に基礎的なものでleft joinという連結は載っていませんでした。
更に本を買って勉強したいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 会社・職場 詳しい方教えてください。 なぜかコメントすることができないので、コメントしてくださったかたにはいいね 1 2022/12/29 08:04
- Visual Basic(VBA) 先ほど、回答者様によって教えていただいたのですがどうしたらいいか分かりません。 ユーザーフォーム上に 2 2023/02/21 22:25
- Excel(エクセル) エクセルで沢山のレコードの最後に追記するには? 7 2023/04/10 13:27
- SQL Server AccessのInsertクエリのあとつづけてDeleteクエリを行いたいがSQLでどう書いたらいい 3 2023/05/27 14:12
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Excel(エクセル) Excelの質問です。 重複なしの部署一覧の表を作り、各部署のセル横に各部署の社員番号をすべて抜き出 3 2023/04/26 18:14
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessで別テーブルの値をフォ...
-
【Access】選択クエリのグルー...
-
access 自動採番 年が変わる...
-
アクセス 項目ごとに自動採番
-
access 自動採番 「10-AA-000...
-
[Access]異なるレコード間の文...
-
Accessで日付が変わると番号が...
-
電話番号の局番と住所の検索に...
-
Accessでのレコード存在チェック
-
vba 直前の操作はキャンセルさ...
-
〜のような結果を出すためのSQL...
-
SELECT * FROM `生徒名簿` INNE...
-
アクセスで受付番号簿を作ろう...
-
【アクセスVBA】テーブルにフィ...
-
Access:抽出して、色をつけたい。
-
Accessで一致したデータを表示...
-
access クエリで集計した数値を...
-
Access でレコードセレクタが押...
-
SQL文で右から1文字だけ削除す...
-
Oracleでの文字列連結サイズの上限
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessで別テーブルの値をフォ...
-
access 自動採番 年が変わる...
-
最新の日付とその金額をクエリ...
-
Accessでのレコード存在チェック
-
【アクセスVBA】テーブルにフィ...
-
アクセスで「空き番」の確認
-
vba 直前の操作はキャンセルさ...
-
条件をつけて日付の古い行を抜...
-
質問です。 下記のテーブルとデ...
-
【Access】選択クエリのグルー...
-
[Access]異なるレコード間の文...
-
Access:抽出して、色をつけたい。
-
Access 文字+年ごとの自動採番
-
Accessで日付が変わると番号が...
-
access 自動採番 「10-AA-000...
-
Recordset.FindFirstについて
-
ACCESSでの行番号の自動採番
-
access2003で学籍番号から生徒...
-
【SQL】existsでの商演算
-
サイベースには、オラクルのROW...
おすすめ情報