以下のSQLの2つの結果は同じでしょうか?
LEFT OUTHERは、ON句の中の左の表を全て取得するというものでしょうか?

SELECT ename, dname, jname FROM emp e
LEFT OUTHER JOIN dept d ON (e.deptno=d.deptno)
LEFT OUTHER JOIN job j ON (e.jobid=j.deptno);

SELECT ename, dname, jname FROM emp e
RIGHT OUTHER JOIN dept d ON (d.deptno=e.deptno)
RIGHT OUTHER JOIN job j ON (j.jobid=e.deptno);

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

>以下のSQLの2つの結果は同じでしょうか?



同じ結果が得られる場合もデータ次第ではあるえるけど、通常は違った結果になる。

>LEFT OUTHERは、ON句の中の左の表を全て取得するというものでしょうか?

ON条件中の左側でなく、OUTERキーワードの左側です。
from A left outer B は、「Aの全件」と「条件に合うB」の結合結果が戻ります。
RIGHT OUTERの場合は、OUTERキーワードの右側が基準になります。

>LEFT OUTHER JOIN dept d ON (e.deptno=d.deptno)
>LEFT OUTHER JOIN jobs j ON (e.jobid=j.deptno);
>では、empとdeptで、empを全て表示
>deptとjobsでdeptを全て表示となる気がするのですが。。

from (( emp left outer join dept ) left outer join jobs )
と解釈されます。
empとdeptの結合結果に対し、jobsを結合するので、jobsの結合条件には
empの項目もdeptの項目も文法上は利用可能です。
ただ、今回のように外部結合の場合は、外部結合(dept)側の項目は、NULLの可能性があり
結合条件として成立しないかもしれませんけどね。
    • good
    • 0
この回答へのお礼

つまり左から順々に処理していくということですね
どうもありがとうございました。

お礼日時:2009/05/24 11:16

どこで躓いているのかわかりませんが。


・deptもjobsもempに対してそれぞれ結合されていることをまず理解しましょう。
 結合キーを見ての通り、jobsはdeptに対して結合しているわけではありません。

 SELECT ename,dname
 FROM emp e
 LEFT OUTER JOIN dept d ON d.deptno=e.deptno

 SELECT ename,jname
 FROM emp e
 LEFT OUTER JOIN jobs j ON j.jobid=e.jobid

・RIGHT OUTER JOINはLEFT OUTER JOINと逆です。

 emp表がすべて表示されます
 SELECT ename,dname
 FROM emp e
 LEFT OUTER JOIN dept d ON d.deptno=e.deptno

 dept表がすべて表示されます
 SELECT ename,dname
 FROM emp e
 RIGHT OUTER JOIN dept d ON d.deptno=e.deptno

・この問題をRIGHT OUTER JOINで回答するとしたら、
 SELECT ename,dname,jname
 FROM dept d
 RIGHT OUTER JOIN emp e ON d.deptno=e.deptno
 LEFT OUTER JOIN jobs j ON j.jobid=e.jobid

 書けなくはありませんが、非常にわかりにくい文になります。
 どちらが主になるテーブルかが分かりにくくなるので、一般的にはRIGHT OUTER JOINは使わないようします。
(RIGHT OUTER JOINはすべてLEFT OUTER JOINを使った文に書き換えることが可能です)

※OUTHERではなく、OUTERです。
    • good
    • 0
この回答へのお礼

>どちらが主になるテーブルかが分かりにくくなるので、一般的にはRIGHT OUTER JOINは使わないようします。
(RIGHT OUTER JOINはすべてLEFT OUTER JOINを使った文に書き換えることが可能です)

勉強になりました。どうもありがとうございました。

お礼日時:2009/05/24 11:17

結果は違うと思います。


大きく違うのは、emp e表のe.deptnoがNULLとなっている行が含まれるか
含まれないか。
LEFT OUTER JOINは、左側のテーブルの行はすべて含まれますが右側のテーブルの行は左側のテーブルにマッチするものがなければ表示されません。
RIGHT OUTER JOINは逆になりますので、結果は異なります。

