SQL-də birləşmələr şərtə uyğun olaraq cədvəllər arasındakı əlaqəli bir sütuna əsaslanaraq iki və ya daha çox cədvəlin sətirlərini birləşdirmək üçün istifadə olunan əmrlərdir. Birləşmə şərti SQL birləşmədə iştirak edən məlumat cədvəllərindəki bəzi sütunlar arasındakı münasibətdir. SQL birləşmələri əsasən aralarında birin birə, birin çoxa və ya çoxun çoxa əlaqəsi olan cədvəllərdən məlumat çıxarmaqda istifadə olunur.
SQL-də müxtəlif növdə birləşmələr (join) mövcuddur. Bu birləşmələri aşağıdakı kimi qruplaşdırmaq olar.
- SQL daxili birləşmə (SQL inner join)
- Bərabər birləşmə (Equi join)
- Qeyri - bərabər birləşmə (Non-equi join (Theta join))
- SQL xarici birləşmə (SQL outer join)
- SQL soldan birləşmə (SQL left join və ya left outer join)
- SQL sağdan birləşmə (SQL right join və ya right outer join)
- SQL tam birləşmə (SQL full join və ya full outer join)
- SQL çarpaz birləşmə (SQL cross join)
- SQL özü-özünə birləşmə (SQL self join)
Daha aydın olsun deyə qrafik şəklində baxa bilərik.
Bu dörd növ arasındakı fərqi izah etməyin ən asan və anlaşıqlı yolu Venn diaqramından istifadə etməkdir.
Deyək ki, əlaqəli verilənlər bazamızda iki məlumat dəsti var:
A və B cədvəlləri.
Bu cədvəllər arasında “primary” və “foreign keys” ilə müəyyən bir əlaqə var. Bu cədvəllərin bir-birinə qoşulmasının nəticəsi aşağıdakı diaqramla vizual şəkildə göstərilə bilər:
Üst-üstə düşmənin dərəcəsi, A Cədvəldəki qeydlərin Cədvəl B-də olan qeydlərə nə qədər uyğun gəldiyinə görə müəyyən edilir. İki cədvəldən hansı məlumat dəstini seçmək istədiyimizdən asılı olaraq, dörd birləşmə növü vurğulayaraq görüntülənə bilər.
SQL daxili birləşmə (SQL inner join)
Birləşmənin ən sadə və ən yaygın forması SQL daxili birləşmə əksər verilənlər bazası idarəetmə sistemlərində istifadə olunan SQL birləşmə növlərinin defolt birləşməsidir.
SQL daxili birləşmə, birləşmə şərtinin yerinə yetirildiyi birdən çox cədvəllərdə bir uyğunluq olduqda sətirlari qaytarır, yəni kəsişməni.
Sintaksisi aşağıdakı kimidir:
SELECT column_name(s)
FROM table1 INNER JOIN table2
ON table1.column_name = table2.column_name;
Diaqram olaraq isə aşağıdakı kimi təsvir edə bilərik.
Bərabər birləşmə (Equi join)
Bu ekvivalent birləşmə praktikada istifadə olunan SQL daxili birləşmənin (İnner Join) ən çox yayılmış formasıdır.
Bu birləşmə ilk cədvəldəki bir sütundakı dəyərin ikinci cədvəldəki müvafiq sütunun dəyərinə bərabər olmasını şərtləndirən bir WHERE şərti ilə əsas birləşmədir.
Məsələn, müştəri cədvəlindəki müştəri şəxsiyyətini sifariş cədvəlindəki müştəri şəxsiyyəti ilə uyğunlaşdırdığımız yerlərdə Equi join sadəcə dəyərlərin bərabər olduğunu söyləmək üçün xəyali bir yoldur. Birləşmə vəziyyətimizdə bərabər işarədən istifadə edirik. Bu kimi birləşmələr “equi join” - bərabər birləşmə adlanır.
Sintaksisi aşağıdakı kimidir:
SELECT column_list
FROM table1, table2....
WHERE table1.column_name =
table2.column_name;
və ya
SELECT *
FROM table1
JOIN table2
[ON (join_condition)]
Qeyri - bərabər birləşmə (Non-equi join (Theta join))
Bu birləşmə təcrübədə nadir hallarda istifadə olunan SQL birləşmə formasıdır.
Bu birləşmələr bərabər şərtlərdən başqa digər şərti operatorlardan istifadə edən birləşmələrdir.
Sintaksisi aşağıdakı kimidir:
SELECT * or column list
FROM table_name1, table_name2
WHERE table_name1.column [> | < | >= | <=] table_name2.column;
Özü-özünə birləşmə (Self Join)
SQL özü-özünə birləşmə bir cədvələ qoşulma mexanizmidir. Bu birləşmədən eyni cədvəldəki bəzi digər qeydlər ilə cədvəldəki qeydləri birləşdirən bir nəticə toplusu yaratmaq istədikdə istifadə edilir.
Məsələn, bir işçi cədvəlində (employee table) işçilərin hamısını qaytaran və rəhbərlərinin kim olduğunu göstərən bir nəticə toplusuna nəzər salmaq istədikdə “self join” istifadə edə bilərik.
Sintaksisi aşağıdakı kimidir:
SELECT a.column_name, b.column_name...
FROM table1 a, table1 b
WHERE a.common_filed = b.common_field;
Çarpaz birləşmə (Cross Join)
Bu birləşmə iki cədvəlin bütün mümkün birləşmələri üçün bütün sətirləri qaytarır. Sol cədvəldən bütün sətirləri əmələ gətirir, sonra sağ cədvəldəki bütün sətirlər ilə birləşdirilir. Bu birləşmə bir növ Karteziya məhsulu (Cartesian product ) (A * B) olaraq da bilinir.
Məsələn, sol cədvəldə 100 sətir və sağ cədvəldə də 100 sətir varsa, çarpaz birləşmə nəticəsi 10000 sətir verəcəkdir.
Sintaksisi aşağıdakı kimidir:
SELECT *
FROM table1
CROSS JOIN table2;
SQL xarici birləşmə (SQL outer join)
SQL xarici birləşmə, birləşmə şərtini təmin etməyən sətirlər ilə birlikdə qoşulma şərtini təmin edən hər iki iştirak cədvəlindən bütün sətirləri qaytarır.
SQL xarici birləşmə (outer join) operatoru (+) qoşulma şərtinin yalnız bir tərəfində istifadə olunur.
Sintaksisi aşağıdakı kimidir:
Select *
FROM table1, table2
WHERE conditions [+];
SQL xarici birləşməsinin alt kateqoriyalarına aşağıdakılar aiddir:
- SQL soldan birləşmə ( SQL left outer join və ya sadəcə left join)
- SQL sağdan birləşmə (SQL right outer join və ya sadəcə right join)
- SQL tam birləşmə (SQL full outer join və ya sadəcə full join)
Soldan birləşmə (Left join)
SQL sol xarici birləşmə, sağ cədvəldəki uyğun qeydlərdən asılı olmayaraq, birləşmə şərtinə uyğun olaraq sol cədvəldəki bütün qeydləri geri qaytaracaqdır.
Bu birləşmə, şərti yerinə yetirildiyi sətirləri və şərtin yerinə yetirilmədiyi sol tərəfdəki cədvəldəki bütün sətirləri əhatə edir. Sağ cədvəldə uyğun sətirlər olmadıqda isə sağ cədvəlin sütunları boş dəyərlər kimi göstərəcəkdir.
Sintaksisi aşağıdakı kimidir:
SELECT *
FROM table1
LEFT [OUTER] JOIN table2
ON table1.column_name=table2.column_name;
Sağdan birləşmə (Right join)
Sağ xarici birləşmə, sol cədvəldə uyğun cərgələrin olub-olmamasından asılı olmayaraq, sağ cədvəldəki bütün sətirləri əhatə edən nəticə toplusunu qaytarır.
Sol cədvəldə uyğun sətirlər olmadıqda isə sol cədvəlin sütunları boş dəyərlər kimi göstərəcəkdir.
Sintaksisi aşağıdakı kimidir:
SELECT *
FROM table1
RIGHT [OUTER] JOIN table2
ON table1.column_name=table2.column_name;
Tam birləşmə (Full join)
Tam xarici birləşmə bir INNER birləşməsinin nəticələrini, eləcə də sol və sağ xarici birləşmənin nəticələrini qaytaran iki cədvəl arasında birləşmə həyata keçirir. Bir çox verilənlər bazası tam SQL xarici birləşmələrin həyata keçirilməsini dəstəkləmir.
Sintaksisi aşağıdakı kimidir:
SELECT table1.column, table2.column
FROM table1
FULL OUTER JOIN table2
ON (table1.column = table2.column);
Təbii birləşmə (Natural join)
Sonda isə "natural join" haqqında yazmaq istərdim ki, bu birləşmənin də özünə məxsus xüsusiyyətləri vardır. Bunlara aşağıdakılar aid edilir.
- Birləşmə eyni adı və məlumat növləri olan iki cədvəldəki bütün sütunlara əsaslanır.
- Birləşmə, “NATURAL JOIN” açar sözlərindən istifadə edilərək yaradılır.
- Bütün uyğun gələn sütunlarda bərabər dəyərlərə sahib olan iki cədvəldən sətir seçir.
Sintaksisi aşağıdakı kimidir:
SELECT table1.column, table2.column
FROM table1
NATURAL JOIN table2;