コンピューター, プログラミング
例えば、詳細な説明、エラーの使用 - 左(SQL)に参加します
任意の実際のリレーショナル・データベースでは、すべての情報は、別のテーブルの上に分配されます。 テーブルの多くは、相互に通信方式に記載されています。 しかし、の助けを借りて、 SQLクエリ 、回路に組み込まれていないデータとの間のリンクを、置くことは可能です。 これは、あなたが任意の数のテーブル間の関係を構築し、さらには一見異種の情報を接続することができます参加の接続を行うことによって行われます。
この記事では、左外部結合について、具体的話をします。 このタイプの接続の説明に進む前に、いくつかのデータベーステーブルに追加します。
必要なテーブルを準備します
例えば、私達のデータベースでは、人々と彼らの不動産についての情報があります。 ピープルズ(人)、不動産(不動産)、Realty_peoples(テーブルのリレーション、どのようなプロパティから所属する人):3つのテーブルに基づいてまとめ。 人々のテーブルに格納され、次のデータを想定します。
ピープルズ | ||||
ID | L_NAME | F_NAME | MIDDLE_NAME | 誕生日 |
1 | イワノワ | ダリア | B. | 2000年7月16日 |
2 | ピュージン | ウラジスラフ | ニコラエ | 1986年1月29日 |
3 | Evgenin | アレクサンダー | Federovich | 1964年4月30日 |
4 | Annina | 愛 | P. | 1989年12月31日 |
5 | Gerasimovsky | 希望 | P. | 1992年3月14日 |
6 | Gerasimovsky | オレグ | Albertovich | 1985年1月29日 |
7 | Sukhanovskaya | 陪審 | A. | 1976年9月25日 |
8 | Sukhanovskaya | ジュリア | Y. | 2001年1月10日 |
不動産:
リアルティ | |
ID | アドレス |
1 | アルハンゲリスク、UL。 ボロニン、D。7、kv.6 |
2 | アルハンゲリスク、UL。 Severodvinskaya、D。84、Q。 9 BR。 5 |
3 | アルハンゲリスク地域、セベロドビンスク、ST。 レーニン、D。134、Q。 85 |
4 | アルハンゲリスク地域、ノヴォドヴィンスク、UL。 Proletarshaya、D。16、Q。 137 |
5 | アルハンゲリスク、PL。 Terekhina、D。89、Q。 13 |
関係の人々 - プロパティ:
Realty_peoples | ||
id_peoples | id_realty | タイプ |
7 | 3 | 合計共同所有 |
8 | 3 | 合計共同所有 |
3 | 5 | プロパティ |
7 | 1 | プロパティ |
5 | 4 | 共通パーツ |
6 | 4 | 共通パーツ |
参加(SQL)左 - 説明
左化合物の構文は次のとおりです。
| Table_A LEFTはtable_B [{ON 述語を} JOIN ] {tolbtsov と spisok_を用い} |
そして、次の模式のように:
そして、この表現は、述語の唯一の一致する行を表示するには、表Aと表Bの行、例外なく、すべてを選択」と訳されています。 値」 - テーブルはペアAの文字列テーブルで発見された場合には、ヌル結果の列を埋めます。
ほとんどの場合、とき左側の接続は、接続を行うために計画されている列名が同じである場合にのみ使用されて使用して、ONに示されています。
左は参加 - 使用例を
左側の接続で、私たちは、リストからすべての人々人民財産があれば、見ることができます。 左でこれを行うには、SQLクエリの例に参加します:
SELECTピープルズ。*、Realty_peoples.id_realty、Realty_peoples.type ピープルズ左からRealty_peoples ON Peoples.id = Realty_peoples.id_peoplesをJOIN。 |
次の結果の場合:
Query1を | ||||||
ID | L_NAME | F_NAME | MIDDLE_NAME | 誕生日 | id_realty | タイプ |
1 | イワノワ | ダリア | B. | 2000年7月16日 | ||
2 | ピュージン | ウラジスラフ | ニコラエ | 1986年1月29日 | ||
3 | Evgenin | アレクサンダー | Federovich | 1964年4月30日 | 5 | プロパティ |
4 | Annina | 愛 | P. | 1989年12月31日 | ||
5 | Gerasimovsky | 希望 | P. | 1992年3月14日 | 4 | 共通パーツ |
6 | Gerasimovsky | オレグ | Albertovich | 1985年1月29日 | 4 | 共通パーツ |
7 | Sukhanovskaya | 陪審 | A. | 1976年9月25日 | 1 | プロパティ |
7 | Sukhanovskaya | 陪審 | A. | 1976年9月25日 | 3 | 合計共同所有 |
8 | Sukhanovskaya | ジュリア | Y. | 2001年1月10日 | 3 | 合計共同所有 |
我々は見ての通り、 イワノワダリヤ ピュージンウラジスラフとAnninoy Lyuboviありませんが、不動産の権利を登録しました。
そして、我々は、内側が内部結合結合を使用して、何を受け取っているのでしょうか? ご存知のように、それは非一致する行を除外し、その最終的なサンプルのうちの3つは、単純にドロップされます。
Query1を | ||||||
ID | L_NAME | F_NAME | MIDDLE_NAME | 誕生日 | id_realty | タイプ |
3 | Evgenin | アレクサンダー | Federovich | 1964年4月30日 | 5 | プロパティ |
5 | Gerasimovsky | 希望 | P. | 1992年3月14日 | 4 | 共通パーツ |
6 | Gerasimovsky | オレグ | Albertovich | 1985年1月29日 | 4 | 共通パーツ |
7 | Sukhanovskaya | 陪審 | A. | 1976年9月25日 | 1 | プロパティ |
7 | Sukhanovskaya | 陪審 | A. | 1976年9月25日 | 3 | 合計共同所有 |
8 | Sukhanovskaya | ジュリア | Y. | 2001年1月10日 | 3 | 合計共同所有 |
なお、第2のバージョンはまた、私たちの問題の条件を満たしていることと思われます。 しかし、我々は別のに付着し始めた場合、別のテーブルには、その結果から、3人はすでに取り返しのつかないほどなくなって。 インナーよりも複数のテーブルを結合するときそのため、実際には、はるかに頻繁に使用される左と右の接続が参加します。
SQLの例に参加左に見ていきます。 私たちの家の住所を持つテーブルを添付:
SELECTピープルズ。*、Realty_peoples.id_realty、Realty_peoples.type、Realty.address ピープルズFROM LEFT JOINをRealty_peoples ON Peoples.id = Realty_peoples.id_peoples LEFTはRealty.id = Realty_peoples.id_realty ON不動産を登録しよう |
今、私たちは、法律のようなものでなく、不動産のアドレスだけでなくを取得します:
Query1を | |||||||
ID | L_NAME | F_NAME | MIDDLE_NAME | 誕生日 | id_realty | タイプ | アドレス |
1 | イワノワ | ダリア | B. | 2000年7月16日 | |||
2 | ピュージン | ウラジスラフ | ニコラエ | 1986年1月29日 | |||
3 | Evgenin | アレクサンダー | Federovich | 1964年4月30日 | 5 | プロパティ | アルハンゲリスク、PL。 Terekhina、D。89、Q。 13 |
4 | Annina | 愛 | P. | 1989年12月31日 | |||
5 | Gerasimovsky | 希望 | P. | 1992年3月14日 | 4 | 共通パーツ | アルハンゲリスク地域、ノヴォドヴィンスク、UL。 Proletarshaya、D。16、Q。 137 |
6 | Gerasimovsky | オレグ | Albertovich | 1985年1月29日 | 4 | 共通パーツ | アルハンゲリスク地域、ノヴォドヴィンスク、UL。 Proletarshaya、D。16、Q。 137 |
7 | Sukhanovskaya | 陪審 | A. | 1976年9月25日 | 3 | 合計共同所有 | アルハンゲリスク地域、セベロドビンスク、ST。 レーニン、D。134、Q。 85 |
7 | Sukhanovskaya | 陪審 | A. | 1976年9月25日 | 1 | プロパティ | アルハンゲリスク、UL。 ボロニン、D。7、kv.6 |
8 | Sukhanovskaya | ジュリア | Y. | 2001年1月10日 | 3 | 合計共同所有 |
Arkhangelsk region、Severodvinsk、ul。 Lenina、d。134、apt。 85 |
左結合 - 一般的な使用法エラー:表の順序が間違っている
テーブルの左外部結合で許容される主なエラーは2つです。
- データが失われたためにテーブルの順序が誤って選択されました。
- マージされたテーブルを持つクエリでWhereを使用しているときのエラー。
最初のエラーを考えてみましょう。 問題を解決する前に、結果として得たいものを明確に理解する必要があります。 上記の例では、すべての人物を取り出しましたが、所有者が見つからなかった2番のオブジェクトについての情報は絶対に失われました。
クエリの場所でテーブルを移動し、 "... Realty left join Peoples ..."で始めると、人については言えない単一のプロパティを失うことはありません。
しかし、左の接続を怖がってはいけません、結果として含まれ、一致し、行に一致しない完全な外部に行ってください。
結局のところ、 サンプル の 量は 非常に多く、余分なデータは実際には何も必要ありません。 主なことは、利用可能な不動産のリストを持つすべての人、または所有者(存在する場合)とすべての不動産のリストを結果として得ることを理解することです。
左結合 - 一般的な使用法のエラー:Whereの条件を設定するときのクエリーの正確性
2番目のエラーはデータの損失にも関連しており、必ずしもすぐにはわかりません。
左の接続を使用してすべての人とその既存の不動産に関するデータを受け取ったときに、クエリに戻りましょう。 左の結合SQLの例では、次のことを忘れないでください。
FROM Peoples LEFT JOIN Realty_peoples ON Peoples.id = Realty_peoples.id_peoples; |
法律の種類が「プロパティ」であるクエリを洗練し、データを出力しないとします。 単純に左結合SQLを適用すると、次の例のようになります。
...
タイプ<> "プロパティ" |
Nullの空の値がこのように比較されないため、不動産を持たない人のデータは失われます。
リクエスト1 | ||||||
イド | L_name | F_name | Middle_name | 誕生日 | Id_realty | タイプ |
5 | ゲラシモフスカヤ | 希望 | パブロヴナ | 1992年3月14日 | 4 | 共有所有権 |
6日 | ゲラシモフスキー | オレグ | アルベルトビッチ | 01/29/1985 | 4 | 共有所有権 |
7日 | Sukhanovsky | ユリ | アンドレヴィッチ | 09/25/1976 | 3 | 共通の共同所有権 |
8日 | Sukhanovskaya | ジュリア | ユリエフナ | 10/01/2001 | 3 | 共通の共同所有権 |
このため、エラーが発生しないようにするには、接続直後に選択条件を指定することをお勧めします。 left join sqlを使用して次の例を検討することをお勧めします。
SELECT Peoples。*、Realty_peoples.id_realty、Realty_peoples.type 人々から LEFT JOIN Realty_peoples ON(Peoples.id = Realty_peoples.id_peoplesとタイプ<> "プロパティ") |
結果は次のとおりです。
リクエスト1 | ||||||
イド | L_name | F_name | Middle_name | 誕生日 | Id_realty | タイプ |
1 | イワノバ | ダリア | ボリショヴナ | 16.07.2000 | ||
2 | Pugin | ウラジスラフ | ニコラエビッチ | 01/29/1986 | ||
3 | エヴゲニン | アレキサンダー | Fedorovich | 04/30/1964 | ||
4 | アニーナ | 愛 | パブロヴナ | 1989年12月31日 | ||
5 | ゲラシモフスカヤ | 希望 | パブロヴナ | 1992年3月14日 | 4 | 共有所有権 |
6日 | ゲラシモフスキー | オレグ | アルベルトビッチ | 01/29/1985 | 4 | 共有所有権 |
7日 | Sukhanovsky | ユリ | アンドレヴィッチ | 09/25/1976 | 3 | 共通の共同所有権 |
8日 | Sukhanovskaya | ジュリア | ユリエフナ | 10/01/2001 | 3 | 共通の共同所有権 |
したがって、左側のjoin sqlを使用して簡単な例を実行することにより、すべての人のリストを取得し、共有/共同所有権の不動産をさらに推測します。
結論として、データベースからの情報の選択に責任を持って取り組む必要があることをもう一度強調したいと思います。 多くのニュアンスが、私たちの前に、left join SQLを使用して簡単な例文を開きました。その説明は一つです。基本クエリーでも始める前に、結果として得たいものを慎重に理解する必要があります。 幸運を!
Similar articles
Trending Now