この回答への補足

回答ありがとうございます!
やはり違いますよね
長いので貼り付けようか迷いましたが・・・
下記の問題がどうしても分かりません。
emp表
empno ename jobid deptno
100 King PRES 10
101 Kochher VP 10
102 Scott SALE 20
103 Allen PROG 30
104 Bob PROG 30
105 Joe SE
106 Apel 10

dept表
deptno dname
10 人事
20 営業
30 技術
40 研究

jobs表
JOBID JNAME
PRES 社長
VP 副社長
SALE 営業担当
PROG プログラマ
SE システムエンジニア

出力結果
ENAME DNAME JNAME
King 人事 社長
Kochher 人事 副社長
Scott 営業 営業担当
Allen 技術 プログラマ
Bob 技術 プログラマ
Joe  システムエンジニア
Abel 人事

問題
3つの表を結合するとき正しいSQL文を選べ。

答え
SELECT ename, dname, jname FROM emp e
LEFT OUTHER JOIN dept d ON (e.deptno=d.deptno)
LEFT OUTHER JOIN jobs j ON (e.jobid=j.deptno);

どなたかご説明お願いします。

補足日時:2009/05/23 18:14
    • good
    • 0
この回答へのお礼

すみません。この問題の回答の補足には
全ての従業員を表示するため、emp表の全ての行が表示されるように
外部結合を行う必要があります。よってdept表を結合する時と
job表を結合する時にいずれもemp表の側をLEFT OUTER JOIN又は
RIGHT OUTER JOINで指定します。

LEFT OUTHER JOIN dept d ON (e.deptno=d.deptno)
LEFT OUTHER JOIN jobs j ON (e.jobid=j.deptno);
では、empとdeptで、empを全て表示
deptとjobsでdeptを全て表示となる気がするのですが。。

お礼日時:2009/05/23 18:20

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q英語の方言?略語? ter

英語の方言?略語? ter

こんにちは。
私は洋書を読むのが好きなのですが、
Harry Potterの登場人物で、ハグリッドという大男がいますよね。
ハグリッドは、例えばyouをyeh、yourをyer、forをfer、andをan'といった喋り方をするのですが、
terというのはtoの事でしょうか?
Yeh'd die of hunger tryin' ter get out, even If yeh did manage ter get yer hands on summat.
みたいな感じでちょこちょこ使われているのですが。

お分かりになる方、教えていただけると嬉しいです。

Aベストアンサー

 ter = to は、皆さんのおっしゃる通りです。#3さんはアメリカの地方言語を鋭く目に留めていらっしゃいます。

 例を見ると、弱い母音を er や eh で表している「人造方言」のようですね。個人の作家が著作に登場する人物に特徴をつけるにはいろいろ方法がありますが、登場人物が喋る言葉に、職業なり、社会的階級なり、出身地方なりに従って色をつけるのも、手法の一つです。

 色つけが過ぎると意味が分からなくなります。京都地検の女、京都迷宮案内、女刑事みずき、などを見ましたが、この「京都もの」の共通点は、いずれも主な登場人物は東京の言葉を喋り、京都の言葉は軽い色つけに使われていることでした。テレビドラマでも小説でもこの綱渡りをやっています。

 小説の人造方言も、フォレスト・ガンプやハリー・ポッターのように抑えておくと、意味は通じるし、登場人物の性格は出るし、という中道を取ったものでしょう。

QLEFT JOINとRIGHT JOINについて

SQL初心者です。
基本的な質問ですみません、教えてください。
LEFT JOINとRIGHT JOINについて、どちらのテーブルを左側、どちらのテーブルを右側にするのかが分かっていません。どういう基準で左側、どういう基準で右側と考えれてばいいのでしょうか?
宜しくお願いします。

Aベストアンサー

>どちらのテーブルを左側
FROMの次の最初のテーブルが左側です。
尚、後で解析しやすいように、なるべくLEFT JOINを使い、どうしてもRIGHT JIONが必要な場合のみRIGHT JIONを使う事を推奨します。

