MySQL gibi ilişkisel veritabanlarını kullanmanın en büyük faydalarından biri, ilişkisel yapısının bilgileri birden çok tabloda kolayca depolamanıza ve sorgulamanıza izin vermesidir.

Birden çok veritabanı tablosundan tam olarak istediğiniz verileri nasıl elde edeceğinizi ve tam olarak istediğiniz sonuçları almanıza olanak tanıyan mevcut çeşitli birleştirmeleri inceleyelim.

Örnek Veritabanını Başlatın

Bu gerekli değildir, ancak bu makaledeki örneklerle birlikte takip etmek isterseniz, aşağıdaki terminal komutlarıyla yerel olarak örnek bir veritabanını başlatabilirsiniz:

git klon https://github.com/mdizak/sample-select-db.git
cd sample-select-db
sudo mysql sudo mysql sampledb
mysql> MÜŞTERİLERDEN SAYI (*) SEÇİN;

İçinde 2000 satır olduğunu belirten bir sonuç almalısınız. müşteriler tablo.

Varsayılan / DAHİLİ Birleştirme

İçinde kullanılan varsayılan birleştirme MySQL veritabanları DAHİLİ birleşim olarak adlandırılır ve en yaygın ve basittir. Bu birleştirme, her iki tabloda da eşleşen kayıtların bulunduğu tüm kayıtları döndürür ve diğer tüm kayıtları atar.

instagram viewer
Java ile MySQL Veritabanına Nasıl Bağlanır

Java, JDBC'yi Java SDK'nın bir parçası olarak sağlar. Bu makalede, bir MySQL veritabanına bağlanmanın ve onunla sorgu gerçekleştirmenin ayrıntılarına bakalım.

Örneğin, müşterinin adını ve soyadını, artı 1000 $ 'dan büyük tüm siparişler için sipariş tutarını ve tarihini görmek isterseniz aşağıdaki SQL ifadesini kullanabilirsiniz:


SEÇ
c.id, c.first_name, c.last_name, o.amount, o.created_at
FROM
müşteriler c, siparişler o
NEREDE
o.customer_id = c.id AND o.amount> = 1000;

Yukarıdaki sorgu ile ilgili birkaç not:

  • Üçü müşteriler tablosundan ve ikisi siparişler tablosundan olmak üzere beş farklı sütun seçiliyor.
  • FROM yan tümcesi içinde iki tablo tanımlanmıştır, ancak "c" ve "o" harfleriyle son eklenmiştir. Bunlar basitçe SQL içinde diğer adları belirtir, istediğiniz herhangi bir şey olabilir ve SQL sorgusunu kısaltmak için kullanılır.
  • o.customer_id = c.id sorgunun birleştirme yönüdür ve müşteriler ile siparişler arasında uygun bir korelasyon sağlar.

Aynı sorguyu yazmanın farklı ve teknik açıdan daha doğru bir yolu aşağıdadır:


SEÇ
c.id, c.first_name, c.last_name, o.amount, o.created_at
FROM
müşteriler c INNER JOIN siparişleri o
AÇIK
customer_id = c.id
NEREDE
o.mount> = 1000;

Müşteriler ve siparişler tablosu arasındaki birleşmeyi kolayca görebileceğiniz için yukarıdaki sorgu biraz daha kolay okunabilir. Yine de tüm amaçlar için, bu iki sorgu aynıdır ve tamamen aynı kayıtları üretecektir.

LEFT Katılıyor

Sol birleşimler, sol tablodaki sağ tablodaki kayıtlarla eşleşen tüm kayıtları döndürür ve diğer tüm kayıtları atar. Örneğin, veritabanındaki her bir ürün için toplam satış miktarını görmek isteyebilirsiniz, aşağıdaki gibi bir sorgu kullanmayı deneyebilirsiniz:


SEÇ
p.name, sum (item.amount) AS tamount
FROM
siparişler_items öğe LEFT JOIN ürünler p
AÇIK
item.product_id = p.id
GROUP BY item.product_id SİPARİŞ tamount DESC

Bu, ürün adını toplam satış tutarı ile gösteren güzel bir iki sütun görünümü ile sonuçlanır ve beklendiği gibi çalışır. Sorgu, orders_items tablosundaki tüm ürünleri gözden geçirdi, onları ürünler tablosundaki kayıtlarla birleştirdi ve her birinin toplam satış miktarını döndürdü.

RIGHT Katılıyor

Yukarıdaki örneği kullanarak, veritabanında toplam 22 ürün varken, yukarıdaki sorgunun yalnızca 19 kayıt döndürdüğü gerçeğine dikkat edin. Bunun nedeni, sorgunun orders_items tablosuyla başlaması ve bunu ürünler tablosuna birleştirmesi ve bazı ürünler daha önce hiç sipariş edilmediğinden, siparişler_items içinde bu ürünlerin kaydı bulunmamaktadır. tablo.

