CodeBlanks Logo Icon CodeBlanks

Join

join ile tablo birleştirme öğrenirsin.

Join işlemi

Bir join, iki tablodaki ilgili kayıtları birleştirir. Exposed, innerJoin, leftJoin gibi seçenekler sunar.

Örnek: Users.innerJoin(Orders).select { Orders.userId eq Users.id }. Bu çağrı her kullanıcı ile siparişlerini birleştirir. innerJoin eşleşen kayıtları, leftJoin sol tablodaki tüm kayıtları getirir. Koşul select { ... } bloğunda yazılır. Birleşmiş sonucu gezmek için .forEach { row -> ... } kullanılır. Tablolar arası yabancı anahtar ilişkisi join için yeterlidir.

Join ile veri okuma

Bir join sorgusunun sonucu bir Query'dir. .forEach ile her satırı gezer, row[Users.name] ve row[Orders.id] ile alanları okursun.

Örnek: Users.innerJoin(Orders).select { Orders.userId eq Users.id }.forEach { row -> println("${row[Users.name]} - ${row[Orders.id]}") }. Bu satır her kullanıcı ve sipariş çiftini yazdırır. Eşleşmeyen kayıtlar innerJoin'de atlanır. Sonuçları filtrelemek için .where { ... } kullanılır. Join, ilişkisel veritabanlarının güçlü yanıdır; birden fazla tabloda dağılan veriyi tek bir sorguda toplar.

Uygulama Join ile iki tabloyu birleştir

object Users : Table() ve object Orders : Table() tanımla. Users içinde val id = integer("id") ve val name = varchar("name", 50); Orders içinde val id = integer("id") ve val userId = integer("user_id") olsun. main içinde Database.connect aç, transaction bloğunda Users.innerJoin(Orders).select { Orders.userId eq Users.id } çağır, ardından println("Join hazır") yazdır.

Başlangıç kodu

Main.kt
// Join
// buraya yaz
import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.transactions.transaction

fun main() {
    
}

Örnek çözüm

Main.kt
object Users : Table() {
    val id = integer("id")
    val name = varchar("name", 50)
}

object Orders : Table() {
    val id = integer("id")
    val userId = integer("user_id")
}

fun main() {
    Database.connect("jdbc:h2:mem:test", driver = "org.h2.Driver")
    transaction {
        Users.innerJoin(Orders).select { Orders.userId eq Users.id }
        println("Join hazır")
    }
}

Beklenen çıktı

Join hazır

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 innerJoin çağrısını tamamla

Soru
Users.____(Orders).select { Orders.userId eq Users.id }
Cevap
Users.innerJoin(Orders).select { Orders.userId eq Users.id }

Açıklama: innerJoin ile iki tablo birleştirilir.

2 leftJoin ile innerJoin arasındaki fark nedir?

  • leftJoin daha hızlıdır
  • innerJoin sadece sol tabloya bakar
  • leftJoin sol tablodaki tüm kayıtları getirir Doğru cevap
  • Hiçbir fark yoktur

Açıklama: leftJoin sol tablodaki tüm kayıtları getirir.

3 Join parçalarını eşle

Kavram Anlamı
innerJoin Eşleşen kayıt
leftJoin Sol tablo
select Koşul
.forEach Satır gezme

İleri seviye bölümündeki tüm dersler