• 締切済み

【試験対策】SQLの問いあわせ文

以下の問題の解答はCと問題集にはあるのですが、Aのような気もします。 どちらが正しいでしょうか? CだとNumberをもっていない行も選択されないでしょうか? NAMES NAME NUMBER -------------------- Wayne Gretzky 99 Jaromir Jagr 68 Bobby Orr 4 Bobby Hull 23 Brett Hull 16 Mario Lemieux 66 Mark Messier 11 テーブル名: POINTS NAME POINTS -------------------- WayneGretzky 244 Jaromir Jagr168 BobbyOrr 129 Brett Hull 121 MarioLemieux 189 Joe Sakic 94 Which of the following statements will display the player name, number, and points for all players that have scored points? A. SELECT p.name,n.number, p.points FROM names n INNER JOIN points p ON n.name = p.name B. SELECT p.name,n.number, p.points FROM names n LEFT OUTER JOIN points p ON n.name = p.name C. SELECT p.name,n.number, p.points FROM names n RIGHT OUTER JOIN points p ON n.name = p.name D. SELECT p.name,n.number, p.points FROM names n FULL OUTER JOIN points p ON n.name = p.name

  • Oracle
  • 回答数2
  • ありがとう数1

みんなの回答

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.2

問題の趣旨は NAMES  の Mark Messier 11 と POINTS の Joe Sakic 94 がでるかでないかで、 A. INNER JOIN B. LEFT OUTER JOIN C. RIGHT OUTER JOIN D.FULL OUTER JOIN の違いを理解しているか尋ねています。 結果は、 A.どちらもでない。 B.Markのみでる。 C.Joeのみでる。 D.両方でる。 となるので(何故かは文法書を参照してください) 質問 Which of the following statements will display the player name, number, and points for all players that have scored points? の条件にあうものを選びます。

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.1

> CだとNumberをもっていない行も選択されないでしょうか? はい,選択されます。 "for all players that have scored points" と問題文に指示されています。 英語の意味が分からなければ翻訳サイトを使いましょう。

