2017-03-19 16 views
0

私は、次の2つのSQL SELECT文を持っており、それらが異なるならどのようにまわりで私の頭をラップすることはできませんよ。これら2つのJOINの違いは何ですか?

SELECT DISTINCT product.maker 
FROM product, pc 
WHERE pc.model = product.model AND 
product.maker NOT IN 
(SELECT DISTINCT product.maker 
    FROM product, laptop 
    WHERE product.model = laptop.model) 

SELECT DISTINCT p.maker 
FROM Product p INNER JOIN 
PC ON p.model = PC.model 
WHERE p.maker NOT IN (SELECT ip.maker 
FROM Laptop il INNER JOIN 
Product ip ON il.model = ip.model 
); 

EDIT:データベーススキーマがここにある - http://www.sql-ex.ru/help/select13.php#db_1

+0

暗黙的な結合#Q1は維持するのがより複雑です(可読性)ので、同じ結果を返す場合でも内部結合または左結合を使用することが望ましいです(暗黙的な結合はSql Serverのような一部のベンダーによって非推奨になりました) – CodeIsLife

+0

@ CodeIsLifeですが、どう違うのですか?なぜ彼らは異なる結果を出しているのですか? – ayushgp

+0

内部結合を左結合で置換するこれは同じ結果を返します(テーブル構造を投稿してください) – CodeIsLife

答えて

1

最初の明らかな違いは、2番目のクエリのサブクエリにDISTINCTが存在しないことです。

もう1つはキーワードinner joinを使用しています。

ここで、joinキーワードが存在しない場合の古典的な方法は、クエリを書く最初の方法です。あなたは、このようなleft joinとして行うに参加し、複数の種類がある場合、キーワードに参加使用

は通常、クエリプロセッサが同じデータベース操作を生成しますので、パフォーマンスは同じでしょう

など、役立ちます。

+0

私は前にデータベースエンジンのパフォーマンスと関係がありますが、その違いについて読んで覚えていると思います。 – Edward

関連する問題