1

重複の可能性:
SQL JOIN: USING、ON、または WHERE に違いはありますか?

どのクエリが優れていますか?

1.

  SELECT awardCateg.ID,
    awardCateg.DESCRIPTION,
    awardCateg.FREQUENCY_ID,
    freq.ID,
    freq.DESCRIPTION
   FROM AWARD_CATEGORY awardCateg
   INNER JOIN FREQUENCY freq ON awardCateg.FREQUENCY_ID=freq.ID

2.

  SELECT awardCateg.ID,
    awardCateg.DESCRIPTION,
    awardCateg.FREQUENCY_ID,
    freq.ID,
    freq.DESCRIPTION
   FROM AWARD_CATEGORY awardCateg,
        FREQUENCY freq
   WHERE awardCateg.FREQUENCY_ID=freq.ID

AWARD_CATEGORY:
ID  FREQUENCY_ID    DESCRIPTION
6   1   Spark of the month
7   2   Best Mentor of the quarter
9   3   Best Associate 
10  3   Leadership Award

FREQUENCY:
ID  DESCRIPTION
1   Monthly
2   Quarterly
3   Annual

Expected result:
ID  DESCRIPTION     FREQUENCY_ID    ID  DESCRIPTION
6   Oscar of the month            1 1   Monthly
7   Catalyst of the quarter 2   2   Quarterly
9   Best of the Best              3 3   Annual
10  Leadership Award              3 3   Annual
4

3 に答える 3

1

「より良い」とは何かを定義しません。ほとんどのデータベースでは、この 2 つは同じ基になる実行計画に合わせて最適化されます。

ただし、さまざまな読みやすい理由から、最初のバージョンの方が優れています。

(1) 内部結合が行われていることは明らかです。

(2) ,in afrom句は、デカルト積/交差結合を意味します。これは非常にコストのかかる操作です。

,(3) 2 番目の例の句からを削除してfromも、それは引き続き有効なfrom句です。. . クエリは実行されますが、期待される結果が返されない場合があります。

(4) 2 番目の構文は、外部結合をサポートするための標準構文を提供しません。

于 2013-01-17T15:15:09.733 に答える
0

どちらのクエリも同じ結果になります。

1 つ目は のANSI SQL-92構文ですINNER JOINが、2 つ目は古い構文です。2 番目のクエリはデカルト積を生成しますが、等式の条件を提供したため、クエリ 1 と同じ結果が得られます。

于 2013-01-17T13:56:34.270 に答える
-3

Inner Join は、デカルト積に比べて高速になります。最初のクエリの方が優れています。

于 2013-01-17T13:59:08.017 に答える