MySQL veritabanında sorgu yaparken kullanabileceğiniz ileri seviye arama teknikleri ve JOIN/UNION operatörleri hakkında bilgi veren bir yazıdır LIKE operatörü ve regular expressions kullanarak sınırsız arama yapmanın mümkün olduğu belirtilerek, bu tekniklerin nasıl kullanılabileceği açıklanmaktadır JOIN operatörü ile birden fazla tablonun nasıl birleştirilebileceği, INNER JOIN ile eşleşen verilerin, OUTER JOIN ile ise eşleşmeyen verilerin de listelenebileceği anlatılmıştır Union operatörünün farklı sorgulardan elde edilen sonuçları birleştirerek daha detaylı ve kapsamlı bir tablo oluşturmanın mümkün olduğu vurgulanmıştır
MySQL veritabanında sorgu yapmak, günümüzde bilgiye erişmenin en önemli yöntemlerinden biridir. Ancak birçok kullanıcı, sorgu yaparken sınırlandığı için istedikleri sonucu elde edemeyebilirler. İşte bu nedenle, sorgu yaparken sınırları ortadan kaldıran tekniklere ihtiyaç duyulmaktadır. Bunlardan biri de LIKE operatörü ve regular expressions ile ileri arama teknikleri kullanmaktır.
LIKE operatörü, sorgulama işlemi sırasında verileri arama kolaylığı sağlar. Özellikle metin tabanlı verilerin aranması işlemleri için oldukça önemlidir. Kullanıcı, veritabanındaki tüm verileri LIKE operatörü sayesinde arayabilir. Ayrıca, regular expressions kullanarak sorgulama yapmak da oldukça etkili bir yöntemdir. Regular expressions sayesinde, kullanıcının istediği herhangi bir karakter veya kelimeyi araması mümkündür. Bu teknikler, sorgu yaparken hızlı ve etkili sonuçlar elde etmenize yardımcı olur.
- LIKE operatörü, % ve _ kullanarak arama işlemleri yapabilir.
- Regular expressions kullanarak, karakterlerin veya kelimelerin çeşitli kombinasyonlarını arayabilirsiniz.
- Veritabanında sınırsız arama yapmak için bu teknikleri birleştirerek kullanabilirsiniz.
Bu teknikler sayesinde, veritabanında arama yapmak daha kolay ve etkin hale gelir. Kullanıcılar, sınırları ortadan kaldıran bu teknikleri kullanarak verilerine erişebilir ve istedikleri sonuçları elde edebilirler.
2. JOIN ve UNION Kullanımı
MySQL veritabanında sorgulama yaparken birden fazla tablo ile çalışmak sıkça karşılaşılan bir durumdur. Bu durumda kullanılabilecek en etkili teknikler JOIN ve UNION operatörleridir. JOIN operatörleri, iki veya daha fazla tabloyu birleştirerek sorgu yapmamızı sağlar. UNION operatörü ise farklı tablolardaki sorgu sonuçlarını birleştirir.
INNER JOIN, en sık kullanılan JOIN operatörüdür. Bu operatör, sorguda belirtilen iki tablodan, her ikisinde de bulunan kayıtları getirir. LEFT OUTER JOIN ise, sol taraftaki tablodan tüm kayıtları getirir ve sağ taraftaki tablodaki karşılıklarını sorgulara dahil eder. RIGHT OUTER JOIN ise tam tersi işlemi yapar, sağ taraftaki tablodan kayıtları getirir ve sol taraftaki tablodaki karşılıklarını sorgulara dahil eder. Bu sayede, sorgulamalarımızı daha etkili hale getirir ve ihtiyaca yönelik sonuçlar elde edebiliriz.
UNION operatörü ise, farklı sorgulardan elde edilen sonuçları birleştirir. Bu yöntemle, birden fazla tablodan sorgu yapmayı ve sonuçlarını karşılaştırmayı mümkün kılar. UNION operatörünü kullanarak, farklı tablolardan gelen sonuçları birleştirdiğimizde, daha detaylı ve kapsamlı bir tablo elde edebiliriz. Bu sayede veritabanında yer alan bilgileri daha verimli bir şekilde kullanarak işlemlerimizi gerçekleştirebiliriz.
2.1 INNER JOIN
INNER JOIN, bir ya da daha fazla tabloyu birleştiren en yaygın kullanılan JOIN operatörüdür. INNER JOIN kullanılarak tabloların sadece ortak olan alanlarına göre birleştirme işlemi yapılır. Bu sayede, istenmeyen ya da gereksiz kayıtlar sorgulamadan çıkarılmış olur.
INNER JOIN kullanarak örneğin bir müşteri tablosunu bir sipariş tablosu ile birleştirebiliriz. Böylece herhangi bir müşterinin varsa hangi siparişleri verdiğini sorgulayabiliriz.
Aşağıdaki örnekte INNER JOIN kullanarak bir müşteri tablosunu sipariş tablosu ile birleştirdik:
SELECT *FROM müşteriler INNER JOIN siparişlerON müşteriler.müşteri_id=siparişler.müşteri_id;
Bu sorgu, müşteri ve sipariş tabloları arasındaki müşteri_id alanlarına göre birleştirme işlemi yapar ve sadece o müşterilere ait siparişleri görüntüler.
INNER JOIN kullanırken dikkat edilmesi gereken nokta, her zaman birleştirilecek alanların aynı veri türüne sahip olmasıdır. Aksi takdirde işlem yapılamaz ve hata alınır. INNER JOIN, veritabanı sorgularında en çok kullanılan JOIN operatörlerinden birisidir ve sorgulama işlemlerinin hızlı ve doğru bir şekilde yapılmasını sağlar.
2.2 OUTER JOIN
OUTER JOIN, birleştirilen tablolardan en az birindeki eşleşmeyen verileri de listelemek için kullanılan bir JOIN tekniğidir. OUTER JOIN, INNER JOIN ile karşılaştırıldığında biraz daha farklıdır. INNER JOIN yalnızca eşleşen verileri seçerken, OUTER JOIN tüm verileri seçer, ancak eşleşmeyen alanlar NULL değeriyle işaretlenir.
OUTER JOIN, LEFT, RIGHT ve FULL olarak üç farklı şekilde kullanılabilir. LEFT OUTER JOIN, birinci tablodaki verilerin tamamını ve ikinci tablodaki eşleşen verileri listeler, ancak ikinci tablodaki eşleşmeyen verileri NULL değeriyle doldurur. RIGHT OUTER JOIN da tam tersi şekilde çalışır ve ikinci tablodaki verilerin tamamını ve birinci tablodaki eşleşen verileri listeler, ancak birinci tablodaki eşleşmeyen verileri NULL değeriyle doldurur. FULL OUTER JOIN, hem birinci hem de ikinci tablodaki tüm verileri listeler ve eşleşmeyen alanlar NULL değeriyle doldurulur.
Örneğin, "Müşteriler" ve "Siparişler" adında iki tablonuz var ve "Müşteriler" tablosundaki bir müşterinin ID'si, "Siparişler" tablosundaki bir siparişin müşteri ID'siyle eşleşiyorsa, INNER JOIN, yalnızca bu verileri listeler. Ancak, OUTER JOIN kullanarak, "Müşteriler" tablosundaki müşterilerin tamamını ve "Siparişler" tablosundaki eşleşen verileri listeleme olanağı sağlarsınız. Eşleşmeyen alanlar NULL değeriyle doldurulur.
Aşağıda, LEFT OUTER JOIN ve RIGHT OUTER JOIN'un örnekleri verilmiştir.
Müşteriler | Siparişler | ||
---|---|---|---|
ID | Ad | ID | MüşteriID |
1 | Ahmet | 101 | 1 |
2 | Mehmet | 102 | 2 |
3 | Ali | 103 | 1 |
LEFT OUTER JOIN Örneği:
SELECT müşteriler.ad, siparişler.IDFROM müşterilerLEFT OUTER JOIN siparişler ON müşteriler.ID = siparişler.müşteriID;Yukarıdaki sorgu, tüm müşterileri ve müşteriye ait siparişleri listeler. MüşteriID'ye sahip hiçbir sipariş olmayan müşterilerin de NULL değerleri ile birlikte gösterilmesini sağlar.
RIGHT OUTER JOIN Örneği:
SELECT müşteriler.ad, siparişler.IDFROM müşterilerRIGHT OUTER JOIN siparişler ON müşteriler.ID = siparişler.müşteriID;Yukarıdaki sorgu, tüm siparişleri ve sipariş sahibi müşterileri listeler. Müşteri tablosundaki herhangi bir eşleşmeyen müşteri için de NULL değeri gösterilir.
2.2.1 LEFT OUTER JOIN
LEFT OUTER JOIN, birleştirilecek tabloların her iki tablosunda bulunan eşleşen ve eşleşmeyen tüm kayıtları getirir. LEFT OUTER JOIN kullanımı, LEFT JOIN operatörüyle aynıdır. LEFT OUTER JOIN, sol tablonun tüm kayıtlarının alınmasını ve sağ tabloda eşleşen kayıtların yanı sıra sağ tabloda eşleşmeyen kayıtların da getirilmesini sağlar.
Örnek olarak, bir ofisin çalışanları ve departmanları için kayıt tutulan iki tablo olduğunu düşünelim. Çalışanlar tablosunda her çalışanın ID, adı ve çalıştığı departmanın ID'si yer alırken, departmanlar tablosunda da her departmanın ID'si ve adı yer almaktadır. LEFT OUTER JOIN kullanarak, departman ID'si eşleşmeyen çalışanların da listelenebileceği bir sorgu yazabiliriz.
Örnek SQL sorgusu şöyle olabilir:
SELECT çalışanlar.adı, departmanlar.adı FROM çalışanlar LEFT OUTER JOIN departmanlar ON çalışanlar.departmanID = departmanlar.ID
Bu sorgu, çalışanlar tablosundaki tüm kayıtların alınmasını ve departmanlar tablosundaki eşleşen kayıtların yanı sıra, çalışanların atandığı departmanın ID'si eşleşmeyen kayıtların da listelenmesini sağlar. LEFT OUTER JOIN kullanımı, veritabanındaki iki veya daha fazla tablo arasında bağlantı oluşturarak daha karmaşık sorgulama yapmak için ideal bir tekniktir.
2.2.2 RIGHT OUTER JOIN
RIGHT OUTER JOIN (Dış Tanımlı Sağ Birleştirme) operatörü, LEFT OUTER JOIN'un tam tersidir. RIGHT OUTER JOIN ile sağ taraftaki tablodan tüm kayıtlar alınır ve sol tablodan eşleşen kayıtlar getirilir. Eşleşen kayıtların dışında kalan sağ taraftaki tablo kayıtları, NULL olarak döndürülür.
Örneğin, bir işletmenin müşteri ve sipariş tabloları olduğunu düşünelim. Müşteri tablosunda müşteri adı ve müşteri numarası, sipariş tablosunda ise sipariş numarası ve müşteri numarası bulunmaktadır. Bu iki tabloyu RIGHT OUTER JOIN ile birleştirerek, müşteri adı ve müşteri numarası alanlarını da içeren siparişleri listeleyebiliriz. İşte bir örnek SQL sorgusu:
```SELECT customers.customer_name, orders.order_numberFROM customersRIGHT OUTER JOIN ordersON customers.customer_number = orders.customer_number;```
Yukarıda verilen örnekte, RIGHT OUTER JOIN ile orders tablosundan tüm kayıtlar alınır ve customers tablosundan eşleşen kayıtlar getirilir. Eşleşen kayıtların dışında kalan orders tablosu kayıtları NULL olarak döndürülür. Bu sorgu sonucunda hem customers hem de orders tablosundaki tüm kayıtlar listelenir.
RIGHT OUTER JOIN, SQL sorgularında daha karmaşık bir birleştirme yapmak için kullanılabilir. Örneğin, ürün ve sipariş tabloları birleştirilerek hangi üründen kaç adet sipariş alındığı gibi bilgiler elde edilebilir.
Tablo yapısı kullanarak RIGHT OUTER JOIN ile birleştirme işlemini daha iyi anlayabiliriz. Aşağıdaki örnek, customers ve orders tablolarının RIGHT OUTER JOIN ile birleştirilmesini göstermektedir:
customers | orders |
---|---|
customer_number | order_number |
customer_name | customer_number |
RIGHT OUTER JOIN ile birleştirildiğinde, orders tablosundan tüm kayıtlar alınır ve customers tablosundan eşleşen kayıtlar getirilir. Eşleşen kayıtların dışında kalan orders tablosu kayıtları NULL olarak döndürülür.
2.3 UNION
MySQL veritabanının en önemli özelliklerinden birisi birden fazla tablo üzerinde işlem yapabilmesidir. UNION operatörü bu özelliği kullanarak birden fazla tablonun içindeki verileri birleştirerek tek bir sonuç kümesi oluşturur. Bu sayede birkaç tablodan veri almak için birkaç sorgu çalıştırmak yerine, tek bir sorgu çalıştırmak yeterli olur.
UNION operatörü, farklı birçok tablodan veri çekmek için veri kümelerini birleştirmek için kullanılır. Bu operatörü kullanarak, farklı farklı sorguları birleştirerek herhangi bir veritabanındaki verileri birleştirebilirsiniz. Bu operatör, tüm karakteristikleri tabloların öznitelikleriyle uyumlu olduğunda çalışır. Eğer tabloların özellikleri birbirinden farklıysa hata alabilirsiniz. UNION operatörü, sadece bir kez kullanılmalıdır. Birden fazla kullanıldığında, her UNION operatörü için işlem tekrarlanır.
Table A | Table B |
---|---|
1 | 5 |
2 | 6 |
3 | 7 |
4 | 8 |
- Örnek: Table A ve Table B adında iki tablomuz var olsun ve her ikisi de benzer yapılara sahip olsun. Bu durumda, birleştirme işlemi için şu sorguyu oluşturabilirsiniz:
SELECT * FROM Table AUNIONSELECT * FROM Table B;
3. Subquery Kullanımı
MySQL veritabanında sadece basit sorgular yapmakla kalmayıp, daha karmaşık sorgulama yapmak için subquery kullanabilirsiniz. Subquery, başka bir sorgunun sonucunu içeren bir sorgu olduğundan, SQL sorgularınızı daha esnek ve işlevsel hale getirir.
Subquery sorguları, daha kolay anlaşılabilir ve yönetilebilir hale getirerek, birçok sorgulama işleminin daha hızlı ve daha verimli çalışmasına olanak tanır. Bu nedenle, subquery kullanarak veritabanı sorgularının hazırlanması, büyük ölçüde zaman ve kaynak tasarrufu sağlar.
SELECT Subquery Kullanımı olarak bilinen bir subquery tekniği, bir SELECT sorgusunun içinde bir başka SELECT sorgusu kullanır. Bu yöntem, birçok sorgulama işleminin aynı anda yürütülmesini sağlar. Bu şekilde, birçok farklı kaynaktan gelen veriler, tek bir sorgu ile toplanabilir. SELECT Subquery Kullanımı, birçok durumda tablolarda yapılan veri sorgulamalarını hızlandırır.
Bir diğer subquery tekniği ise Update ve Delete İşlemleri subquery tekniğidir. Bu yöntem, bir tablodaki veriyi güncelleme veya silme işlemi yaparken kullanılır. Bir tablodaki veriyi birden fazla tabloda kullanıyorsanız veya birden fazla tablosu olan bir veritabanı kullanıyorsanız, bu yöntem daha karmaşık veri sorgulamalarının gerçekleştirilmesine olanak sağlar.
3.1 SELECT Subquery Kullanımı
MySQL veritabanlarında sorgulama işlemleri yaparken bazen tek bir sorguyla birden fazla tabloya veya bir alt sorguyla sorgu yapılan tabloya erişmek gerekebilir. SELECT içinde kullanılan subquery yapısı, bu ihtiyaçları karşılamak için oldukça kullanışlı bir tekniktir.
SELECT içinde kullanılan subquery yapısında, bir select ifadesi, bir sütun ifadesi veya bir tam sayı ifadesi döndürülebilir. Subquery ifadesi, dış sorgunun bir koşulu olarak kullanılabilir ve alt sorguda dönen değerler, bu koşula göre sorgulanacak tablodaki verileri filtreleyebilir.
Örneğin, bir film veritabanında belirli bir yönetmenin filmlerini listelemek istediğimizi varsayalım. Bunun için, ilk önce film veritabanındaki yönetmenler tablosunda belirli bir yönetmenin ID'sini bulmamız gerekir. Ardından, film tablosunda bu yönetmenin filmlerini listeleriz. Ancak, bu işlemi tek bir sorguyla yapmak istiyorsak, subquery yapısını kullanabiliriz.
SELECT * FROM film WHERE director_id = (SELECT id FROM directors WHERE name = 'Christopher Nolan');
Bu örnekte, film tablosundaki tüm filmler, directors tablosunda adı Christopher Nolan olan yönetmenin ID'sine göre filtrelenir. SELECT içindeki subquery ifadesi, dış sorgunun bir koşulu olarak kullanılır ve directors tablosundan sadece belirli bir yönetmenin ID'si seçilir.
SELECT içinde kullanılan subquery yapısını kullanarak birçok farklı sorgulama işlemi yapılabilir. Örnek olarak, bir tablodaki en yüksek değeri bulma, bir alt sorgudan gelen verileri kullanarak sorgulama yapma veya bir tablodaki en son tarihli veriyi bulma işlemleri gibi işlemler sayılabilir.
3.2 Subquery ile Update ve Delete İşlemleri
MySQL veritabanında, subquery kullanarak çok daha karmaşık SQL sorguları yazabiliriz. Bu sorgu teknikleri arasında, update ve delete işlemlerinde subquery kullanımı da bulunur.
Subquery kullanarak update işlemi yapmak istediğimizde, sorgunun içinde başka bir sorgu yaparız. Bu sorguda, güncellenecek kaydın bulunmasını sağlayacak nitelikleri belirtiriz. Örneğin, müşterimizin ismi 'Ali' olan tüm siparişleri güncellemek istiyoruz diyelim. Bu işlem için şu sorguyu kullanabiliriz:
UPDATE siparisler SET sevk_durumu = 'Hazırlanıyor'WHERE musteri_id in (SELECT musteri_id FROM musteriler WHERE isim = 'Ali')
Bu sorguda, subquery kısmı pareantez içinde yer alır. İlk olarak 'musteriler' tablosundan 'isim' sütununda 'Ali' olan müşterinin 'musteri_id'si çekilir. Daha sonra, 'siparisler' tablosunda bu müşterinin tüm siparişleri sevk_durumu 'Hazırlanıyor' olarak güncellenir.
Delete işlemi de benzer şekilde yapılır. Örneğin, müşteriler tablosundan 'Ali' isimli müşterinin kayıtlarını silmek istediğimizde şu sorguyu kullanabiliriz:
DELETE FROM musterilerWHERE musteri_id IN (SELECT musteri_id FROM musteriler WHERE isim = 'Ali')
Bu sorguda da subquery kısmında, 'musteriler' tablosundan 'isim' sütununda 'Ali' olan müşterinin 'musteri_id'si çekilir ve daha sonra bu id'ye sahip kayıtlar silinir.
Bu yöntemler, SQL sorgularında büyük esneklik sağlar ve daha karmaşık sorguları daha kolay bir şekilde yazmamıza olanak tanır. Subquery kullanarak yapılan update ve delete işlemleri, SQL sorgulama işlemlerinde önemli bir yere sahiptir.