3

誰かのコードを調べていて、このクエリを見つけました。このクエリは、結合を使用してデータを取得しています。ただし、内部結合、外部結合、左または右の使用はありません。プログラマーはこのクエリを書くだけです。

このクエリが正しい場合、これがクエリを作成するスマートな方法であることがわかりましたか?

SELECT 
    a.*,b.*,c.*,d.*,e.* 
FROM  
    property_photos a,property_promotions b,properties c, communities d,cities e 
WHERE 
    a.property_id = b.property_id AND 
    a.property_id = c.id AND 
    (b.promotion_id =2 OR b.promotion_id =1) AND 
    a.mainphoto="Y" AND 
    d.id=c.community_id AND 
    e.id = c.city_id AND 
    a.featured_status = 1

このクエリは正しいですか?

このクエリが正しい場合、これはクエリを長くする左結合/右結合のような単語を使用する代わりに多くのディスク容量を節約できるため、クエリを記述するより良い方法だと思います

スマートウェイ

4

2 に答える 2

7

はい、大丈夫です。インナージョインと同じです。

ノート:

どの構文を使用しますか?ANSI SQL仕様では、INNERJOIN構文を使用することをお勧めします。さらに、WHERE句を使用して結合を定義する方が確かに簡単ですが、明示的な結合構文を使用すると、結合条件を忘れることがなく、パフォーマンスにも影響を与える可能性があります(場合によっては)。

出典:Sam's-MySQLクラッシュコース、139ページ

于 2012-09-13T17:21:35.513 に答える
6

はい、これは暗黙 JOINの構文として知られています。ANSI-92で明示的な JOIN構文が定義されると、クエリが複雑になるにつれて読みやすくなります。

ウィキペディアから:

SQLは、結合を表現するための2つの異なる構文方法を指定しています。「明示的結合表記」と「暗黙的結合表記」です。

次の例のように、「明示的結合表記」は、JOINキーワードを使用して結合するテーブルを指定し、ONキーワードを使用して結合の述語を指定します。

SELECT *
FROM employee
INNER JOIN department ON employee.DepartmentID = department.DepartmentID;

「暗黙の結合表記」は、SELECTステートメントのFROM句で、結合するテーブルをコンマを使用してリストするだけです。したがって、クロス結合を指定し、WHERE句は追加のフィルター述語を適用する場合があります(明示的な表記の結合述語と同等に機能します)。

次の例は前の例と同等ですが、今回は暗黙的な結合表記を使用しています。

SELECT *
FROM employee, department
WHERE employee.DepartmentID = department.DepartmentID;
于 2012-09-13T17:21:48.710 に答える