2016-08-13 9 views
4

おはようございます。私は、例えば、それに参加してMySQLのクエリを記述する場合:「AND」演算子を使用している理由は、「WHERE」節がなくてもJOINで動作します。

それは「ブランド」に等しいその車を返します。

しかし、私は、クエリをこのように構造化する場合に気づい:

Select Car, Vendor from Cars JOIN Vendor On Vendor.IdCar=Car.IdCar AND Car="Brand" 

それは前のクエリと同じものを返します。私がWHEREの代わりにANDを使用したことに気づいた。私はそれが働いたPHPのクエリでもテストしました。ですから、例えば:

Select Car, Vendor from Cars JOIN Vendor On Vendor.IdCar=Car.IdCar AND Car=$brand 

代わりの

Select Car, Vendor from Cars JOIN Vendor On Vendor.IdCar=Car.IdCar WHERE Car=$brand 

だから私は聞いてるのよ質問は:なぜ2番目のクエリの仕事はしますか? JOINが使用されたのは、WHERE句がANDの前に必要であることを確かめたからですか?あなたはwhere句でon句を配置することができ、物事が正しく行われますので、

+1

はい、ANDが結合句に追加されます –

+2

興味深い質問です。おそらくGordon Linoffが説明できるものでしょう。彼はこのタイプのものをよく使い、SQLに精通しています。 –

+0

であり、特に 'JOIN'節ではなく' ON'節に 'AND'が適用されています。まったく同じではありませんが、ここでは結果のフィルタリングと同様の目的を果たします。 – Rogue

答えて

2

WHEREONの両方に(真偽値)条件が必要です。ブール条件は、クエリにANDOR及びNOT(そしておそらく()

  • WHERE条件とそれらを組み合わせることによって、ブール項から(任意)である構築することができる
  • テーブル式JOINテーブル式ON条件 i 0 条件に基づいて、2つのテーブル式を組み合わせたオペレータです。
0

これは、読みやすさのためである:

Select Car, Vendor from Cars JOIN Vendor where Vendor.IdCar=Car.IdCar AND Car="Brand"; 

を、これも有効です。

Select Car, Vendor from Cars, Vendor where Vendor.IdCar=Car.IdCar AND Car="Brand"; 

しかし、それができます

+1

しかし、一般的にはjoin句を使用することをお勧めしますが、ほとんどの人は読みやすくしています。参加するためのカンマは、事前に95(またはそのまわり)です! – HoneyBadger

+0

@HoneyBadgerそれは完全に真です。 –

1

joininner joinの略ですので、あなたはon句内のすべての条件に参加フィルタリングしています。これは、条件をwhere句に入れるのと同じ効果があります。 outer join(左または右)を使用する場合は、結合の左側または右側の表のすべてのレコードを取得し、条件に一致しないレコードの場合はnullの値を取得しますが、where句条件に一致するレコードのみを選択します。

4

JOINは主キーの一致に限定されないため、たとえそれがあったとしても複数の列が一致する複合キーがあるので、間違いなくANDが必要です。

あなたが表示する文は、where節の条件をエミュレートするためにjoin節を乱用するため、スタイルが良くありません。しかし、それは必要に応じて動作します。

アウターを使用する場合は、ステートメントが間違いなく当てはまります。その場合、join節のブール式はでなく、は機能的にwhere節の同じブール式に相当します。したがって、外部結合で照会する内容に応じて、のいずれかを使用する必要があります。

関連する問題