
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
一応、実SQLを載せておきます。
※机上で書いてて合っているか不安になったので。
create table 表1
( col1 char(1)
);
create table 表2
( col1 char(1)
);
insert into 表1 values('A');
insert into 表1 values('B');
insert into 表1 values('C');
insert into 表2 values('C');
insert into 表2 values('D');
insert into 表2 values('E');
select a.col1,b.col1
from 表1 a
inner join 表2 b
on a.col1 = b.col1
order by 1,2;
表1 表2
----- -----
C C
select a.col1,b.col1
from 表1 a
left outer join 表2 b
on a.col1 = b.col1
order by 1,2;
表1 表2
----- -----
A NULL
B NULL
C C
select a.col1,b.col1
from 表1 a
right outer join 表2 b
on a.col1 = b.col1
order by 1,2;
表1 表2
----- -----
C C
NULL D
NULL E
select a.col1,b.col1
from 表1 a
full outer join 表2 b
on a.col1 = b.col1
order by 1,2;
表1 表2
----- -----
A NULL
B NULL
C C
NULL D
NULL E
No.2
- 回答日時:
BOOKS ONLINEの以下を参照してください。
http://msdn.microsoft.com/ja-jp/library/ms191517 …
http://msdn.microsoft.com/ja-jp/library/ms191472 …
特徴的には以下の表1と表2を結合した場合に、どのような結果が戻されるかです。
表1
A
B
C
表2
C
D
E
inner join
表1 表2
-- --
C C
left outer join
表1 表2
-- --
A null
B null
C C
right outer join
表1 表2
-- --
C C
Null D
Null E
full outer join
表1 表2
-- --
A NULL
B NULL
C C
NULL D
NULL E
No.1
- 回答日時:
いずれのJOINもテーブルを結合して検索するときに使います。
結合するときには、結合条件を指定されます(これが結合時のキーになります)
INNER JOINは結合された2つのテーブルの両方に結合キーの値を持つデータがなければ、
仮に一方にはデータがあっても抽出されません。
LEFT OUTER JOINは主テーブルにデータがあれば、従テーブルにそのキーのデータがなくても抽出されます。
このとき従テーブルにはデータがないわけなので、従テーブルの項目は全部NULL(値不明・値未決定の意味)になります。
例としては、社員マスタと部署マスタなどで考えてみるといいでしょう。
社員マスタには全ての社員のデータが登録されていますが、一部の社員はまだ所属部署が決まっていないとします。
(社員マスタが主、部署マスタが従のテーブルと考えます)
SELECT
a.社員コード,
a.社員名,
b.部署名
FROM 社員マスタ a
INNER JOIN 部署マスタ b ON b.部署コード=a.部署コード
=>部署が決まっている社員だけが抽出されます
SELECT
a.社員コード,
a.社員名,
b.部署名
FROM 社員マスタ a
LEFT OUTER JOIN 部署マスタ b ON b.部署コード=a.部署コード
=>全ての社員が抽出されますが、部署が決まっていない社員の部署名はNULLと表示されます。
RIGHT OUTER JOINは、LEFT OUTER JOINの主と従をひっくり返して考えればよいのです。
SELECT
a.社員コード,
a.社員名,
b.部署名
FROM 社員マスタ a
RIGHT OUTER JOIN 部署マスタ b ON b.部署コード=a.部署コード
=>全ての部署が抽出されますが、まだ所属社員の決まっていない部署の社員コードと社員名はNULLと表示されます。
言いかえればRIGHT OUTER JOINは全てLEFT OUTER JOINに書き換えることができます。
SELECT
a.社員コード,
a.社員名,
b.部署名
FROM 部署マスタ b
LEFT OUTER JOIN 社員マスタ a ON a.部署コード=b.部署コード
実はデータベースも処理するときにRIGHT OUTER JOINは内部的にLEFT OUTER JOINに書き換えて処理しています。
つまり、RIGHT OUTER JOINは無理に使う必要はないということです。
構文としても、RIGHT OUTER JOINを使われると、「どのテーブルをメインのテーブルと考えて抽出を行おうとしているのか」が分かりにくくなりますので、お勧めしません。
(AccessなどでGUIでリレーションシップを張ると、RIGHT OUTER JOINが使われたSQL文を生成してくれたりするのですが、あとでメンテナンスするときには、とてもわかりにくいですよ。私個人でも、RIGHT OUTER JOINを書いたのは資格試験の問題を解くときだけで、実務で使ったことはほぼゼロです)
返信ありがとうございます。
RIGHT JOINは無理に使う必要はないんですね。
実際、どんな時にRIGHT JOINを使うのか分からなかったので
とりあえず、使わないようにします。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 中3英語 4 2023/01/31 14:03
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- フリーソフト grep検索では 1 2022/11/01 19:26
- Access(アクセス) アクセス 削除するレコードを含んだテーブルを指定してくださいのエラー対処方法 1 2022/11/24 15:01
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP グローバルスコープはありますか? 1 2022/08/08 19:28
- レトロゲーム スーパーファミコンソフトの「大相撲魂」というソフトの操作方法を教えて欲しいです 1 2022/08/05 20:01
- その他(開発・運用・管理) MacのPCでわファイルを検索したくて、右上の虫眼鏡で検索をかけますが、EPSデータが何故か検索デー 2 2022/10/25 10:29
- Excel(エクセル) 表の中を『年』で検索し、値を得たい。 4 2023/01/31 22:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXISTSを使ったDELETE文
-
ACCESS ツリービューの作り方
-
SQL文で、合計が0のレコードを...
-
Access2013で商品に複数の単価...
-
SQL2005 クエリ文について
-
ACCESS初心者です。
-
フィールドの数値を四捨五入の...
-
アクセス★非課税、課税の合計金...
-
PL/SQLの質問
-
【ORACLE】外部のレコードとの...
-
ACCESSのマスタの変更について
-
AS400にてサブファイルレコード...
-
SQLで特定の項目の重複のみを排...
-
フィルターかけた後、重複を除...
-
差し込み後、元データを変更し...
-
カーソル0件の時にエラーを発生...
-
エクセルで最後の文字だけ置き...
-
外部参照してるキーを主キーに...
-
INSERT文でフィールドの1つだ...
-
SELECT 文 GROUP での1件目を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXISTSを使ったDELETE文
-
SQL文で、合計が0のレコードを...
-
Accessの実行時エラーについて
-
日付により変動する「単価」を...
-
ACCESS 商品毎の最新の単価を設...
-
ACCESS ツリービューの作り方
-
ACCESSでクエリ作成時複数のフ...
-
アクセス フィールド名に変数...
-
異なるデータベース間のテーブ...
-
前月の取得について
-
最大値を含むレコードの抽出
-
AS400にてサブファイルレコード...
-
オートナンバーでの質問
-
PL/SQLの質問
-
ACCESSでDLookUpすると、不正な...
-
はじめまして。スーパーbeginne...
-
Access2013で商品に複数の単価...
-
Access 小計について
-
ACCESSのマスタの変更について
-
テーブル名の トラン マスタ...
おすすめ情報