内側および外側連結ハイブを結合

HQL多くの文とSQLはすぐに内部および外部リンクの使用法を理解するために、以下の例と類似しており、

マルチテーブル運転においては、それは多くの場合、必要なデータが発生し、テーブルの一部の存在は、テーブル部Bが存在し、または複数のテーブルがあります。

そして、我々は次の2つの表は、例を示し作成し、これらのテーブルの関係から参加することができます。

まず学生情報シートを作成し、ID、s_name、c_name 3つのプロパティがあります

ハイブは>  作成 テーブルstu_msg(
     > ID文字列を、
     > s_name文字列
     > c_name列)
     > 区切り列形式
     >終了fileds によって ' ' >
    

IDを持つ別の結果表を作成し、2つのプロパティを得点

ハイブ>  作成 テーブルscore_msg(
     > ID文字列
     >、スコアINTを> 行形式区切り
     >終了フィールドによって ' ' >終了ラインによって' の\ n ' ;
     

表に対応する二つのデータを追加します。

挿入  テーブル stu_msgの' 1 '' zhangsan '' 数学')、(' 2 '' リシ'' 英語')、(' 3 '' wangwu '' 履歴' )。
挿入  テーブル score_msgの' 1 '99)、' 3 '88)、(' 4 '66);

2つのテーブル間、学生は関係IDテーブルIDがあることを見つけて、テーブルを得点ので、我々は両者の関係により、クエリに参加することができます。

 

、第一の結合(関係テーブルを指定することによってAとBが一致し、結果が一致するように戻すことができる、ミスマッチに戻されていません)。

選択 stu_msg。*、score_msg。*  から stu_msg インナー 参加 score_msgを stu_msg.id = score_msg.id。

戻り値の結果は、ID、学生の情報とグレード1および2、グレード3との情報がある理由4はそれを返していないのですか?

表中の学生、テーブルにグレード3のID学生とそこには情報がないので、対応するデータを一致させることができず、学生テーブルの4人のIDが、情報がない、唯一の結果だけでなく、同様に一致させることができないため、および内部結合は、クエリはそれを返しません一致することはできません。

第二に、外側(左参加し、右の参加、完全に従事して...)に参加

1、左の接続:

選択 stu_msg。*、score_msg。*  から stu_msg  参加 score_msgを stu_msg.id = score_msg.id。

リターンの結果:

全ての生徒データリターンのテーブルを見つけることが、データ-IDの結果は、4人はまだ印刷していない、との結果が2つのヌル値が存在することは困難ではありません。

左側にscore_msgテーブルの右側に、左ジョインが指定されたプロパティに一致するように左側のテーブルに通っている間、テーブルの左側にstu_msg、中心の参加にかかわらず、一致が成功したかどうかの、すべてのデータは、左テーブルから返されると右のテーブルデータのみが返され成功した試合。

該当するデータがnullの代わりに、テーブルのデータの一致を残さないため、nullです。

図2に示すように、右の結合結果に対し、次のように

選択 stu_msg。*、score_msg。*  から stu_msg  に参加 score_msgを stu_msg.id = score_msg.id。

 

図3に示すように、完全に係合されます。

選択 stu_msg。*、score_msg。*  から stu_msg フル 参加 score_msgを stu_msg.id = score_msg.id。

 

おすすめ

転載: www.cnblogs.com/rensui4726/p/11266486.html