関連するQ&A

  • SQL文の変換(Oracle→MySQL)結合句

    OracleからMySQLへSQL文を変換するにあたり、 テーブル結合部分が複数ありややこしくて以下で合っているのか、分かる方いましたらご教授ください。 ■Oracle  SELECT *  FROM m, h, p, c  WHERE m.mid = h.mid(+)  AND m.tcd = '0'  And h.pid = p.pid(+)  And m.rcd = c.rcd  And c.cid = 'aaa' ■MySQL  SELECT *  FROM m left outer join h on m.mid = h.mid and m.tcd = '0'     h left outer join p on h.pid = p.pid     m left inner join c on m.rcd = c.rcd and c.cid = 'aaa'

    • ベストアンサー
    • MySQL
  • sqlについて

    下に書いたsqlのコードの内容(どういう処理でどういう結果になるのか)が知りたいです。 どなたかわかる方教えてください。 select b.ym, b.no,     isnull(e.sumcnt,0)as val, null as bunsi, null as bunbo from (select distinct ym,no from Table_A)b inner join (select ym from Table_B where cd=1)d on b.ym=d.ym left outer join (select b1.ym,b1.no,sum(c1.cnt)as sumcnt from Table_A b1 inner join (select ym from Table_B where cd=1)d1 on b1.ym=d1.ym inner join Table_C c1 on b1.ym=c1.ym group by b1.ym,b1no)e on b.ym=e.ym and b.no=e.no

  • SQL副問い合わせ内のエイリアス

    DEPARTMENTとEMPLOYEESのテーブルがあり、そこから社員のいない部署を取得しようとしているのですが、わたしの書いたSQLがうまく動きません。作動しない理由をご教授くだされば助かります。オラクル8.1.7.4.1で動作させなければならず、left outer joinが使えないところからの質問です。 データはこういう構造です(*がプライマリーキィを表す)。 DEPARTMENT: *DEPT__T, DEPT_NAME, .... EMPLOYEES: *EMPLOYEES__T, DEPT_NAME, ... これに対して、 select dept__t, (select count(*) from employee where department.dept__t = employees.dept__t) counter from department where counter = 0 というSQLで社員のいない部署を取ろうとしたのですが、ORA-00904: "COUNTER": invalid identifier.が返されてしまいます。 WHERE文にcounterというエイリアスではなくカラムそのものを書くと問合せが正常に作動するのですが、なぜでしょうか。オラクルのバージョンが古いことが原因でしょうか。

  • SQL文(テーブル項目名が特殊文字)

    SQL文では、全角の「No.」が特殊文字なため、[ ]でくくらないといけません。 表示項目では、通常これだけで良いのですが、FROM句では、【無効です】のエラーが発生してしまいます。 SELECT [a.受注No.] 受注No,手配数 FROM jyuchu AS a LEFT OUTER JOIN tehai AS b ON [a.受注No.]=[b.手配No.] テーブルの項目名に、このような特殊文字を使用しないのが良いのですが基幹系コンピュータとの関係があり、それもできません。 カッコやASを駆使したのですが、どうしても上手くできません。 良いお知恵がありましたら教えて頂けないでしょうか? よろしく、お願いいたします。

  • SQL文

    SQLの初心者です。 Aテーブル(a項目,b項目,c項目)とBテーブル(a項目,d項目,e項目)のテーブルがあります。 d項目順でAテーブルの項目のみ出力するにはどうしたらいいのでしょうか。 例えば次のSQL文ではd項目順で出力されますが結合の為、AテーブルとBテーブルの全項目が出力されます。 SELECT * FROM Aテーブル LEFT OUTER JOIN DITKM ON Aテーブル.a項目 = Bテーブル.a項目 ORDER BY Bテーブル.d項目 次のSQL文のようにAテーブルの項目を選択したらAテーブルの項目のみ出力する事はわかります。 SELECT a項目,b項目,c項目 FROM Aテーブル LEFT OUTER JOIN DITKM ON Aテーブル.a項目 = Bテーブル.a項目 ORDER BY Bテーブル.d項目 今回はAテーブルの項目数が少ないのでこれでもいいのですが、項目数が多くなると大変です。 上の様に項目を選択しないでAテーブルの項目を全て出力する事は可能なのでしょうか。 宜しくお願い致します。

  • sqlの積について

    以下、2つのテーブルがあるとします。 cake (テーブル) id, name, price (カラム) 1, チョコ, 300 2, マッチャ, 250 3, イチゴ, 400 4, チーズ, 200 sold (テーブル) name, num, total_sales (カラム) チョコ, 3, " " マッチャ, 4, " " イチゴ, 1, " " チーズ, 5, " " (total_salesは空欄という設定です) この2つのテーブルにおいて、inner joinを使い、nameをカギとしてcakeとsoldを結びます。 (select * from cake inner join sold on cake.name = sold.name;) そのあと、各商品においてpriceとnumの積を計算し、total_salesに結果をupdateするにはどうすればいいのでしょうか… update = sold set sold.total_sales = cake.price* sold.num from cake inner join sold on cake.name = sold.name; や UPDATE S SET total_sales = S.num * C.price FROM cake as C inner join sold as S ON C.name = S.name などいろいろ試してみましたが、どうしてもできません…

  • SQL文なんですが

    select t1.link_no,t1.bunrui_code,t2.bunrui_name,t1.name,t1.url,t1.comment from link t1 inner join bunrui t2 on t1.bunrui_code=t2.bunrui_code and t1.link_no=$link_no これって、どういう処理をしようとしているんでしょうか?このクエリがうまくいってないようなので、次の処理が思ったように動かないんです。自分で作ったものではないので、理解できないでいます。

    • ベストアンサー
    • PHP
  • sqlのusingについて

    SQL92標準の select * from a left outer join b using(column) の様にusingはsqlserverでは使用できないのでしょうか? on a.column = b.columnは出来ますが。。。 書き方が悪いのか、sqlserverはSQL92標準ではないのか、そもそもusingはSQL92標準ではないのか。色々webで調べてましたが、わかりませんでした。どなたか教えて下さい。

  • Oracle[10g]のSQL文について。(新No.3)

    なんども、恐縮です。 Oracle[10g]のSQL文についての質問です。(新No.3) 実は、JOINが多くてどこに[ROW_NUMBER]を入れれば良いのか解りません。 [A]テーブルに [CODE](KEY) [CODE2] のフィールドがあります。 A-1 B-1 A-2 B-2 A-3 B-3 [A2]テーブルに [CODEB](KEY) [CODE2] のフィールドがあります。 AA-1 B-1 AA-2 B-2 AA-3 B-3 [B]テーブルに [CODE3](KEY) [NAME-B] のフィールドがあります。 B-1 NAME-B-1 B-2 NAME-B-2 [C1]テーブルに [NO](KEY) [LINE](KEY) [CODE] [CODEB]のフィールドがあります。 X 1 A-1 AA-2 X 2 A-3 AA-1 Y 1 A-2 AA-3 [C2]テーブルに [NO](KEY) [LINE](KEY) [LINE2](KEY) [BIKO] のフィールドがあります。 X 1 1 BIKO-1 X 1 2 BIKO-2 結果が [NO/LINE/CODE/CODEB/NM1/NM2/BIKO] X 1 A-1 AA-2 NAME-B-1 NAME-B-2 BIKO-1 X 2 A-3 AA-1 (null) NAME-B-1 (null) と、なる様にしたいのです。 要するに、のBIKOは、[C2.LINE2]の一番最小の物を取得したいのです。 SELECT C1.NO, C1.LINE, C1.CODE, C1.CODEB, B.NAMEB AS NM1, B_1.NAMEB AS NM2, C2.LINE2, C2.BIKO FROM ((((C1 LEFT JOIN A ON C1.CODE = A.CODE) LEFT JOIN B ON A.CODE2 = B.CODE3) LEFT JOIN A2 ON C1.CODEB = A2.CODEB) LEFT JOIN B B_1 ON A2.CODE2 = B_1.CODE3) LEFT JOIN C2 ON (C1.LINE = C2.LINE) AND (C1.NO = C2.NO) WHERE (((C1.NO)='X')) ORDER BY C1.NO, C1.LINE, C2.LINE2; と、考えたのですが、結果が X 1 A-1 AA-2 NAME-B-1 NAME-B-2 1 BIKO-1 X 1 A-1 AA-2 NAME-B-1 NAME-B-2 2 BIKO-2 X 2 A-3 AA-1 (null) NAME-B-1(null)(null) と、出てしまいます。 どうすれば良いのでしょうか ? 宜しくお願い致します。

  • 全パターンを出力するSQL文

    SQLite バージョン3.7.10 を使用しています。 テーブルの構成などはこちらをご覧ください http://ideone.com/T50DH 次のような条件で結果を出力すると、 select sum(t5.amount * (t4.percent / 100.0)) result from ( ( select strftime('%Y', date) year, t2_key, t3_key, amount from t5 where strftime('%Y', date) = '2011' ) t5 inner join t2 on (t2.key = t5.t2_key and t2.name = 't2_name1') inner join ( select t4.* from t4 inner join t1 on (t4.t1_key = t1.key and t1.name = 't1_name1') ) t4 on (t5.t3_key = t4.t3_key and t5.year = t4.year) ); '2011'、't1_name1'、 't2_name1' の計算結果が出力されます。 例えばこの条件で、 '2011'ではなくて'2012'の計算結果を得たければ '2012'、't1_name1'、 't2_name1' の値をいちいち手動で入力してその都度求めれば出来るとは思いますが、 この3つの条件を全パターン出力してくれるようなSQL文を書くことはできないでしょうか? 例えば '2011'、't1_name1'、 't2_name1' の計算結果12300.0 '2011'、't1_name1'、 't2_name2' の計算結果・・・ '2011'、't1_name2'、 't2_name1' の計算結果・・・ '2011'、't1_name2'、 't2_name2' の計算結果・・・ '2012'、't1_name1'、 't2_name1' の計算結果・・・ '2012'、't1_name1'、 't2_name2' の計算結果・・・ '2012'、't1_name2'、 't2_name1' の計算結果・・・ '2012'、't1_name2'、 't2_name2' の計算結果・・・ というような結果を得たいです。 これはどのようなSQL文になるのでしょうか?