SELECT b.id,b.cid,b.name,t.type FROM shbooks b LEFT JOIN shtype t ON t.id = b.cid;
SELECT b.id,b.cid,b.name,t.type FROM shbooks b LEFT OUTER JOIN shtype t ON t.id = b.cid;
不加OUTER的时候,我完全能理解,把表1在表2对应的类名显示出来,
但是加上 OUTER后,我看到结果还是一模一样,用什么例子可以理解加和不加的区别呢?
巴扎黑2017-04-17 14:47:08
LEFT JOIN と LEFT OUTER JOIN は同じですが、通常、SQL ステートメントを作成するときに OUTER が省略される点が異なります。これは、内部結合と同様に理解できます。内部結合を記述するときは、通常、INNER を省略して JOIN を直接記述します。
複数のテーブル リンクが存在します
内部結合 (JOIN または INNER JOIN)
SELECT * FROM a [INNER] JOIN b ON a.id=b.id
<リ>
外部結合
左結合または左外部結合 (LEFT JOIN または LEFT OUTER JOIN)
SELECT * FROM a LEFT [OUTER] JOIN b ON a.id=b.id
<リ>
右結合または右外部結合 (RIGHT JOIN または RIGHT OUTER JOIN)
SELECT * FROM a RIGHT [OUTER] JOIN b ON a.id=b.id
<リ>
完全な外部結合は、キー UNION を介して左結合ステートメントと右結合ステートメントを接続することです
SELECT * FROM a LEFT [OUTER] JOIN b ON a.id=b.id
連合
SELECT * FROM a RIGHT [OUTER] JOIN b ON a.id=b.id
クロス結合 (CROSS JOIN)、これにはデカルト積が関係します。デカルト積についての私の個人的な理解は、2 つのテーブルの交差結合です。したがって、取得されるセット結果は、テーブル A の条件を満たすクエリのレコード * テーブル B の条件を満たすレコードになります。
これには小さな落とし穴があります。つまり、内部結合や外部結合のようにステートメントに ON を追加することはできません。追加すると、クエリ結果は内部結合のようになります。
ブロック引用>SELECT * FROM a CROSS JOIN b where a.id=1
返事0
天蓬老师2017-04-17 14:47:08
これら 2 つは同じである必要があります。
左結合は左外部結合の略です。
拡張説明と警告表示を使用すると、データベースの最適化と再書き込み後のステートメントを確認できます。これらの 2 つの SQL は同じです。