Q【英語の音節と発音について質問です】 英語の音節についてですが、interestの音節はin-ter

【英語の音節と発音について質問です】

英語の音節についてですが、interestの音節はin-ter-estですよね。
最近英語を勉強し始めた初心者のせいか僕はin-ter-estではなくin-te-restというふうに認識してしまいます。
なぜin-ter-estという音節になるのかを教えていただきたいです。

発音についてですが、音節の通りに発音しないといけないのですか?
interestの場合、僕はreをreと発音していましたが音節の通りrとeを別にして発音しないといけないのですか?

Aベストアンサー

>英語を母国語としている人達は、この音節を学んでいなくても無意識に理解しているのですよね?

我々も同じですが、言葉というものは耳から聞き、母親や周囲の人が話す言葉をまねて覚えます。

それは言語がかわっても同じです。 日本人に難しい発音にthisのthがあります。
カタカナ発音に促されて、ジに近い発音をイメージして発音しがちですが、現実は上下の歯で舌を噛み、唇を薄く横に広げないとthの発音は出ません。ほかにも楽器のviolinの最初の音viがありますが、これも仮名のビになりがちで、現実は、上の前歯を唇にのせたまま、唇を横に薄くして発音します。 これは言葉で説明できないもので、正しくは、ネイティヴの唇をみて(場合によっては指で触れて)やらないと正しい発音はできないのです。 いまあげたのは単純な例ですが、日本語の発音があまりに簡単なため、英語に限らず外国語発音は日本人には難しいです。 それと日本語は音節が一拍一拍と長さが等しいですが、英語はそうではありません。 反対に英語ネイティヴには、日本人が一拍として解釈する長音や詰まる音(促音)が区別できません。英語にはないからです。 たとえば、「整形外科」も「石鹸玄関」もきわめて酷似していて識別ができないのです。 かなり日本語がわかっても、日本語の詰まる音や伸ばす音は難しいのです。

それましたが、言葉というものは耳で聞き覚えるのが最初で、書き言葉やスペルは後天的に教育で覚えるものです。 ですから、日本語の尺度で英語の発音を分解しても意味はないのです。

>英語を母国語としている人達は、この音節を学んでいなくても無意識に理解しているのですよね?

我々も同じですが、言葉というものは耳から聞き、母親や周囲の人が話す言葉をまねて覚えます。

それは言語がかわっても同じです。 日本人に難しい発音にthisのthがあります。
カタカナ発音に促されて、ジに近い発音をイメージして発音しがちですが、現実は上下の歯で舌を噛み、唇を薄く横に広げないとthの発音は出ません。ほかにも楽器のviolinの最初の音viがありますが、これも仮名のビになりがちで、現実は、上...続きを読む

QLEFT JOINの条件式で=’’を使用した場合

以下のSQLを実行した場合、レコードを1件取得して欲しいのですが、
なぜか上手く取得できません。

ご存知の方がいらっしゃいましたら、教えてください。


-- SQL1 ---------------------------------------------------

select
  MAIN.MAIN_NAME,
  nvl(SUB1.CODE is NULL, 0) as SUB_CODE1,
  nvl(SUB2.CODE is NULL, 0) as SUB_CODE2
from
  MAIN_TABLE MAIN
   left join SUB_TABLE SUB1 on MAIN.CODE = SUB1.CODE
                   and SUB1.ZYOUKEN = '1'    (1)
   left join SUB_TABLE SUB2 on MAIN.CODE = SUB2.CODE
                   and SUB2.ZYOUKEN = ''     (2)
where
  MAIN.CODE = 'XXX'

-----------------------------------------------------------

質問1.
どうも、(2)の部分を空文字(?)ではなく何か値を入れると正常に1件
取得できるようなのですが、なぜ外部結合しているにもかかわらず
0件になってしまうのかが良く分かりません。

質問2.
やはり条件に空文字を使用するのはよろしくないでしょうか?



