sql >> データベース >  >> RDS >> Sqlserver

奇数のINNERJOIN構文とカプセル化

    括弧はセマンティクスを変更しません。 ONの位置 句は、結合の論理処理の順序を制御します。

    最初のクエリ

    SELECT Customer.Name,
           Product.Desc,
           Transaction.Date
    FROM   Product
           INNER JOIN Transaction
             ON Transaction.ProductID = Product.ID
           INNER JOIN Customer
             ON Transaction.CustomerID = Customer.ID 
    

    2番目のクエリ

    (冗長な括弧は削除されました)

    SELECT Customer.Name,
           Product.Desc,
           Transaction.Date
    FROM   Product
           INNER JOIN Transaction
                      INNER JOIN Customer
                        ON Transaction.CustomerID = Customer.ID
             ON Transaction.ProductID = Product.ID 
    

    したがって、論理的に 最初の例では、Transaction, Productに参加します 最初に発生し、次に結果として生じる仮想テーブルがCustomerに結合されます 、一方、2番目の例では、Transaction, Customerに参加します 最初に発生し、次に結果として生じる仮想テーブルがProductに結合されます

    これは論理的であり、内部結合は結合性と可換性の両方であるため、実行プランに違いはない可能性があります(OPTION (FORCE ORDER)を追加しない限り、 クエリに対して)が、外部結合に対しては実行できます。

    これは ItzikBenGanがここでカバーしています しかし、記事には多くの誤りがあります。LuborKollarによるフォローアップレターを参照してください。 同様に。




    1. PHPの日付をmysql形式に変換します

    2. SQL-最大値(+ group by)の列を持つ行を選択する方法

    3. psycopgとgeventを使用して接続をプールするにはどうすればよいですか?

    4. SQLiteで現在の時刻を取得する方法