質問

以下の間に大きな違いはありますか?

SELECT a.name, b.name FROM a, b WHERE a.id = b.id AND a.id = 1

そして

SELECT a.name, b.name FROM a INNER JOIN b ON a.id = b.id WHERE a.id = 1

SO ユーザーはどちらかを優先しますか?

役に立ちましたか?

解決

そこには違いはありませんが、あなたは、フィルタリングのための余分な句で大きなマルチ参加クエリを持っているときに、第2の可読性がはるかに優れています。
JOIN句とフィルタ句を分離することは良いことです:)

他のヒント

前者はANSI 89構文である

、後者は、ANSI 92である。

その特定のクエリのためにの違いはありません。しかし、前者であなたは、複雑なクエリで結合条件からフィルタを分離する能力を失い、INNER対RIGHT対LEFT指定するための構文は、多くの場合、あなたは別のDBベンダーの間を行き来する必要がある場合は特に、混乱しています。私はすべての古い構文を好きではありません。

SQLクエリエンジンに違いはありません。

あなたが改行とインデントを使用する場合は、

読みやすくするために、後者は読み取ることがはるかに簡単です。

内部結合、それはあなたが「フィルタ」を入れて、ONまたは句で「参加する」場合、クエリオプティマイザは、とにかく最初に何をすべきかを決定すべき問題ではありませんのために

(それは後に参加し、第一のフィルタを行うことを選択することができます、またはその逆

OUTERしかし結合に、そこに差があり、時にはyoullは時々WHEREで、ON句で条件を入れたいです。外部結合のためのWHERE句で条件を置くと、

(理由はNULLがどのように動作するかの)内部結合に変換することができます

たとえば、次の二つのサンプル間の可読性を確認

SELECT c.customer_no, o.order_no, a.article_no, r.price
FROM customer c, order o, orderrow r, article a
WHERE o.customer_id = c.customer_id
AND r.order_id = o.order_id
AND a.article_id = r.article_id
AND o.orderdate >= '2003-01-01'
AND o.orderdate < '2004-01-01'
AND c.customer_name LIKE 'A%'
ORDER BY r.price DESC 

SELECT c.customer_no, o.order_no, a.article_no, r.price
FROM customer c 
INNER JOIN order o
   ON  o.customer_id = c.customer_id
   AND o.orderdate >= '2003-01-01'
   AND o.orderdate < '2004-01-01'
INNER JOIN orderrow r
   ON  r.order_id = o.order_id
INNER JOIN article a 
   ON  a.article_id = r.article_id
WHERE  c.customer_name LIKE 'A%'
ORDER BY r.price DESC 

両方を使用してほとんどのタスクを実行できますが、あなたの場合は何の違いもありませんが、私は常に 2 番目を使用します。

  1. 現在サポートされている標準です
  2. FROM 句で結合を保持し、WHERE 句でフィルタを保持します。
  3. より複雑な LEFT、RIGHT、FULL OUTER 結合がはるかに簡単になります
  4. MSSQL ヘルプはすべてその構文に基づいているため、問題のクエリに関するヘルプを得るのがはるかに簡単です。
技術的には違いはありませんが、

、あなたは最初の方法を使用した結合することについて、余分な注意する必要があります。あなたは事故によってそれが間違って取得する場合、あなたはAとBのテーブル(非常に長い、メモリ&CPUに負荷をかけクエリの間の結合デカルトをやって終わる可能性 - それはB内のすべての行とにそれぞれ単一の行と一致するかどう悪いです。およびb)は、そもそも大きなテーブルです。明示的なINNER JOINを使用すると、より安全で読みやすくもある。

違いはありません。私が最初にフォーマットをより読み見つけて(OUTER、LEFT INNERなど)参加し、他の種類をやったときにのみ第二のフォーマットを使用します。

2番目の形式はSQL92に準拠し構文です。これは、それが現在および将来のすべてのデータベース・ベンダーによってサポートされていることを意味する必要があります。しかし、真実は最初の形式は、また、我々は気よりも長いの周りであることが保証されるように普及していることです。

それ以外の場合は、データベースが2をどのように扱うかにあるすべての点で同じです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top