次のようなSQLクエリは、通常のクエリなのか、それともCorrelated Subqueryなのでしょうか?
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
また、両者の違いについても教えてください。
上記の例はCo-related Sub-Queryではありません。つまり、FROM句の中のサブクエリーです。
Corel化されたサブクエリは、その中で親(メインクエリ)のテーブルを参照する必要があります。例えば、Corelated Sub-queryでN番目の最高給与を見つける。
SELECT Salary
FROM Employee E1
WHERE N-1 = (SELECT COUNT(*)
FROM Employee E2
WHERE E1.salary <E2.Salary)
**関連サブクエリーと非関連サブクエリーの比較
通常のサブクエリと共起サブクエリの技術的な違いは以下の通りです。
**1.ルーピング:***。 Co-related sub-queryはメインクエリの下でループしますが、Nestedではループしません。そのため、Co-related sub-queryはメインクエリの各イテレーションで実行されます。一方、入れ子になったクエリの場合は、まずサブクエリが実行され、次に外部のクエリが実行されます。従って、最大実行回数は、相関副問い合わせではNXM、副問い合わせではN+Mとなります。
**2.2.依存性(内側から外側、外側から内側):***。 相関副問い合わせの場合、内側の問い合わせは外側の問い合わせに処理を依存しますが、通常の副問い合わせの場合、外側の問い合わせは内側の問い合わせに依存します。
3.パフォーマンス:。 共関連サブクエリを使用すると、N+M回の反復の代わりにNXM回の反復を行うため、パフォーマンスが低下します。 ¨共関連サブクエリの実行
例を挙げて詳しく説明しています。
相関副問い合わせは、外側の問い合わせの値を使用する副問い合わせです。この場合、内側のクエリは外側のクエリの各行に対して実行されなければなりません。
例はこちら 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');
関連するサブクエリーの例 -。
Query To Find all employees whose salary is above average for their department
SELECT employee_number, name
FROM employees emp
WHERE salary > (
SELECT AVG(salary)
FROM employees
WHERE department = emp.department);