3

私はクラスで結合を学んでいますが、いくつかの概念を完全には理解していません。複数の結合を持つステートメントがどのように機能するかを誰かが説明できますか?

SELECT B.TITLE, O.ORDER#, C.STATE FROM BOOKS B
   LEFT OUTER JOIN ORDERITEMS OI ON B.ISBN = OI.ISBN
   LEFT OUTER JOIN ORDERS O ON O.ORDER# = OI.ORDER#
   LEFT OUTER JOIN CUSTOMERS C ON C.CUSTOMER# = O.CUSTOMER#;

BOOKSテーブルは、BOOKSとORDERITEMSを接続する最初の外部結合の左側のテーブルであることを理解していると思います。書籍の注文アイテムがない場合でも、すべての書籍が表示されます。最初の参加後、実際に何が起こっているのかわかりません。

ORDERSが結合されると、左側のテーブルと右側のテーブルのどちらになりますか?お客様も同様です。これは私が迷子になるところです。

4

2 に答える 2

5

エグゼキュータが最初に実行すること — 結合に適格なテーブルの最初のペアを取得し、結合を実行します。次の手順では、前の結合の結果が仮想リレーションとして扱われるため、同様の構造が再び得られ... FROM virt_tab LEFT JOIN real_tab ...ます。この動作は、リレーショナル代数で使用されるクロージャの概念に基づいています。つまり、リレーションに対する操作はリレーションを生成します。つまり、操作はネストできます。また、RDBMS はリレーショナルDBMS の略です。リンクされたウィキペディアの記事をご覧ください。

これまでのところ、PostgreSQL のドキュメントがこの問題に関して最も決定的であることがわかりました。それらを見てください。リンクされた記事では、データベースによって結合がどのように実行されるかについての一般的な概要が、予想される PostrgeSQL 固有のものとともに示されています。

于 2012-06-25T13:08:41.537 に答える