Sipariş edilmemiş ürünler de dahil olmak üzere satış miktarı olan tüm ürünlerin bir listesini almak isterseniz ne olur? Aşağıdaki sorgu ile doğru bir birleştirmeyi deneyin:


SEÇ
p.name, sum (item.amount) AS tamount
FROM
siparişler_items öğe SAĞ JOIN ürünler p
AÇIK
item.product_id = p.id
GRUP BY p.id SİPARİŞ tamount DESC

Bu daha iyi ve sorgu artık 22 ürünün tamamını döndürüyor ve bunların üçünde bir miktar var boş. Bunun nedeni, ürünler tablosuna katılan birincil tablo olarak order_items kullanmak yerine, doğru birleşimin siparişi çevirmesi ve ürünler tablosunu siparişler_items tablosuna katmasıdır.

Bir Sorguda Birden Fazla Birleştirme

Bazen belirli bir sonuç kümesi elde etmek için üç veya daha fazla tabloyu bir araya getirme ihtiyacı duyarsınız.

Örneğin, mikrodalgayı (ürün kimliği # 1) satın alan tüm müşterilerin adları ve sipariş tarihleriyle birlikte bir listesini isteyebilirsiniz. Bu, aşağıdaki sorgu ile iki birleştirme kullanılarak yapılabilen üç tabloda bir SELECT gerektirir:


SEÇ
c.first_name, c.last_name, o.amount, o.created_at
FROM
müşteriler c INNER JOIN siparişleri o
AÇIK
c.id = o.customer_id INNER JOIN orders_items öğesi
AÇIK
item.order_id = o.id
NEREDE
item.product_id = 1 SİPARİŞ O.created_at;

Bu sorgu, mikrodalga fırının tüm 426 siparişini döndürür ve beklendiği gibi çalışır. Önce tüm müşterileri kendi siparişleriyle eşleştirir, ardından sonucu belirleyen diğer sorgular tüm siparişleri yalnızca mikrodalga ürünü (kimlik no. 1).

IN Maddeli Alt Sorguları Asla Kullanmayın

Hızlı bir yan not olarak, ne pahasına olursa olsun, SQL sorgularınızda aşağıdaki gibi alt sorguları kullanmaktan her zaman kaçınmalısınız:

ID IN NEREDEN müşterilerden ilk_adı, son_adı SEÇİN (durum = 'onaylandı' VE tutar <100 NEREDE siparişlerden müşteri_kimliğini SEÇİN);

Yukarıdaki gibi sorgular çok verimsizdir, çok sayıda kaynak kullanır ve mümkün olduğunca kaçınılmalıdır. Bunun yerine, yukarıdaki bölümlerde belirtildiği gibi uygun birleştirme kullanın. Örneğin, yukarıdaki sorgu şu şekilde yeniden yazılmalıdır:

C.first_name, c.last_name SEÇİN müşterilerden c LEFT JOIN siparişleri o AÇIK o.customer_id = c.id NEREDE o.status = 'onaylandı' VE o.amount <100;

SQL Birleştirmeleriyle Zaman Kazanın

Bu makale umarım size MySQL gibi ilişkisel veritabanlarının gücünü ve nasıl kurulacağını göstermeye yardımcı olur. SQL sorguları Bu, birleştirmeleri kullanarak tek bir sorgu içindeki birden çok tablodan kayıtlar alarak istenen sonuçları tam olarak almanızı sağlar.

SQL'de üç farklı birleştirme, sütun ve tablo adlarının nasıl değiştirileceğini, bir sorguda birden çok birleşmenin nasıl kullanılacağını ve neden alt sorgulardan kaçınmanız gerektiğini öğrendiniz. Bir daha asla farklı veri setlerini manuel olarak tek bir veri setinde derlemeye çalışmayın ve iş arkadaşlarınızı etkilemek ve zamandan tasarruf etmek için birleştirmeleri kullanmaya başlayın.

E-posta adresi
Güzel Google Dokümanları Oluşturmanın 10 Düzgün Yolu

Google Dokümanlar artık bir ofis merkezidir. Bu eklentilerin yardımıyla Google Dokümanlarınızın güzel ve şık görünmesini sağlayabilirsiniz.

İlgili konular
  • Programlama
  • SQL
  • veri tabanı
Yazar hakkında
Matt Dizak (13 Makale Yayınlandı)Matt Dizak'dan Daha Fazla

Haber bültenimize abone ol

Teknoloji ipuçları, incelemeler, ücretsiz e-kitaplar ve özel fırsatlar için haber bültenimize katılın!

Bir adım daha…!

Lütfen size az önce gönderdiğimiz e-postadaki e-posta adresinizi onaylayın.

.