web-dev-qa-db-ja.com

サブクエリと相関サブクエリの違い

次のSQLクエリは通常のクエリですか、相関サブクエリですか?

SELECT UserID,
       FirstName,
       LastName,
       DOB,
       GFName,
       GLName,
       LoginName,
       LoginEffectiveDate,
       LoginExpiryDate,
       Password,
       Email,
       ReportingTo,
       Mobile,
       CommunicationPreference,
       IsActive
FROM   (SELECT row_number() OVER (ORDER BY FirstName) AS Row,
               UserID,
               FirstName,
               LastName,
               DOB,
               GFName,
               GLName,
               LoginName,
               LoginEffectiveDate,
               LoginExpiryDate,
               Password,
               Email,
               ReportingTo,
               Mobile,
               CommunicationPreference,
               IsActive
        FROM   DivakarUserRegistration)  T

また、誰かが両方の違いを述べることができます

42
Divakar

相関サブクエリは、外部クエリの値を使用するサブクエリです。この場合、外部クエリのすべての行に対して内部クエリを実行する必要があります。

こちらの例をご覧ください http://en.wikipedia.org/wiki/Correlated_subquery

単純なサブクエリは外部クエリからの値を使用せず、一度だけ計算されます:

SELECT id, first_name 
FROM student_details 
WHERE id IN (SELECT student_id
FROM student_subjects 
WHERE subject= 'Science'); 

CoRelatedサブクエリの例-

部門の給与が平均を超えているすべての従業員を検索するクエリ

 SELECT employee_number, name
       FROM employees emp
       WHERE salary > (
         SELECT AVG(salary)
           FROM employees
           WHERE department = emp.department);
46
Alex

上記の例は、相互関連のサブクエリではありません。 FROM句内のサブクエリであるため、派生テーブル/インラインビューです。

相関サブクエリは、その親(メインクエリ)テーブルを参照する必要があります。たとえば、Co-related Sub-queryによるN番目の最大給与の検索を参照してください。

SELECT Salary 
FROM Employee E1
WHERE N-1 = (SELECT COUNT(*)
             FROM Employee E2
             WHERE E1.salary <E2.Salary) 

Co-Related Vs Nested-SubQueries.

通常のサブクエリと共同関連のサブクエリの技術的な違いは次のとおりです。

1。ループ: main-queryの下のCo-relatedサブクエリループ。一方、ネストされていません。したがって、相互に関連するサブクエリは、メインクエリの各反復で実行されます。一方、Nested-queryの場合。サブクエリが最初に実行され、次に外部クエリが実行されます。したがって、最大なし。実行されるのは、相関サブクエリの場合はNXM、サブクエリの場合はN + Mです。

2。依存関係(内部から外部vs外部から内部):.

3.Performance: Co-relatedサブクエリを使用すると、N + M反復ではなくNXM反復を実行するため、パフォーマンスが低下します。 ¨相互に関連するサブクエリの実行。

例の詳細については:

http://dotnetauthorities.blogspot.in/2013/12/Microsoft-SQL-Server-Training-Online-Learning-Classes-Sql-Sub-Queries-Nested-Co-related.html

サブクエリは、別の選択ステートメントの句に埋め込まれている選択ステートメントです。

例:

select ename, sal 
from emp  where sal > (select sal 
                       from emp where ename ='FORD');

相関サブクエリは、外部クエリまたはメインクエリによって処理される行ごとに1回評価されるサブクエリです。外部クエリによってフェッチされた値に基づいて内部クエリを実行します。メインクエリによって返されたすべての値が一致します。 INNERクエリは、OUTERクエリによって駆動されます。

例:

select empno,sal,deptid 
from emp e 
where sal=(select avg(sal) 
           from emp where deptid=e.deptid);

内部クエリが最初に実行されて値を見つけ、外部クエリが内部クエリ(サブクエリ)の値を使用して1回実行されます

外部クエリでフェッチし、外部クエリの値を使用して内部クエリを実行し、内部クエリの結果の値を使用して外部クエリ(相関)を修飾または不適格にします

詳細:http://www.oraclegeneration.com/2014/01/sql-interview-questions.html

6
Brahmareddy K

相関サブクエリ:メインクエリによって処理される各行に対して評価されます。外部クエリによってフェッチされた値に基づいて内部クエリを実行します。メインクエリによって返されるすべての値が一致するまで続行します。内部クエリは外部クエリによって駆動されます

例:

SELECT empno,fname,sal,deptid FROM emp e WHERE sal=(SELECT AVG(sal) FROM emp WHERE deptid=e.deptid)

Correlatedサブクエリは、特に各部門のAVG(sal)を計算します。

サブクエリ:最初に実行され、一度実行されると、メインクエリで使用される値が返されます。外部クエリは内部クエリによって駆動されます

6
Kumaran

サブクエリと相互関連クエリの両方が内部クエリと外部クエリの両方になる場合、唯一の違いはサブクエリであり、内部クエリは外部クエリに依存しませんが、相互関連の内部クエリは外部に依存します。

2
Prashanth S R

以下の説明があなたに役立つと思います。それらの区別:Correlated subqueryは、メインクエリ(外部クエリ)によって参照される内部クエリであり、内部クエリは繰り返し実行されると見なされます。

non-correlated subqueryは、外部クエリとは独立したサブクエリであり、メイン外部クエリに依存せずに独自に実行できます。

plain subqueryは外部クエリに依存しません。

1
rcmuthu786

SQLクエリで、外部クエリのすべての行に対して内部クエリが実行される場合。内部クエリが1回実行され、結果が外部クエリによって消費される場合、それは非相関クエリとして呼び出されます。

相関サブクエリは通常、通常の結合クエリに対応します。つまり、サブクエリを持たない結合クエリであり、通常はそのように表現できます。ほとんどのSQL DBMSはそれらを実行します.....