Aşağıdaki SQL Sorgusu parçası normal bir sorgu mu yoksa İlişkili Alt Sorgu mu?
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
Ayrıca, birisi her ikisi arasındaki farkı belirtebilir mi?
Yukarıdaki örnek Birlikte İlişkili Alt Sorgu değildir. Türetilmiş Tablo / Satır İçi Görünümdür, çünkü FROM Cümlesi içinde bir Alt sorgudur.
Korelasyonlu bir Alt sorgu, içindeki üst (ana Sorgu) Tablosuna başvurmalıdır. Örneğin, İlişkili Alt sorgu ile N'inci maksimum maaşı bulun:
SELECT Salary
FROM Employee E1
WHERE N-1 = (SELECT COUNT(*)
FROM Employee E2
WHERE E1.salary <E2.Salary)
Co-Related Vs Nested-SubQueries.
Normal Alt sorgu ile Ortak ilişkili alt sorgu arasındaki teknik farklar şunlardır:
1. Döngü: Birlikte ilişkili alt sorgu, ana sorgu altında döngüye girer; oysa iç içe geçmez; bu nedenle birlikte ilişkili alt sorgu, ana sorgunun her yinelemesinde yürütülür. İç içe sorgu durumunda ise; önce alt sorgu, sonra dış sorgu yürütülür. Dolayısıyla, maksimum yürütme sayısı ilişkili alt sorgu için NXM ve alt sorgu için N+M'dir.
2. Bağımlılık (İçten Dışa vs Dıştan İçe): Birlikte ilişkili alt sorgu durumunda, iç sorgu işlem için dış sorguya bağlıyken, normal alt sorguda Dış sorgu iç sorguya bağlıdır.
3.Performans: Eş ilişkili alt sorgu kullanıldığında performans düşer, çünkü N+M iterasyon yerine NXM iterasyon gerçekleştirir ¨ Eş ilişkili Alt Sorgu Yürütme.
Örneklerle daha fazla bilgi için:
İlişkili Alt Sorgu, dış sorgudaki değerleri kullanan bir alt sorgudur. Bu durumda, dış sorgunun her satırı için iç sorgunun çalıştırılması gerekir.
Örneğe buradan bakabilirsiniz http://en.wikipedia.org/wiki/Correlated_subquery
Basit alt sorgu, dış sorgudaki değerleri kullanmaz ve yalnızca bir kez hesaplanır:
SELECT id, first_name
FROM student_details
WHERE id IN (SELECT student_id
FROM student_subjects
WHERE subject= 'Science');
CoRelated Alt Sorgu Örneği -
Maaşı departmanı için ortalamanın üzerinde olan tüm çalışanları bulmak için sorgu
SELECT employee_number, name
FROM employees emp
WHERE salary > (
SELECT AVG(salary)
FROM employees
WHERE department = emp.department);
Sanırım aşağıdaki açıklama size yardımcı olacaktır... bunlar arasındaki fark: "İlişkili alt sorgu", ana sorgu (dış sorgu) tarafından başvurulan bir iç sorgudur, öyle ki iç sorgu tekrar tekrar çıkarılmış olarak kabul edilir.
İlişkisiz alt sorgu, dış sorgudan bağımsız bir alt sorgudur ve ana dış sorguya dayanmadan kendi başına çalıştırılabilir.
düz alt sorgu
dış sorguya bağımlı değildir,