0

w3schools.comには、次の SQL ステートメントの例があります。

SELECT 
     Product_Orders.OrderID, Persons.LastName, Persons.FirstName
FROM 
  Persons,
  Product_Orders
WHERE 
  Persons.LastName='Hansen' AND Persons.FirstName='Ola'

私には明確でないのは、product order テーブルが person テーブルとどのように結合されているかです。この SQL は適切ですか? また、返された結果セットについて何を意味しますか?

4

2 に答える 2

2

技術的には適切ですが、ここでは説明しないいくつかの理由から、そのタイプの構文を使用することは避けたいと思います。

その構文は口語的に「古いスタイル」の結合構文と呼ばれ、次のものと同等です。

SELECT Product_Orders.OrderID, Persons.LastName, Persons.FirstName 
FROM Persons
CROSS JOIN Product_Orders 
WHERE Persons.LastName='Hansen' AND Persons.FirstName='Ola'

それらがどのように「結合」するかについての答えは、結合しないということです。クエリの結果は、Product_Orders テーブル全体と Persons テーブルの "Ola Hanson" 行のクロス積です。正直なところ、私が考えることができるほとんどのユースケースではあまり意味がありません。

ここで得られる結果の非常に奇妙な点は、Product_Orders テーブルの OrderID が注文者と一致するとは限らないことです。ページ上での省略の間違いのように見えますが、公平を期すために、この例は結合ではなくエイリアシングを示すことを意図しています。

W3Schoolsはこの辺りでは評判が良くありません

于 2012-08-24T02:11:54.163 に答える
1

まず、Join がどのように機能するかを理解する必要があります。あなたのクエリから:

  1. SQL ステートメントで指定された 2 つのテーブル間でクロス積が行われます。これは、FROM Persons、Product_Orders から確認できます。

  2. Persons テーブルのすべてのレコードは、Product_Orders テーブルの各レコードに結合されます。両方のテーブルが大きい場合、これにより巨大な一時テーブルが作成されます。

  3. 次に、フィルター、つまり修飾条件がこの一時テーブルに適用され、結果が得られます。

これが役立つことを願っています。

于 2012-08-24T02:18:03.167 に答える