※補足
念のため、以下のSQLを実行したところ、こちらは問題なく1件取得
できているので、抽出条件は間違っていないです。

-- SQL2 ---------------------------------------------------

select
  MAIN.MAIN_NAME
from
  MAIN_TABLE MAIN
where
  MAIN.CODE = 'XXX'

-----------------------------------------------------------


以上です。宜しくお願いします。

以下のSQLを実行した場合、レコードを1件取得して欲しいのですが、
なぜか上手く取得できません。

ご存知の方がいらっしゃいましたら、教えてください。


-- SQL1 ---------------------------------------------------

select
  MAIN.MAIN_NAME,
  nvl(SUB1.CODE is NULL, 0) as SUB_CODE1,
  nvl(SUB2.CODE is NULL, 0) as SUB_CODE2
from
  MAIN_TABLE MAIN
   left join SUB_TABLE SUB1 on MAIN.CODE = SUB1.CODE
                   and SUB1.ZYOUKEN = '1'    (1)
 ...続きを読む

Aベストアンサー

autotrace あたりで自分の意図したとおりのものになっているか確認してみてはどうでしょう?

WHERE句が指定されているので、実行計画が等価結合に書き換わっちゃっている可能性があります。

昔、これではまったことがあるので
僕は外部結合するときはWHEREは指定しないようにして
ON句で条件を指定するようにしています。
# 個人的にはバグじゃないかと思うんだけど仕様らしい。

たとえば、
WHERE句の条件を(1)あたりに追加してみてうまくいくようならこのケースかなと。

Q~ter の発音

こんにちわ。

terの発音について教えて欲しいのです。

現在アメリカに住んでいます。
先日、アダルトスクールにて レストランとかでwaterが上手く伝わらなくて。。。
と先生に発音を教えてもらった時のことなんですが、
私が waterを「わたー」と言ったら 先生が water を「わら」と教えてくれたのですが、
「ほら、letter(手紙)も "れら"でしょ」と例を挙げてくれたんです。

letterは"れたー"だと思ってたんですが、辞書を見ると両方の発音記号の最後は "ter"(eは逆さのe)で、「t」になってるんですが、
私には「L」発音に聞こえたんです。

じゃぁ、もしかして 「~ter」の単語は ほとんど「ら」って発音するのかなぁ?って
この2つが特別なのか、それとも私の耳が悪いのか、何かご存知の方がいらっしゃれば
教えていただけないでしょうか?

上手く説明できないんですが、よろしくお願いします

Aベストアンサー

アメリカ人はtを軽く発音するので結果的に「ワラー」や「レラー」のように聞こえるんですが、本当に「wara」とか「wala」と言っているわけではありません。

他の方がもっとうまく説明してくれると思いますが・・・、
erの発音の仕方を練習してみてはいかがでしょうか。舌の位置とか。口の開け方とか。
    ↓
http://pronunciation-english.com/
http://www.uiowa.edu/~acadtech/phonetics/
下のURLでは、まずアメリカ国旗をクリックし、vowelsの隣のmonophthongsをクリック、その中の"central"の中にer音があります。eの逆さにちょろっとヒゲみたいなのが付いたマークです。

昔私が辞書で読んだ発音の仕方は、
「小指の先を歯の先で噛んで、その小指をそっと取り除けた、そのまま口の開き方でアーと発音する」というもの。
アーと言ってもウとの間みたいな、曖昧な音になりませんか?
で、軽い感じで“T”を言うのとこの“er”音を組み合わせて練習してみると、米音のwaterとかletterのようになるんじゃないかと思いますが・・・・。

あとは「ウォ」を「U」でなく、「ウールwool」と言うときのようにw発音するとか。
waにアクセントを置いて、terは軽く低くするように言ったら強弱もついて、waterらしく聞こえるかもしれません。

まあ、いっそのこと思いっ切り「ワラー」と言ったらそれで通じるかもしれませんが!?

