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。