İçeriğe geç
NarDBv0.2.0-dev

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.

NarQL
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ımSonuç
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
NarQL
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.

NarQL
from('uyeler').where({'age': 31, 'gender': 1}).fields('name');
OperatörAnlamı
{'age': 31}eşit
{'age': {ne: 31}}eşit değil
{'age': {gt: 30}} · gte · lt · ltebü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:

NarQL
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:

NarQL
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:

NarQL
# hata: 'Osman' is a name, not a value; put text in quotes: 'Osman'
from('uyeler').where({'name': Osman});

order, limit, offset#

NarQL
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:

Go
res, err := db.Exec(ctx, `from('uyeler').where({'email': $1}).fields('name');`, email)