SQLの結合について

このQ&Aのポイント
  • データベース初心者のためのSQL結合についての解説
  • テーブルAとテーブルBの結果を結合する方法について詳しく解説します
  • データベース初心者でも理解しやすいSQL結合の基本的な使い方を紹介します
回答を見る
  • ベストアンサー

SQLの結合について

データベース初心者です。 使用しているデータベースは、DB2です。 質問ですが、テーブルAとテーブルBに対して、それぞれにSelect文を実行した結果があるとして、その2つの結果を結合することは可能でしょうか? テーブルAに対し、Select文を実行した結果 氏名   年齢   ID --------------------- ○○○  50   00001 △△△  20   00002 ×××  30   00003 テーブルBに対し、Select文を実行した結果 出身地  住所   管理No --------------------- ■■■  あああ  00001 ◆◆◆  いいい  00002 ●●●  ううう   00003 上記2つの結果を結合して以下のような結果を求めたい。 氏名   年齢   ID 出身地  住所 ----------------------------------------------- ○○○  50   00001 ■■■  あああ △△△  20   00002 ◆◆◆  いいい ×××  30   00003 ●●●  ううう ご教授のほどお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

SELECT テーブルA.氏名, テーブルA.年齢, テーブルA.ID ,テーブルB.出身地, テーブルB.住所 FROM テーブルA JOIN テーブルB ON テーブルA.ID = テーブルB.管理No

zuraoyaji
質問者

補足

説明不足で申し訳ございません。 やりたいことは、 テーブルBに対し、以下コマンドを実行したうえで、テーブルAと結合を行いたいと思っております。 select 出身地,住所,管理No from テーブルB お手数をおかけしますが、宜しくお願い致します。