アメリカ人はtを軽く発音するので結果的に「ワラー」や「レラー」のように聞こえるんですが、本当に「wara」とか「wala」と言っているわけではありません。

他の方がもっとうまく説明してくれると思いますが・・・、
erの発音の仕方を練習してみてはいかがでしょうか。舌の位置とか。口の開け方とか。
    ↓
http://pronunciation-english.com/
http://www.uiowa.edu/~acadtech/phonetics/
下のURLでは、まずアメリカ国旗をクリックし、vowelsの隣のmonophthongsをクリック、その中の"central"の中に...続きを読む

Qサブクエリ同士をLEFT JOIN

select SUB1.品番,
SUB1.在庫計上セクション,
SUB1.倉庫,
SUB1.場所,
SUB1.在庫数,
SUB2.売価変更日付,
SUB2.売変単価
from
(select 在庫管理RF.在庫計上セクション as 在庫計上セクション ,
在庫管理RF.倉庫 as 倉庫,
在庫管理RF.場所 as 場所,
在庫管理RF.品番 as 品番,
sum(在庫管理RF.フリー在庫数) as 在庫数
from 在庫管理RF
where フリー在庫数 > 0
group by 在庫管理RF.在庫計上セクション, 在庫管理RF.倉庫, 在庫管理RF.場所,
在庫管理RF.品番) SUB1 left join (select 売価変更確定RF.品番 as
品番,
max(売価変更確定RF.売価変更日付) as 売価変更日付,
min(売価変更確定RF.売変単価) as 売変単価
from 売価変更確定RF
group by 売価変更確定RF.品番) SUB2

上記のSQL文が実行できません。
どこがいけないのかもわかりません。
どなたか詳しい方がいればアドバイスお願いします。
使っているTOOLはOSqlEditです。
ACCESSのクエリデザインで同じようにサブクエリを使って実行すると
うまくいきます。
よろしくお願いします。

select SUB1.品番,
SUB1.在庫計上セクション,
SUB1.倉庫,
SUB1.場所,
SUB1.在庫数,
SUB2.売価変更日付,
SUB2.売変単価
from
(select 在庫管理RF.在庫計上セクション as 在庫計上セクション ,
在庫管理RF.倉庫 as 倉庫,
在庫管理RF.場所 as 場所,
在庫管理RF.品番 as 品番,
sum(在庫管理RF.フリー在庫数) as 在庫数
from 在庫管理RF
where フリー在庫数 > 0
group by 在庫管理RF.在庫計上セクション, 在庫管理RF.倉庫, 在庫管理RF.場所,
在庫管理RF.品番) SUB1 left ...続きを読む

Aベストアンサー

結合条件を示すON句がありません。
~group by 売価変更確定RF.品番) SUB2
ON SUB1.xx = SUB2.yy
xxとyyは必要な項目を指定してください。

QAvril Lavigneの"sk8ter boi"の意味について

いつもお世話になっています。

質問タイトル通りなのですが、skater boyとはどういう意味なのでしょうか。単に、スケートをしているどこにでもいる少年、ということでいいのでしょうか? 

どなたかご教授ください。

Aベストアンサー

歌詞なので何処で出会ったというのは分かりませんが、彼女はスケボーが趣味の様なのでそれに関係あるのかもしれませんね。
一応和訳乗せておきます。 

