Seçme
from, where, fields, order, limit ve offset.
Bir sorgu from ile başlar ve adımlar . ile zincirlenir. ; ifadeyi bitirir. Bir betikte birden fazla ifade olabilir; F5 hepsini sırayla çalıştırır ve ilk hatada durur.
from('uyeler', 'u')
.where({'u.age': {gte: 30}})
.fields('u.name', 'u.surname', 'u.age')
.order({'u.age': 'desc', 'u.name': 'asc'})
.limit(10)
.offset(0)
.get();from'un ikinci argümanı bir takma addır ('u'). Alan adları 'u.name', 'uyeler.name' ya da yalnızca 'name' olarak yazılabilir. .get() isteğe bağlıdır; seçme sorgusu onsuz da sonuç döndürür.
fields#
| Yazım | Sonuç |
|---|---|
fields yok ya da fields('*') | Bütün alanlar, şemadaki sırayla |
fields('name', 'age') | Yalnızca bu alanlar, bu sırayla |
fields({'u.name', 'u.age'}) | Aynı; liste süslü parantezle de yazılabilir |
fields('*', CAST('name', 'ad')) | Bütün alanlar, ardından ek sütunlar |
from('uyeler').fields({'name', CAST('surname', 'soyad'), FORMAT('birth_date', 'dd-mm-yyyy')});Fonksiyonlar: Fonksiyonlar.
where#
Bir nesnedeki bütün koşullar birlikte (VE) sağlanmalıdır.
from('uyeler').where({'age': 31, 'gender': 1}).fields('name');| Operatör | Anlamı |
|---|---|
{'age': 31} | eşit |
{'age': {ne: 31}} | eşit değil |
{'age': {gt: 30}} · gte · lt · lte | büyük, büyük-eşit, küçük, küçük-eşit |
{'name': {in: ['Ayşe', 'Osman']}} | listedekilerden biri |
{'password': null} | boş (null) olanlar |
{'password': {ne: null}} | dolu olanlar |
Aynı alana birden fazla operatör yazılabilir:
from('uyeler').where({'age': {gte: 30, lt: 40}}).fields('name', 'age');Değerler alanın türüne çevrilir. Bir date alanı alanın kendi biçimiyle ya da ISO 8601 ile aranabilir:
from('uyeler').where({'birth_date': '23.09.1981'}).fields('name');
from('uyeler').where({'birth_date': {gte: '1990-01-01'}}).fields('name');Tırnaksız bir metin bir değer değil, bir addır:
# hata: 'Osman' is a name, not a value; put text in quotes: 'Osman'
from('uyeler').where({'name': Osman});order, limit, offset#
from('uyeler').order({'age': 'asc', 'name': 'desc'}).limit(2).offset(1).fields('name', 'age');null değerler sıralamada en başa gelir. decimal alanlar metin olarak saklansa da sayı olarak sıralanır.
Nasıl okunur#
where içinde birincil anahtar ya da indeksli bir alan eşitlikle aranırsa NarDB yalnızca o satırları okur. Diğer bütün koşullar tablonun taranmasıyla değerlendirilir. Sıralama ve limit şu an bellekte yapılır; çok büyük tablolarda limit taramayı kısaltmaz.
Parametreler#
Go API'sinde değerler $1, $2 ile ayrı gönderilir; sorgu metnine gömülmez:
res, err := db.Exec(ctx, `from('uyeler').where({'email': $1}).fields('name');`, email)