関連するQ&A

  • SQLのテーブル結合

    SQLのSELECTについて質問です。 テーブルA、B、Cから情報を取得し、下記の画面イメージを表示させたいのですが、 どのようにテーブルを結合すればよいか判りません。 どなたかご教示ください・・・。よろしくお願いします。 #テーブルCから組名を取得するような処理は画面表示のロジックで行います。 #テーブルA、Bの結合についてのみ、教えていただきたいです。 条件 ・氏名と、所属情報の○×を表示したい ・DISTINCT等、重たい処理は避けたい 画面イメージ |氏名  |赤組|白組|青組| ------------------------------ |山田太郎|○ |× |× | |山田花子|× |○ |○ | テーブルA |個人ID|氏名  | -------------------- |000001|山田太郎| |000002|山田花子| テーブルB |個人ID|組コード| -------------------- |000001|1110  | |000002|1111  | |000002|1112  | テーブルC |組コード|組名| ------------------ |1110  |赤組| |1111  |白組| |1112  |青組|

  • SQLの結合条件について

    SQLの結合条件について ・table_A ID | ATAI 01 | AAA 01 | XXX 02 | ABC 03 | DEF table_B ID | ATAI 01 | 不要 02 | 必要 03 | 必要 04 | 不要 上記のようなテーブルAとBがあるとします。 やりたいこと 1.テーブルAに存在するIDをBのIDから抽出 2.テーブルAの「ATAI」の値が’AAA’のIDは抽出対象から外す。 ※テーブルAの01IDに’AAA’と’XXX’がありますが、Bの抽出対象から外したい。 2.がうまくいきません。 select B.ID from table_A A,table_B B where A.ID = B.ID 上記のSQLに2.の条件を足して、結果を02と03にしたいです。 ※CASEは使わずにお願いします。

  • ACCESS SQL 左結合しなければならない理由

    ACCESSで作成されたVBAのSQLコードを理解しているのですが、 テーブルAは番号、氏名、住所、年、月、・・・ テーブルBは番号、身長、体重、・・・ という2つのテーブルがあって、 式(1)のSQLでは、 テーブルAにテーブルBを左結合しているのですが、 なぜ左結合しなければならないのかがよく分かりません。 この後、 rst.Open strSQL, CurrentProject.Connection Do Until rst.EOF  str氏名 = rst!氏名  (省略) rst.MoveNext Loop rst.Close Set rst = Nothing で氏名を取り出しているだけで テーブルBのフィールドは何も使っていないようなので、 素人の私には、テーブルBを左結合しなくても、 式(2)のSQLでいいように思えるのですが、 式(1)と式(2)で何か違いがあるのでしょうか。 --式(1)---------------------------------------- strSQL = _ "SELECT テーブルA.年, テーブルA.月, テーブルA.住所, テーブルA.番号, " & _ "テーブルA.氏名 " & _ "FROM テーブルA LEFT JOIN テーブルB ON テーブルA.番号 = テーブルB.番号 " & _ "GROUP BY テーブルA.年, テーブルA.月, テーブルA.住所, テーブルA.番号, " & _ "テーブルA.氏名 " & _ "HAVING テーブルA.年 = '" & 指定年 & "' AND テーブルA.月 = '" & _ 指定月 & "' AND テーブルA.住所 = '" & 指定住所 & "' " & _ "ORDER BY テーブルA.年, テーブルA.月, テーブルA.番号" --式(2)---------------------------------------- strSQL = _ "SELECT テーブルA.年, テーブルA.月, テーブルA.住所, テーブルA.番号, " & _ "テーブルA.氏名 " & _ "FROM テーブルA & _ "GROUP BY テーブルA.年, テーブルA.月, テーブルA.住所, テーブルA.番号, " & _ "テーブルA.氏名 " & _ "HAVING テーブルA.年 = '" & 指定年 & "' AND テーブルA.月 = '" & _ 指定月 & "' AND テーブルA.住所 = '" & 指定住所 & "' " & _ "ORDER BY テーブルA.年, テーブルA.月, テーブルA.番号" ------------------------------------------------ よろしくお願いします。

  • 巨大テーブルの外部結合

    巨大なテーブル同士を結合する際に、みなさんはどのように結合されますか?もっともパフォーマンスのある方法を模索しているところです。 テーブルA:約900万件 テーブルB:約400万件 テーブルAのインデックスはカラム:idです。 テーブルBにはインデックスはありません。 取得したいのはBテーブルに含まれるAテーブルのidの件数です。 select  count(id) from B where A.id = B.id なんてやると、数時間かかります。 select count(id) from B where exists(select * from A where A.id = B.id) ですと、約3hぐらいかかりました。 inで実行すると等価結合したときと変わらないぐらいになります。 こういう場合、皆さんはどう結合されていますか? お知恵を拝借できると幸いです。 ちなみにoracle 8iです。 よろしくお願いいたします。

  • 条件付き外部結合について

    表A:ID、氏名 表B:ID、氏名 の2表を結合したいのですが、条件が 1.BのID <> 0 のときはIDで結合 2.BのID = 0 のときは氏名で結合 3.マッチしない、Bに存在しない場合はAのみ表示 となっています。 SELECT A.ID,A.氏名,B.ID,B.氏名 FROM A,B WHERE A <> 0 AND A.ID = B.ID(+) UNION SELECT A.ID,A.氏名,B.ID,B.氏名 FROM A,B WHERE A = 0 AND A.氏名 = B.氏名(+) では、よけいな行が選択されてしまいます。 なにかよいアイデアはないでしょうか?

  • 【SQL文】このような結合UNION?できますか?

    SQL文でテーブルを結合し、insertしたいと思っています。 例) テーブル名:tb1, カラム:A1,A2 テーブル名:tb2, カラム:B1(b1,b2,b3,,,,) テーブル名:tb3, カラム:C1(c1,c2,,,,,,) tb2とtb3を結合させてtb1へinsertしたいと思いますが、 tb2とtb3リレーションを組める要素がありませんし、データの型も違います。 |A1 | A2 __|____|_____ 1 |b1 |c1 _____________ 2 |b1 |c2 _____________ 3 |b2 |c1 _____________ 4 |b2 |c2 _____________ 上記のような結果を作ってtb1へINSERTしたいのですが、UNION結合を使えるのか どうかすらわかりません。ネットで調べたのですが、突破孔を見つけることができ ませんでした。 ちなみにACCESSで結合までの結果を得るのに、SELECT B1.tb2,C1.tb3 from tb2,tb3 という文で出せましたが,mySQLではダメでした。 どなたかご教授おねがいできますでしょうか?

    • ベストアンサー
    • MySQL
  • 【SQL】existsでの商演算

    閲覧ありがとうございます. 現在SQLでデータベースの勉強をしているのですが,existsを用いて商演算を行おうとしてわからない箇所が出てきたので,その点に関しての質問をさせて頂きます. 例として,A,Bと名付けた2つのテーブルを最初に用意します. [テーブル1(名前:机1)] | 番号 |氏名|年齢| 好物 | --------------------------- | 12 | あ | 1 | りんご | | 23 | い | 1 | すいか | | 23 | い | 1 | りんご | | 45 | え | 3 | すいか | | 45 | え | 3 | りんご | [テーブル2(名前:机2)] | 好物 | ---------- | りんご | | すいか | この机1を机2で割ることで,この要素を含む氏名を取り出したいと考えて,以下のようなSQL文を実行しました. select 氏名 from 机1 A where exists( select * from 机2 B where A.好物 = B.好物); [求めている結果表示] | 番号 |氏名| ------------- | 23 | い | | 45 | え | [実際に表示された結果] | 番号 |氏名| ------------- | 12 | あ | | 23 | い | | 23 | い | | 45 | え | | 45 | え | 実行すると (1)氏名が重複で表示されてしまう (2)「りんご」のみ好物の「あ」も表示されてしまう という問題が発生してしまい,色々と調べて考えたものの,結局分からなかったので,今に至ります. 長文・駄文すみませんでした. まだSQLを学び初めて少ししか経っていないので,全く違うことをしていたらすみません.よろしければ,問題解決へのアドバイスをお願いします.

  • 外部結合について

    こんばんは。 SQLでの外部結合について教えてください。(オラクルの場合です) データを取得しいテーブルが4つあったとします。 Aテーブルのキーは、「ユーザーID」と「名前」と「住所」だとします。 Bテーブルのキーは、「名前」と「郵便番号」とします。 Cテーブルのキーは、「名前」と「郵便番号」とします。 取得したいデータは、全てのテーブルに存在しています。 Aテーブルに対してBテーブルとCテーブルを外部結合したいと思っています。 Aテーブルには「ユーザーID」があります。 Bテーブルからは、「給料」データが取得したいのです。 Cテーブルからは、「年齢」データが取得したいのです。 B,Cのテーブルに条件に合致するものがなくても、AのユーザーIDだけは 表示したいと思っています。 自分なりに考えて色々試したのですが、うまく行かず構文でエラーになります。 どうしてもAテーブルに外部結合したいです。 SELECT  A.ユーザーID,  B.給料,  C.年齢 FROM  A,  B,  C WHERE  A.ユーザーID = ’XXXXX’,      A.名前 = ’AAAAAA’,      A.住所 = ’KKKKKKKKKKK’,      A.名前(+) = B.名前,      A.名前(+) = C.名前,      A.郵便番号(+) = B.郵便番号,      A.郵便番号(+) = C.郵便番号 このように考えたのですが,「すでに1つの表と外部結合されています」みたいに エラーがでてしまいます。 どのように修正すれば、よいのでしょうか? よろしくお願い致します。      ※全角になっているなどは、見やすくする為にやっています。

  • Oracle10gで1つのSQLで複数回同じテーブルを結合する場合のパ

    Oracle10gで1つのSQLで複数回同じテーブルを結合する場合のパフォーマンス向上 Oracleで1つのSQL内で同じテーブルを2回以上結合すると結果出力にかかる時間が非常に遅くなります。 例: SELECT * FROM A, B b1, B b2 WHERE a.id = b1.id AND a.id = b2.id (テーブルBを2回結合している) こういう場合にパフォーマンスを落とさない方法はありますか?テンポラリテーブルでテーブルBのレプリカを作成して使用するというのはなしです。あくまで1つのSQLで結果出力できることを前提にパフォーマンスを向上する方法を教えてください。

  • SQL HAVING句の使い方について

    以下のテーブルAとテーブルBを結合して結果テーブルを出力したいと考えています。 (テーブルA上のIDのカウントした数をテーブルBに結合して出力したい。) テーブルA ----------- CATE ID aaa 001 bbb 001 ccc 003 ddd 004 テーブルB ----------- ID NAME 001 101 002 102 003 103 004 104 結果テーブル ---------------------- ID NAME COUNT 001 101 2 002 102 0 003 103 1 004 104 1 そこで、 =================================== SELECT B.ID, B.NAME, COUNT(A.ID) FROM TABLE_A B, TABLE_B B GROUP BY B.ID, B.NAME, A.ID HAVING A.ID = B.ID =================================== とSQLを書いてみましたが、 002 102 0 のテーブルAにIDが存在していない列が結果として表示されませんでした。 WHERE句でいう「WHERE A.ID =* B.ID」のようなことを行いたいのですが、どのように行えばよいでしょうか? よろしくお願いいたします。