彼は男の子、彼女は女の子
こんなにもわかりやすいことがある?彼はパンク系で、彼女はバレエをやってた。
これ以上言う必要がある?
彼は彼女が好きだった
彼女は決して言わなかったけど
密かに彼が好きだった
彼女の友達は横から口出ししたの
彼のダボダボ服が気に入らなかったみたい
彼は Sk8er Boi
彼女は「また後でね」と言ったの
彼は彼女には釣り合わなかった
彼女はかわいいお顔をしてた
けど、お姫様気分だったの
もっと現実的になる必要があったのよ
5年が経って
家に一人で座ってる
子供にご飯をあげながら
彼女はひとりぼっち
テレビを付けると
誰が出てると思う?
Sk8er Boi が MTV に
彼女は知り合いに電話
けど、もう知ってた
ライブのチケットまで持ってるの
彼女は付いて行って
ファンの中に立って
昔振った男を見上げるの
彼は Sk8er Boi
彼女は「また後でね」と言ったの
彼は彼女には釣り合わなかった
今、彼はスーパースター
ギターを鳴らしてる
そのかわいいお顔は彼の価値を理解してたのかしら?
彼は Sk8er Boi
彼女は「また後でね」と言ったの
彼は彼女には釣り合わなかった
今、彼はスーパースター
ギターを鳴らしてる
そのかわいいお顔は彼の価値を理解してたのかしら?
ごめんね、けど、逃しちゃったのよ
そうね、残念、あの彼はもう私のもの
私たちはただの友達以上の関係なの
これがお話の結末ね
見えなかったのは惜しかったわね
彼の男の可能性を
目に見える以上のものがあるのよ
私は男の内面を見るわ

参考URL:http://ja.wikipedia.org/wiki/アヴリル・ラヴィーン

歌詞なので何処で出会ったというのは分かりませんが、彼女はスケボーが趣味の様なのでそれに関係あるのかもしれませんね。
一応和訳乗せておきます。 

彼は男の子、彼女は女の子
こんなにもわかりやすいことがある?彼はパンク系で、彼女はバレエをやってた。
これ以上言う必要がある?
彼は彼女が好きだった
彼女は決して言わなかったけど
密かに彼が好きだった
彼女の友達は横から口出ししたの
彼のダボダボ服が気に入らなかったみたい
彼は Sk8er Boi
彼女は「また後でね」と言ったの
彼は彼女...続きを読む

QSQL LEFT JOIN

SQLでわからないことがあるので質問させていただきます。

例えばの話ですが在庫テーブルというテーブルがあってそこに商品マスタ
をLEFT JOINする際に

SELECT * 
FROM 在庫テーブル LEFT JOIN 商品マスタ
ON 品番 = 品番

として実行すると返ってくる結果は在庫テーブルの全レコードと
品番で結んだ商品マスタに存在するデータってことですか?
上記のSQLと

SELECT *
FROM 在庫テーブル

で返ってくるレコード件数が違うという時はどういう可能性が考えられるでしょうか?
ちなみに商品マスタの品番レコードはすべてユニークになっていて
色やサイズで品番が複数存在するものではありません。
何回やってもレコード件数が前者のほうが多くなってしまいます。
分かる方がいらしたらぜひ教えていただきたいです。

Aベストアンサー

もしかすると、「ON」で条件を指定する際、
テーブルの指定をしてないんじゃないですか?


<例1>
SELECT *
FROM 在庫テーブル LEFT JOIN 商品マスタ
ON 在庫テーブル.品番 = 商品マスタ.品番;

または

<例2>
SELECT *
FROM 在庫テーブル A LEFT JOIN 商品マスタ B
ON A.品番 = B.品番;

Qこの訳を日本語で教えて下さいby responding, you agree to the ter

この訳を日本語で教えて下さい
by responding, you agree to the terms of service

Aベストアンサー

「返答することによって、あなたはサービスの条件に同意します。」

QLEFT JOIN の結合結果について

お世話になります。

”SELECT Aテーブル.* Bテーブル.*
 FROM Aテーブル LEFT JOIN Bテーブル ON Aテーブル.KEY = Bテーブル.KEY”を
行った場合、Aテーブルにしか存在しないデータのBテーブル側の値は常にNULLに
なるようなのですが、この場合ゼロを固定に設定することは出来ないでしょうか?

よろしくお願いします。

※ORACLE 9i、PL/SQL上での処理を考えています

Aベストアンサー

実機がないので試してませんが。

B.*ではなく、列を列挙しNVLで囲むとどうなります?

select A.列1, A.列2, nvl(B.列1, 0), nvl(B.列2, 0) from
のように。


人気Q&Aランキング

おすすめ情報