下面这段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
另外,谁能说说这两者之间的区别?
上面的例子不是共同相关的子查询。它是衍生表/内部视图,因为它是FROM条款中的一个子查询。
一个Corelated Sub-query应该引用它的父(主查询)表。例如:通过联合相关子查询找到第N个最高工资。
SELECT Salary
FROM Employee E1
WHERE N-1 = (SELECT COUNT(*)
FROM Employee E2
WHERE E1.salary <E2.Salary)
**共同关联与嵌套子查询。
普通子查询和共同相关子查询的技术区别是。
1.循环: 共轭子查询在主查询下循环;而嵌套子查询不循环;因此共轭子查询在主查询的每个迭代中执行。而在嵌套查询的情况下,先执行子查询,然后再执行外部查询。因此,相关子查询的最大执行次数为NXM,子查询的最大执行次数为N+M。
2.依赖性(内部到外部 vs 外部到内部): 在共同关联子查询的情况下,内部查询依赖于外部查询的处理,而在普通子查询中,外部查询依赖于内部查询。
3.性能: 使用共同关联子查询性能下降,因为它执行NXM迭代而不是N+M迭代。
更多的信息和例子。
相关子查询是一个使用外部查询值的子查询。在这种情况下,内部查询必须为外部查询的每一行执行。
请看这里的例子 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');
相关的子查询示例 -
查询查找所有工资高于本部门平均水平的员工
SELECT employee_number, name
FROM employees emp
WHERE salary > (
SELECT AVG(salary)
FROM employees
WHERE department = emp.department);