JOIN operatörünün görünümü için ön koşullar
Tablolardaki veri miktarı arttıkça, içlerinde genellikle yinelenen değerler belirir. Örneğin, ürün tablosunda marka adları bulunur. ki bazen tekrarlanır. Bunlar için, örneğin şu verileri içeren ayrı bir marka tablosuna sahip olmak faydalı olacaktır:
- kimlik - marka kimliği;
- ad – marka adı;
- şirket_sahibi - markanın şirket sahibinin adı;
- company_contacts - marka sahibinin şirketinin kişileri.
Ardından, tüm adresleri içine koyabileceğimiz bir adres tablosu oluşturmak istiyoruz:
- id – id-adresleri;
- ülke;
- bölge;
- şehir;
- sokak;
- ev;
- zip.
Üstelik bu tabloda sadece marka sahibi firmaların değil, müşterilerin ve çalışanların adreslerinin de saklanması mümkün olacaktır. Ve bu yaklaşım, basitçe veri miktarındaki (tablolardaki satır sayısı) büyümenin bir sonucudur. Bu, tablolardaki verileri işlemeyi ve bütünlüklerini korumayı kolaylaştırır.
5 çalışanınız olduğunda, meslek sütununa mesleklerini girebilirsiniz . Şirketinizde 5 bin çalışanınız varsa, o zaman x mesleğin ve sorumluluklarının olduğu bir tabloya ihtiyacınız var.
Bu arada Java dilinde de benzer bir şey var. Bir yöntemde çok fazla kodunuz varsa, onu birkaç yönteme ayırma arzusu vardır. Bir sınıfta birçok yöntem varsa, o zaman onu birkaç sınıfa bölmek istiyorum.
Bu nedenle büyük veritabanlarında binlerce tablo bulunur. Ve hemen hemen tüm sorgular aynı anda birkaç tabloda yürütülür. Ve her birinde bin kayıt bulunan üç tablonun satırlarının Kartezyen çarpımı zaten bir milyar satırdır.
Ancak WHERE kullanarak bir milyar satırı filtrelemek bile saatler alabilir. Bu nedenle, SQL dilinin yaratıcıları kendi çözümlerini sundular - JOIN operatörü.
JOIN operatörüne giriş
JOIN operatörü, SQL sunucusuna, herkes için tüm tablo satırlarının Kartezyen bir ürününe ihtiyacımız olmadığını, ancak bir kimlik (veya başka bir şekilde) kullanarak birbirine atıfta bulunan farklı tablo satırlarının akıllı bir şekilde yapıştırılmasına ihtiyacımız olduğunu açıkça söylemek için kullanılır. . Sunucunun JOIN operatörünü kullanarak tablo birleştirmelerini işlemek için ayrı bir algoritması vardır ve bu, bu tür işlemlerin çok daha hızlı gerçekleştirilmesine olanak tanır. JOIN operatörünün genel formu aşağıdaki gibidir:
table 1 JOIN table 2 ON condition
Burada, tablo1 ve tablo2 tablolarını tek bir tabloda birleştirmeniz ve birleştirme kriteri olarak koşulu kullanmanız gerektiğini söylüyor .
Eski örneğimizi ele alalım:
SELECT * FROM employee, task WHERE emploee.id = task.emploee_id
Ve JOIN operatörünü kullanarak yeniden yazın:
SELECT * FROM employee JOIN task ON emploee.id = task.emploee_id
Bizim durumumuzda her iki sorgu da aynı sonucu verecektir, ancak bunun tek nedeni sorguların çok basit olmasıdır. Gelecekte, WHERE tam olarak satır filtresi oluşturmanıza izin verir ve ON'dan sonra belirtilen filtre, tabloları bağlamak için karmaşık komut dosyaları yazmanıza izin verir. JOIN deyimini kullanırken takma adlar (tablo takma adları) da kullanabilirsiniz. Örnek:
SELECT * FROM employee e JOIN task t ON e.id = t.emploee_id