Kotlin
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.
Örnek çözümü göster
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")
}
}
Kendini test et
-
innerJoin çağrısını tamamla
Users.____(Orders).select { Orders.userId eq Users.id }
Cevabı göster
Users.innerJoin(Orders).select { Orders.userId eq Users.id }
-
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
- Hiçbir fark yoktur
Cevabı göster
leftJoin sol tablodaki tüm kayıtları getirir — leftJoin sol tablodaki tüm kayıtları getirir.
-
Join parçalarını eşle
- innerJoin
- Eşleşen kayıt
- leftJoin
- Sol tablo
- select
- Koşul
- .forEach
- Satır gezme
Sıradaki ders: Özet - Exposed SQL