SQL操作の結果はすべて、ディスクまたはメモリに格納されているかどうかに関係なく、機能的には新しいテーブルです。
結合の機能は、2つのテーブルを「結合」して、(通常は)アプリケーションに出力されている間だけメモリに存在する3番目の合成テーブルに結合します。
結合を使用する理由は、データベース内の1つの場所にのみデータが表示されるようにすることで、データ異常を減らすためです。
以下を検討してください。
Person ( ID Integer Primary Key, FName String, LName String, Address String, City String, ZipCode String)
ここでは、政府が郵便番号を変更するたびに(データベース開発者の好みではまったく頻繁に発生します)*すべての古い郵便番号が正しい都市と新しい郵便番号に正しく属するように、personsテーブルを更新する必要があります。
この場合、同じ郵便番号がテーブルの複数のタプルにあり、テーブルが手動で編集可能である場合、データベース全体が更新されずに新しい都市/郵便番号の組み合わせが入力されるため、重大な更新異常が発生します。
代わりに3つのテーブルを使用することで、同じデータが得られますが、柔軟性と信頼性が向上します(パフォーマンスは犠牲になりますが、「適切な非正規化」の質問は別の一連の回答のトピックです)。
Person ( PersonID Integer Primary Key, FName String, LName String)
City ( CityID Integer Primary Key, City String, State String, ZipCode String )
Address ( AddressID Integer Primary Key, AddressLine1 String, CityID Integer References City, PersonID Integer References Person)`
また、次のクエリを使用して、上記の「テーブル」を1つ取得できます。
SELECT Fname, Lname, AddressLine1, City, State, ZipCode
FROM Person
INNER JOIN Address USING (PersonID)
INNER JOIN City USING (CityID)
これにより、関連するデータの残りの部分を破損することなく、特定のテーブルが変更されるたびに個々のテーブルを更新できます。
アンは、INNER JOIN
参加のデフォルトタイプです。大まかに言えば、「テーブルaのこのレコードがテーブルbのこのレコードに一致するタプルを結合する」OUTER JOINS
とありCARTESIAN PRODUCT
ます。外部結合は、「指定されたとおりに、左または右のテーブルからすべてを取得し、他のテーブルが一致する場合は、それを結合します。一致しない場合は、nullで埋めます」そして、デカルト積(関係代数に入らない) is:両方のテーブルのタプルの可能なすべての組み合わせを取り、何にも一致せずにそれらを1つのテーブルに出力します。
*ゲリマンダーのために郵便番号の境界を移動する場合は特に、