Desteklenen SQL söz dizimi

Aşağıda listelenen SQL söz dizimleri Adobe AIR SQL veritabanı motoru tarafından desteklenmektedir. Listeler, farklı ifade ve deyim türlerinin, ifadelerin, yerleşik işlevlerin ve operatörlerin açıklamalarına bölünmüştür. Şu başlıklar işlenmektedir:
  • Genel SQL söz dizimi

  • Veri işleme ifadeleri (SELECT, INSERT, UPDATE, and DELETE)

  • Veri tanımı ifadeleri (tablolar, görünümler, dizinler ve tetikleyiciler için CREATE, ALTER ve DROP ifadeleri)

  • Özel ifadeler ve deyimler

  • Yerleşik işlevler (Toplama, ölçekleme ve tarih/saat biçimlendirme işlevleri)

  • Operatörler

  • Parametreler

  • Desteklenmeyen SQL özellikleri

  • Ek SQL özellikleri

Genel SQL söz dizimi

Çeşitli deyimler ve ifadeler için belirli sözdizimine ek olarak, aşağıda SQL sözdizimi için genel kuralları bulabilirsiniz:
Büyük/küçük harf duyarlılığı
Nesne adları da dahil olmak üzere SQL ifadeleri, büyük küçük harf duyarlı değildir. Yine de, SQL ifadeleri genellikle, büyük harfle yazılan SQL anahtar sözcükleri ile yazılır ve bu belge bu kuralı kullanır. SQL söz dizimi büyük/küçük harf duyarlı değilken, SQL'deki değişmez metin değerleri büyük/küçük harf duyarlıdır; bir sütun veya işlem için tanımlanan harmanlama sırası tarafından belirlendiği şekilde karşılaştırma ve sıralama işlemleri de büyük/küçük harf duyarlı olabilir. Daha fazla bilgi için COLLATE ifadesine bakın.

Beyaz boşluk
SQL ifadesinde ayrı sözcükleri birbirinden ayırmak için bir beyaz boşluk karakterinin (boşluk, sekme, yeni satır vb.) kullanılması gerekir. Ancak, sözcükler ve semboller arasındaki beyaz boşluk isteğe bağlıdır. SQL ifadesindeki beyaz boşluk karakterlerinin türü ve sayısı bir öneme sahip değildir. İfadenin anlamını etkilemeden, daha kolay okunabilmeleri için SQL ifadelerinizi biçimlendirmede girinti ve satır kesmeleri gibi beyaz boşluklar kullanabilirsiniz.

Veri işleme ifadeleri

Veri işleme ifadeleri en yaygın kullanılan SQL ifadeleridir. Bu ifadeler, veritabanı tablolarına veri eklemek, tablolardan veri almak, değiştirmek ve kaldırmak için kullanılır. Şu veri işleme ifadeleri desteklenmektedir: SELECT, INSERT, UPDATE ve DELETE.

SELECT

SELECT ifadesi veritabanında sorgu yürütmek için kullanılır. SELECT ifadesinin sonucu sıfır veya her satırın sabit sayıda sütuna sahip olduğu daha fazla veri satırıdır. Sonuçtaki sütun sayısı, sonuç sütun adı veya SELECT ve isteğe bağlı FROM anahtar sözcükleri arasındaki ifade listesi tarafından belirlenir.

sql-statement   ::=  SELECT [ALL | DISTINCT] result 
                     [FROM table-list] 
                     [WHERE expr] 
                     [GROUP BY expr-list] 
                     [HAVING expr] 
                     [compound-op select-statement]* 
                     [ORDER BY sort-expr-list] 
                     [LIMIT integer [( OFFSET | , ) integer]] 
result          ::=  result-column [, result-column]* 
result-column   ::=  * | table-name . * | expr [[AS] string] 
table-list      ::=  table [ join-op table join-args ]* 
table           ::=  table-name [AS alias] | 
                     ( select ) [AS alias] 
join-op         ::=  , | [NATURAL] [LEFT | RIGHT | FULL] [OUTER | INNER | CROSS] JOIN 
join-args       ::=  [ON expr] [USING ( id-list )] 
compound-op     ::=  UNION | UNION ALL | INTERSECT | EXCEPT 
sort-expr-list  ::=  expr [sort-order] [, expr [sort-order]]* 
sort-order      ::=  [COLLATE collation-name] [ASC | DESC] 
collation-name  ::=  BINARY | NOCASE

Sonuç olarak rastgele bir ifade kullanılabilir. Sonuç ifadesi * ise, tüm tabloların tüm sütunları bu tek ifade için değiştirilir. İfade, ardından* gelen bir tablo adıysa, sonuç bu tek tablodaki tüm sütunlar olur.

DISTINCT anahtar sözcüğü, her sonuç satırının farklı olduğu sonuç satırlarının bir alt kümesinin döndürülmesine neden olur. NULL değerleri birbirinden farklı olarak işlenmez. Varsayılan davranış şekli, tüm sonuç satırlarının döndürülmesidir ve bu da ALL anahtar sözcüğüyle belirgin hale getirilebilir.

Sorgu, FROM anahtar sözcüğünden sonra belirtilen bir veya birden fazla tabloda çalıştırılır. Birden fazla tablo adı virgülle ayrılırsa, sorgu birden çok tablonun çapraz birleştirmesini kullanır. JOIN sözdizimi, tabloların nasıl birleştirileceğini belirlemek için de kullanılabilir. Desteklenen tek dış birleştirme tipi LEFT OUTER JOIN'dir. join-args içindeki ON deyim ifadesi bir boolean değerine çözümlenmelidir. Parantez içindeki bir alt sorgu FROM deyiminde bir tablo olarak kullanılabilir. FROM deyiminin tamamı atılabilir; bu durumda sonuç, sonuçta elde edilen ifade listesinin değerlerinden oluşan tek bir satır olur.

WHERE deyimi, sorgunun getirdiği satır sayısını sınırlamak için kullanılır. WHERE deyimi ifadeleri bir boolean değerine çözümlenmelidir. WHERE deyimi filtreleme işlemi, herhangi bir gruplama işleminden önce gerçekleştirilir; böylece, WHERE deyimi ifadeleri toplu işlevleri içermeyebilir.

GROUP BY deyimi, sonucun bir veya birden fazla satırının tek bir çıktı satırında birleştirilmesini sağlar. GROUP BY deyimi özellikle, sonuç toplu işlevler içerdiğinde faydalıdır. GROUP BY deyimindeki ifadelerin, SELECT ifade listesinde görülen ifadeler olmasına gerek yoktur.

HAVING deyimi, ifade tarafından döndürülen satırları sınırlandırmada WHERE deyimine benzer. Ancak, HAVING deyimi, GROUP BY deyimi tarafından belirtilen bir gruplamadan sonra uygulanır. Sonuç olarak, HAVING ifadesi toplu işlevleri içeren değerlere başvuru yapabilir. HAVING deyimi ifadesinin, SELECT listesinde görülmesine gerek yoktur. WHERE ifadesi gibi, HAVING ifadesi de bir boolean değerine çözümlenmelidir.

ORDER BY deyimi, çıktı sıralarının sıralanmasını sağlar. ORDER BY deyimindeki sort-expr-list argümanı sıralama için anahtar olarak kullanılan ifadelerin bir listesidir. İfadelerin, basit SELECT deyiminin bir parçası olmasına gerek yoktur; ancak, bileşik bir SELECT deyiminde (compound-op operatörlerinden birini kullanan SELECT deyimi), her sıralama ifadesinin sonuç sütunlarından biriyle tam olarak eşleşmesi gerekir. Her sıralama ifadesinden sonra isteğe bağlı olarak, COLLATE anahtar sözcüğü ve sıralama metni için kullanılan harmanlama işlevinin adını ve/veya sıralama düzenini (artan veya azalan) belirlemek için ASC veya DESC anahtar sözcüklerini içeren sort-order deyimi gelebilir. sort-order deyimi atılabilir ve varsayılan (artan düzen) kullanılabilir. COLLATE deyiminin ve harmanlama işlevlerinin tanımı için bkz. COLLATE.

LIMIT deyimi, sonuçta döndürülen satır sayısına bir üst sınır koyar. Eksi LIMIT üst sınır olmadığını gösterir. LIMIT deyiminden sonra gelen isteğe bağlı OFFSET anahtar sözcüğü, sonuç kümesinin başında kaç satırın atlanacağını belirler. Bileşik SELECT sorgusunda, LIMIT deyimi yalnızca son SELECT ifadesinden sonra gelebilir ve sınırlama tüm sorguya uygulanır. LIMIT deyiminde OFFSET anahtar sözcüğü kullanılırsa, sınırın ilk tam sayı olduğuna ve uzaklığın ikinci tam sayı olduğuna dikkat edin. OFFSET anahtar sözcüğü yerine virgül kullanılırsa, uzaklık ilk sayı ve sınır ise ikinci sayı olur. Ortaya çıkan bu çelişki kasıtlıdır. Eski SQL veritabanı sistemleriyle uyumluluğu artırır.

Bileşik SELECT deyimi, bir veya birden fazla UNION, UNION ALL, INTERSECT veya EXCEPT operatörü tarafından birbirine bağlanan bir veya birden fazla SELECT ifadesinden oluşur. Bileşik SELECT deyiminde, deyimi oluşturan tüm SELECT ifadelerinin aynı sayıda sonuç sütununu belirtmesi gerekir. Son SELECT ifadesinden sonra (bir adet belirtilmişse, tek LIMIT deyiminden önce) yalnızca bir ORDER BY deyimi olabilir. UNION ve UNION ALL operatörleri, önceki ve sonraki SELECT ifadelerinin sonuçlarını tek bir tabloda birleştirir. Aradaki fark, UNION operatöründe, tüm sonuç satırları birbirinden farklıdır ancak, UNION ALL operatöründe yinelemeler olabilir. INTERSECT operatörü, önceki ve sonraki SELECT ifadelerinin sonuçlarının kesişimini alır. EXCEPT, önceki SELECT ifadesinin sonucunu sonraki SELECT ifadesinin sonuçlarını kaldırarak alır. Üç veya daha fazla SELECT ifadesi bir bileşik ifadede bağlanırsa, ilkinden sonuncuya doğru gruplanırlar.

İzin verilen ifadelerin tanımı için bkz. İfadeler.

AIR 2.5'ten itibaren, BLOB verisini ActionScript ByteArray nesnelerine dönüştürmek için okuma işlemi gerçekleştirilirken SQL CAST operatörü desteklenir. Örneğin, aşağıdaki AMF biçiminde saklanmayan işlenmemiş veri okur ve bunu bir ByteArray nesnesinde saklar:

stmt.text = "SELECT CAST(data AS ByteArray) AS data FROM pictures;"; 
stmt.execute(); 
var result:SQLResult = stmt.getResult(); 
var bytes:ByteArray = result.data[0].data;

INSERT

INSERT ifadesi, iki temel biçimde gelir ve tabloları veriyle doldurmak için kullanılır.
sql-statement  ::=  INSERT [OR conflict-algorithm] INTO [database-name.] table-name [(column-list)] VALUES (value-list) | 
                    INSERT [OR conflict-algorithm] INTO [database-name.] table-name [(column-list)] select-statement 
                    REPLACE INTO [database-name.] table-name [(column-list)] VALUES (value-list) | 
                    REPLACE INTO [database-name.] table-name [(column-list)] select-statement

İlk biçim, (VALUES anahtar sözcüğüyle) varolan tabloda tek bir yeni satır oluşturur. Hiçbir sütun listesi belirtilmezse, değer sayısının tablodaki sütun sayısıyla aynı olması gerekir. Bir sütun listesi belirtilirse, değer sayısının belirtilen sütun sayısıyla eşleşmesi gerekir. Sütun listesinde görülmeyen tablo sütunları tablo oluşturulduğunda tanımlanan varsayılan değerle veya hiçbir değer tanımlanmamışsa NULL değeriyle doldurulur.

İkinci INSERT ifadesi biçimi, verilerini SELECT ifadesinden alır. SELECT ifadesinin sonucundaki sütun sayısının column-list belirtilmemişse tablodaki sütun sayısıyla tam olarak eşleşmesi veya column-list altında belirtilen sütun sayısıyla eşleşmesi gerekir. SELECT sonucunun her satırı için tabloda yeni bir giriş oluşturulur. SELECT ifadesi basit veya bileşik olabilir. İzin verilen SELECT ifadelerinin tanımı için bkz. SELECT.

İsteğe bağlı çakışma algoritması, bu tek komut sırasında kullanılacak alternatif sınırlama çakışması çözümü algoritmasının belirtilmesine olanak tanır. Çakışma algoritmalarının açıklaması ve tanımlaması için bkz. Özel ifadeler ve deyimler .

İfadenin iki REPLACE INTO biçimi, standart INSERT [OR çakışma algoritması] biçiminin REPLACE çakışma algoritmasıyla (örneğin, INSERT OR REPLACE... biçimi) kullanımına benzer.

İfadenin iki REPLACE INTO biçimi, standart INSERT [OR çakışma algoritması] biçiminin REPLACE çakışma algoritmasıyla (örneğin, INSERT OR REPLACE... biçimi) kullanımına benzer.

UPDATE

Güncelle komutu bir tabloda bulunan kayıtları değiştirir.

sql-statement  ::=  UPDATE [database-name.] table-name SET column1=value1, column2=value2,... [WHERE expr]

Komut UPDATE anahtar sözcüğünden ve bunu takip eden kayıtları güncellemek istediğiniz tablonun adından oluşur. SET anahtar sözcüğünden sonra, sütunun adını ve virgülle ayrılmış liste olarak sütunun değiştirileceği değeri sağlayın. WHERE deyimi ifadesi kayıtların güncellendiği satırı veya satırları sağlar.

DELETE

Sil komutu bir tablodan kayıtları kaldırmak için kullanılır.
sql-statement  ::=  DELETE FROM [database-name.] table-name [WHERE expr]

Komut, DELETE FROM anahtar sözcükleri ile bunları takip eden kayıtların kaldırılacağı tablonun adından oluşur.

WHERE deyimi olmadan, tablonun tüm satırları kaldırılır. WHERE deyimi varsa, yalnızca ifadeyle eşleşen satırlar kaldırılır. WHERE deyimi ifadesi bir boolean değerine çözümlenmelidir. İzin verilen ifadelerin tanımı için bkz. İfadeler.

Veri tanımı ifadeleri

Veri tanımı ifadeleri; tablolar, görünümler, dizinler ve tetikleyiciler gibi veritabanı nesnelerini oluşturmak, değiştirmek ve kaldırmak için kullanılır. Aşağıdaki veri tanımı ifadeleri desteklenir:
  • Tablolar:
    • CREATE TABLE

    • ALTER TABLE

    • DROP TABLE

  • Dizinler:
    • CREATE INDEX

    • DROP INDEX

  • Görünümler:
    • CREATE VIEWS

    • DROP VIEWS

  • Tetikleyiciler:
    • CREATE TRIGGERS

    • DROP TRIGGERS

CREATE TABLE

CREATE TABLE ifadesi, CREATE TABLE anahtar sözcüklerini izleyen yeni tablonun adı ile (parantez içinde) sütun tanımları ve sınırlamaları listesinden oluşur. Tablo adı bir tanımlayıcı veya bir dize olabilir.
sql-statement       ::=  CREATE [TEMP | TEMPORARY] TABLE [IF NOT EXISTS] [database-name.] table-name 
                         ( column-def [, column-def]* [, constraint]* ) 
sql-statement       ::=  CREATE [TEMP | TEMPORARY] TABLE [database-name.] table-name AS select-statement 
column-def          ::=  name [type] [[CONSTRAINT name] column-constraint]* 
type                ::=  typename | typename ( number ) | typename ( number , number ) 
column-constraint   ::=  NOT NULL [ conflict-clause ] | 
                         PRIMARY KEY [sort-order] [ conflict-clause ] [AUTOINCREMENT] | 
                         UNIQUE [conflict-clause] | 
                         CHECK ( expr ) | 
                         DEFAULT default-value | 
                         COLLATE collation-name 
constraint          ::=  PRIMARY KEY ( column-list ) [conflict-clause] | 
                         UNIQUE ( column-list ) [conflict-clause] | 
                         CHECK ( expr ) 
conflict-clause     ::=  ON CONFLICT conflict-algorithm 
conflict-algorithm  ::=  ROLLBACK | ABORT | FAIL | IGNORE | REPLACE 
default-value       ::=  NULL | string | number | CURRENT_TIME | CURRENT_DATE | CURRENT_TIMESTAMP 
sort-order          ::=  ASC | DESC 
collation-name      ::=  BINARY | NOCASE 
column-list         ::=  column-name [, column-name]*

Her sütun tanımı, sütun adını izleyen bu sütunun veri türü ve bir veya birden fazla isteğe bağlı sütun sınırlamasından oluşur. Sütunun veri türü bu sütunda hangi verilerin saklanabileceğini sınırlandırır. Bir sütunda, farklı veri türünde bir değer saklanmaya çalışılması durumunda, çalışma zamanı, mümkünse değeri uygun türe dönüştürür veya bir hata döndürür. Ek bilgi için Veri türü desteği bölümüne bakın.

NOT NULL sütun sınırlaması, sütunun NULL değerleri içeremeyeceğini gösterir.

UNIQUE sınırlaması, belirtilen sütun veya sütunlarda bir dizinin oluşturulmasını sağlar. Bu dizin benzersiz anahtarlar içermelidir. İki satır, yinelenen değerleri veya belirtilen sütun veya sütunların değerler birleşimini içeremez. CREATE TABLE ifadesi, sütunun tanımındaki UNIQUE sınırlaması da dahil olmak üzere birden fazla UNIQUE sınırlaması ve/veya çoklu tablo düzeyindeki UNIQUE sınırlamaları içerebilir.

CHECK sınırlaması, değerlendirilen bir ifadeyi tanımlar ve bir satırın verilerinin eklenmesi veya güncellenmesi için true değerinde olmalıdır. CHECK ifadesi bir boolean değerine çözümlenmelidir.

Sütun tanımındaki COLLATE deyimi, sütun için metin girişlerini karşılaştırırken hangi harmanlama işlevinin kullanılacağını tanımlar. Varsayılan olarak BINARY harmanlama işlevi kullanılır. COLLATE deyiminin ve harmanlama işlevlerinin ayrıntıları için bkz. COLLATE.

DEFAULT sınırlaması INSERT ifadesi çalıştırılırken kullanılan varsayılan değeri belirtir. Değer NULL, bir dize sabiti veya bir sayı olabilir. Varsayılan değer CURRENT_TIME, CURRENT_DATE veya CURRENT_TIMESTAMP gibi özel büyük/küçük harften bağımsız anahtar sözcükler de olabilir. Değer NULL, bir dize sabiri veya bir sayı ise INSERT ifadesi sütun için bir değer belirtmediğinde sütuna eklenir. Değer CURRENT_TIME, CURRENT_DATE veya CURRENT_TIMESTAMP ise, geçerli UTC tarihi ve/veya saati sütuna eklenir. CURRENT_TIME için biçim şu şekildedir: SS:DD:SS. CURRENT_DATE için biçim şu şekildedir: YYYY-AA-GG. CURRENT_TIMESTAMP için biçim şu şekildedir: YYYY-AA-GG SS:DD:SS.

Bir PRIMARY KEY belirlenmesi genelde yalnızca ilgili sütun veya sütunlarda bir UNIQUE dizini oluşturur. Ancak, PRIMARY KEY sınırlaması INTEGER veri türündeki (veya int gibi bir eşanlamlı ifade) tek bir sütun üzerindeyse, bu sütun tablo için gerçek ana anahtar olarak dahili şekilde kullanılır. Bu durum, sütunun yalnızca benzersiz tam sayı değerlerini tutabileceği anlamına gelir. (Çoğu SQLite uygulamasında yalnızca sütun türü INTEGER sütunun dahili birincil anahtar olarak işlev yapmasına neden olur, ancak Adobe AIR uygulamasında int gibi INTEGER ile eşanlamlı ifadeler de bu davranışı belirler.)

Bir tabloda INTEGER PRIMARY KEY sütunu yoksa, satır eklendiğinde otomatik olarak bir tam sayı anahtarı oluşturulur. Satır için ana anahtara her zaman, ROWID, OID veya _ROWID_ özel adlarından biri kullanılarak erişilebilir. Bu adlar, açıkça belirtilen bir INTEGER PRIMARY KEY veya dahili şekilde oluşturulan bir değer olup olmadığına bakılmaksızın kullanılabilir. Ancak tabloda açık bir INTEGER PRIMARY KEY varsa, sonuç verilerindeki sütunun adı özel ad yerine gerçek sütun adı olur.

INTEGER PRIMARY KEY sütunu, AUTOINCREMENT anahtar sözcüğünü de içerebilir. AUTOINCREMENT anahtar sözcüğü kullanıldığında, veritabanı ardışık olarak artırılan bir tam sayı anahtarını otomatik olarak oluşturur ve sütun için tam değer belirtmeyen bir INSERT ifadesi çalıştırılırken INTEGER PRIMARY KEY sütununa bu anahtarı ekler.

Bir CREATE TABLE ifadesinde yalnızca bir PRIMARY KEY sınırlaması olabilir. Bu ifade, bir sütun tanımının veya tek tablo düzeyindeki PRIMARY KEY sınırlamasının bir parçası olabilir. Bir ana anahtar sütunu üstü kapalı bir şekilsw NOT NULL değerine sahiptir.

Birçok sınırlamayı izleyen isteğe bağlı çakışma deyimi, bu sınırlama için alternatif bir varsayılan sınırlama çakışma çözümleme algoritmasının belirlenmesine olanak tanır. Varsayılan, ABORT şeklindedir. Aynı tablodaki farklı sınırlamalar farklı varsayılan çakışma çözümleme algoritmalarına sahip olabilir. INSERT veya UPDATE ifadesi farklı bir çakışma çözümleme algoritması belirtirse, bu algoritma, CREATE TABLE ifadesinde belirtilen algoritmanın yerine kullanılır. Daha fazla bilgi için Özel ifadeler ve deyimler kısmının ON CONFLICT bölümüne bakın.

FOREIGN KEY sınırlamaları gibi ek sınırlamalar, bir hataya yol açmaz, ancak çalışma zamanı bunları yok sayar.

TEMP veya TEMPORARY anahtar sözcüğü CREATE ve TABLE deyimlerinin arasına gelirse, oluşturulan tablo yalnızca aynı veritabanı bağlantısı içinde görünür (SQLConnection örneği). Veritabanı bağlantısı kapatıldığında otomatik olarak silinir. Geçici tabloda oluşturulan dizinler de geçicidir. Geçici tablolar ve dizinler ana veritabanı dosyasından farklı ayrı bir dosyada saklanır.

İsteğe bağlı database-name öneki belirtilirse, tablo adlı veritabanında oluşturulur (attach() yöntemini belirtilen veritabanı adıyla çağırarak SQLConnection örneğine bağlanan bir veritabanı). database-name öneki temp değilse, hem veritabanı adı önekinin hem de TEMP anahtar sözcüğünün belirtilmesi bir hatadır. Hiçbir veritabanı adı belirtilmezse ve TEMP anahtar sözcüğü yoksa, tablo ana veritabanında oluşturulur (SQLConnection örneğine open() veya openAsync() yöntemini kullanarak bağlanmış olan veritabanı).

Sütun sayısı veya tablodaki sınırlama sayısı üzerinde hiçbir rastgele sınır yoktur. Bir satırdaki veri miktarı üzerinde de hiçbir rastgele sınır yoktur.

CREATE TABLE AS biçimi, sonuç kümesinin sonucu olarak tabloyu tanımlar. Tablo sütunlarının adı, sonuçtaki sütunların adlarıdır.

İsteğe bağlı IF NOT EXISTS deyimi varsa ve aynı adı taşıyan başka bir tablo önceden varsa, veritabanı CREATE TABLE komutunu yok sayar.

Bir tablo DROP TABLE ifadesi kullanılarak kaldırılabilir ve ALTER TABLE ifadesi kullanılarak sınırlı değişiklikler yapılabilir.

ALTER TABLE

ALTER TABLE komutu kullanıcının varolan bir tabloyu yeniden adlandırmasını veya yeni bir sütun eklemesini sağlar. Bir tablodan sütun kaldırılamaz.

sql-statement ::= ALTER TABLE [database-name.] table-name alteration 
alteration    ::= RENAME TO new-table-name 
alteration    ::= ADD [COLUMN] column-def

RENAME TO sözdizimi, [database-name.] table-name tarafından tanımlanan tabloyu new-table-name olarak yeniden adlandırmak için kullanılır. Bu komut, bağlı veritabanları arasında bir tabloyu taşımak için kullanılmaz; yalnızca aynı veritabanındaki bir tabloyu yeniden adlandırmak için kullanılır.

Yeniden adlandırılan tabloda tetikleyiciler ve dizinler varsa, yeniden adlandırıldıktan sonra tabloya ekli kalmaya devam ederler. Ancak, yeniden adlandırılan tabloya başvuruda bulunan görünüm tanımları veya tetikleyiciler tarafından çalıştırılan ifadeler varsa, yeni tablo adını kullanmak üzere otomatik olarak değiştirilmezler. Yeniden adlandırılan tabloda ilişkilendirilmiş görünümler veya tetikleyiciler varsa, yeni tablo adını kullanarak tetikleyicileri veya görünüm tanımlarını el ile bırakıp yeniden oluşturmanız gerekir.

ADD [COLUMN] sözdizimi, varolan bir tabloya yeni bir sütun eklemek için kullanılır. Yeni sütun her zaman varolan sütunlar listesinin sonuna eklenir. column-def deyimi aşağıdaki sınırlamalarla birlikte bir CREATE TABLE ifadesinde her biçimi alabilir:

  • Sütun PRIMARY KEY veya UNIQUE sınırlamasına sahip olamaz.

  • Sütun, CURRENT_TIME, CURRENT_DATE veya CURRENT_TIMESTAMP varsayılan değerine sahip olamaz.

  • NOT NULL sınırlaması belirtilirse, sütunun NULL değeri dışında bir varsayılan değere sahip olması gerekir.

ALTER TABLE ifadesinin çalışma zamanı tablodaki veri miktarından etkilenmez.

DROP TABLE

DROP TABLE ifadesi, CREATE TABLE ifadesiyle eklenen bir tabloyu kaldırır. Belirtilen table-name deyimine sahip bir tablo, bırakılan tablodur. Veritabanından ve disk dosyasından tamamıyla kaldırılır. Tablo kurtarılamaz. Tablo ile ilişkilendirilen tüm dizinler de silinir.
sql-statement  ::=  DROP TABLE [IF EXISTS] [database-name.] table-name

Varsayılan olarak, DROP TABLE ifadesi veritabanı dosyasının boyutunu azaltmaz. Veritabanındaki boş alan tutulur ve sonraki INSERT işlemlerinde kullanılır. Veritabanındaki boş alanı temizlemek için SQLConnection.clean() yöntemini kullanın. Veritabanı ilk oluşturulduğunda, autoClean parametresi true olarak ayarlanırsa, alan otomatik olarak boşaltılır.

İsteğe bağlı IF EXISTS deyimi, tablo yoksa ortaya çıkacak olan hatayı bastırır.

CREATE INDEX

CREATE INDEX komutu, CREATE INDEX anahtar sözcüklerinden sonra gelen yeni dizinin adı, ON anahtar sözcüğü, dizine alınacak daha önce oluşturumuş tablonun adı, dizin anahtarı için değerleri kullanılacak tablodaki sütun adlarının parantezli listesinden oluşur.

sql-statement  ::=  CREATE [UNIQUE] INDEX [IF NOT EXISTS] [database-name.] index-name 
                    ON table-name ( column-name [, column-name]* ) 
column-name    ::=  name [COLLATE collation-name] [ASC | DESC]

Her sütun adından sonra, sıralama düzenini göstermek için ASC veya DESC anahtar sözcükleri gelebilir; ancak, sıralama düzeni ataması çalışma zamanı tarafından yok sayılır. Sıralama her zaman artan düzende yapılır.

Her sütun adından sonra gelen COLLATE deyimi, bu sütundaki metin değerleri için kullanılan harmanlama dizisini tanımlar. Varsayılan harmanlama sırası, CREATE TABLE ifadesinde bu sütun için tanımlanan harmanlama sırasıdır. Hiçbir harmanlama sırası belirtilmezse, BINARY harmanlama sırası kullanılır. COLLATE deyiminin ve harmanlama işlevlerinin tanımı için bkz. COLLATE.

Tek bir tabloya eklenebilecek dizin sayısı üzerinde hiçbir rastgele sınır yoktur. Bir dizindeki sütun sayısı üzerinde de hiçbir sınır yoktur.

DROP INDEX

DROP INDEX ifadesi, CREATE INDEX ifadesi ile eklenen bir dizini kaldırır. Belirtilen dizin, veritabanı dosyasından tamamıyla kaldırılır. Dizini kurtarmanın tek yolu, uygun CREATE INDEX komutunun yeniden girilmesidir.

sql-statement ::= DROP INDEX [IF EXISTS] [database-name.] index-name

Varsayılan olarak, DROP INDEX ifadesi veritabanı dosyasının boyutunu azaltmaz. Veritabanındaki boş alan tutulur ve sonraki INSERT işlemlerinde kullanılır. Veritabanındaki boş alanı temizlemek için SQLConnection.clean() yöntemini kullanın. Veritabanı ilk oluşturulduğunda, autoClean parametresi true olarak ayarlanırsa, alan otomatik olarak boşaltılır.

CREATE VIEW

CREATE VIEW komutu önceden tanımlı SELECT ifadesine bir ad atar. Bu yeni ad daha sonra, bir tablo adı yerine başka bir SELECT ifadesinin FROM deyiminde kullanılabilir. Görünümler genellikle, karmaşık bir (ve sık kullanılan) veri kümesini diğer işlemlerde kullanılabilecek bir yapıda birleştirerek sorguları kolaylaştırmak için kullanılır.

sql-statement ::= CREATE [TEMP | TEMPORARY] VIEW [IF NOT EXISTS] [database-name.] view-name AS select-statement

TEMP veya TEMPORARY anahtar sözcüğü CREATE ve VIEW deyimi arasında bulunursa, oluşturulan görünüm yalnızca, veritabanını açan SQLConnection örneğinde görülür ve veritabanı kapatıldığında otomatik olarak silinir.

Bir [database-name] belirtilirse, görünüm, adlandırılmış veritabanında (Belirtilen name argümanıyla SQLConnection örneğine attach() yöntemi kullanılarak bağlanmış olan veritabanı) oluşturulur. [database-name] öneki temp değilse, hem [database-name] önekinin hem de TEMP anahtar sözcüğünün belirtilmesi bir hatadır. Hiçbir veritabanı adı belirtilmezse ve TEMP anahtar sözcüğü yoksa, görünüm ana veritabanında (SQLConnection örneğine open() veya openAsync() yöntemini kullanarak bağlanmış olan veritabanı) oluşturulur.

Görünümler salt okunurdur. İlişkilendirilmiş türde en az bir tetikleyici (INSTEAD OF DELETE, INSTEAD OF INSERT, INSTEAD OF UPDATE) tanımlanmamışsa bir görünümde, DELETE, INSERT veya UPDATE ifadesi kullanılamaz. Bir görünüm için tetikleyici oluşturmayle ilgili bilgiler için bkz. CREATE TRIGGER.

Bir görünüm, veritabanından DROP VIEW ifadesi kullanılarak kaldırılır.

DROP VIEW

DROP VIEW ifadesi CREATE VIEW ifadesi tarafından oluşturulmuş görünümü kaldırır.

sql-statement ::= DROP VIEW [IF EXISTS] view-name

Belirtilen view-name, bırakılacak görünümün adıdır. Veritabanından kaldırılır; ancak, alttaki tablolardaki hiçbir veri değiştirilmez.

CREATE TRIGGER

CREATE TRIGGER ifadesi, veritabanı şemasına tetikleyiciler eklemek için kullanılır. Tetikleyici, belirtilen veritabanı olayı (database-event) meydana geldiğinde otomatik olarak gerçekleştirilen bir veritabanı işlemidir (trigger-action).

sql-statement   ::=  CREATE [TEMP | TEMPORARY] TRIGGER [IF NOT EXISTS] [database-name.] trigger-name 
                     [BEFORE | AFTER] database-event 
                     ON table-name 
                     trigger-action 
sql-statement   ::=  CREATE [TEMP | TEMPORARY] TRIGGER [IF NOT EXISTS] [database-name.] trigger-name 
                     INSTEAD OF database-event 
                     ON view-name 
                     trigger-action 
database-event  ::=  DELETE | 
                     INSERT | 
                     UPDATE | 
                     UPDATE OF column-list 
trigger-action  ::=  [FOR EACH ROW] [WHEN expr] 
                     BEGIN 
                       trigger-step ; 
                       [ trigger-step ; ]* 
                     END 
trigger-step    ::=  update-statement | 
                     insert-statement | 
                     delete-statement | 
                     select-statement 
column-list     ::=  column-name [, column-name]*

Belirli bir veritabanı tablosunda bir DELETE, INSERT veya UPDATE ifadesi çalıştırıldığında veya bir tablonun bir veya birden fazla sütununda bir UPDATE ifadesi güncellendiğinde gerçekleşecek bir tetikleyici belirlenir. TEMP veya TEMPORARY anahtar sözcüğü kullanılmazsa, tetikleyiciler kalıcıdır. Bu durumda tetikleyici SQLConnection örneğinin ana veritabanı bağlantısı kesildiğinde kaldırılır. Hiçbir zamanlama belirtilmezse (BEFORE veya AFTER), tetikleyici varsayılan olarak BEFORE değerine ayarlanır.

Yalnızca FOR EACH ROW tetikleyicileri desteklenir, bu nedenle FOR EACH ROW metni isteğe bağlıdır. WHEN deyimi ifadesi true olarak değerlendirilirse, trigger-step ifadeleri FOR EACH ROW tetikleyicisi ile, tetikleyiciyi çalıştıran ifade tarafından eklenen, güncellenen veya silinen her veritabanı satırı için çalıştırılır.

WHEN deyimi girilirse, trigger-step olarak belirtilen SQL ifadeleri yalnızca WHEN deyiminin true değerine sahip olduğu satırlar için çalıştırılır. WHEN deyimi girilmezse, SQL ifadeleri tüm satırlarda çalıştırılır.

Tetikleyicinin gövdesinde, (trigger-action deyimi) etkilenen tablonun değişiklik öncesi ve değişiklik sonrası değerleri, OLD ve NEW özel tablo adları kullanılarak kullanılabilir. OLD ve NEW tablolarının yapısı, tetikleyicinin oluşturulduğu tablonun yapısıyla eşleşir. OLD tablosu, tetikleyici ifadesi tarafından değiştirilen veya silinen satırları tetikleyici ifadesinin işlemlerinden önceki durumlarında olacak şekilde içerir. NEW tablosu, tetikleyici ifadesi tarafından değiştirilen veya oluşturulan satırları tetikleyici ifadesinin işlemlerinden sonraki durumlarında olacak şekilde içerir. Hem WHEN deyimi hem de trigger-step ifadeleri NEW.column-name ve OLD.column-name biçiminin başvuruları kullanılarak eklenen, silinen veya güncellenen satırdan değerlere erişebilir; burada, column-name, tetikleyicinin ilişkilendirildiği tablodaki sütunun adıdır. OLD ve NEW tablo başvurularının kullanılabilirliği, tetikleyicinin işlediği database-event türüne bağlıdır:

  • INSERT - NEW başvuruları geçerlidir

  • UPDATE - NEW ve OLD başvuruları geçerlidir

  • DELETE - OLD başvuruları geçerlidir

Belirtilen zamanlama (BEFORE, AFTER veya INSTEAD OF), trigger-step ifadelerinin ilişkilendirilmiş ekleme, değiştirme veya kaldırmaya göre ne zaman çalıştırılacağını belirler. ON CONFLICT deyimi, trigger-step içindeki UPDATE veya INSERT ifadesinin bir parçası olarak belirlenebilir. Ancak, ON CONFLICT deyimi, tetikleyicinin çalışmasına neden olan ifadenin bir parçası olarak belirtilirse, bunun yerine bu çakışma işleme ilkesi kullanılır.

Tablo tetikleyicilerine ek olarak, görünümde bir INSTEAD OF tetikleyicisi oluşturulabilir. Bir görünümde bir veya birden fazla INSTEAD OF INSERT, INSTEAD OF DELETE veya INSTEAD OF UPDATE tetikleyicisi tanımlanırsa, ilişkilendirilmiş tipte ifadenin (INSERT, DELETE veya UPDATE) görünümde çalıştırılması bir hata olarak kabul edilmez. Bu durumda, görünümde bir INSERT, DELETE veya UPDATE ifadesinin çalıştırılması tetikleyicilerin çalışmasına yol açar. Tetikleyici bir INSTEAD OF tetikleyicisi olduğu için, görünümün temelini oluşturan tablolar, tetikleyicinin çalışmasına yol açan ifade tarafından değiştirilmez. Ancak, tetikleyiciler temel tablolarda değiştirme işlemleri yapmak için kullanılabilir.

INTEGER PRIMARY KEY sütunu bulunan bir tabloda bir tetikleyici oluştururken göz önünde bulundurulması gereken önemli bir nokta vardır. Bir BEFORE tetikleyicisi, tetikleyiciyi çalıştıran ifade tarafından güncellenecek satırın INTEGER PRIMARY KEY sütununu değiştirirse, güncelleme gerçekleştirilmez. Buna dolaylı bir çözüm olarak, INTEGER PRIMARY KEY sütunu yerine PRIMARY KEY sütunu olan bir tablo oluşturabilirsiniz.

Tetikleyici DROP TRIGGER ifadesi kullanılarak kaldırılabilir. Bir tablo veya görünüm kaldırıldığında, bu tablo veya görünümle ilişkilendirilmiş tüm tetikleyiciler de otomatik olarak kaldırılır.

RAISE () işlevi

Özel bir RAISE() SQL işlevi, bir tetikleyicinin trigger-step ifadesinde kullanılabilir. Bu işlev aşağıdaki sözdizimine sahiptir:

raise-function  ::=  RAISE ( ABORT, error-message ) | 
                     RAISE ( FAIL, error-message ) | 
                     RAISE ( ROLLBACK, error-message ) | 
                     RAISE ( IGNORE )

Tetikleyicinin çalıştırması sırasında ilk üç biçimden biri çağrıldığında, belirtilen ON CONFLICT işleme eylemi (ABORT, FAIL veya ROLLBACK) gerçekleştirilir ve geçerli ifadenin çalıştırılması sonlandırılır. ROLLBACK bir ifade çalıştırma hatası olarak göz önünde bulundurulur; dolayısıyla execute() yöntemi yürütülen SQLStatement örneği bir error (SQLErrorEvent.ERROR) olayı gönderir. Gönderilen olay nesnesinin error özelliğindeki SQLError nesnesinin details özelliği, RAISE() işlevinde belirtilen error-message değerine ayarlanır.

RAISE(IGNORE) çağrıldığında, geçerli tetikleyicinin geriye kalanı, tetikleyicinin çalıştırılmasına neden olan ifade ve çalıştırılmış olması gereken sonraki tetikleyiciler iptal edilir. Hiçbir veritabanı değişikliği geri alınmaz. Tetikleyicinin çalıştırılmasına neden olan ifadenin kendisi bir tetikleyicinin parçasıysa, bu tetikleyici programı sonraki adımın başından çalışmaya devam eder. Çakışma çözümleme algoritmaları hakkında daha fazla bilgi için ON CONFLICT (çakışma algoritmaları) bölümüne bakın.

DROP TRIGGER

DROP TRIGGER ifadesi, CREATE TRIGGER ifadesi tarafından oluşturulan bir tetikleyiciyi kaldırır.

sql-statement  ::=  DROP TRIGGER [IF EXISTS] [database-name.] trigger-name

Tetikleyici, veritabanından silinir. Tetikleyicilerin, ilişkilendirilmiş tablosu kaldırıldığında otomatik olarak kaldırıldığını göz önünde bulundurun.

Özel ifadeler ve deyimler

Bu bölümde, çalışma zamanı tarafından sunulan SQL'in uzantısı olan çeşitli deyimlerin yanı sıra, birçok ifade ve yorumda kullanılabilecek iki dil öğesine ilişkin açıklamalar bulunur.

COLLATE

COLLATE deyimi, değerleri karşılaştırırken veya sıralarken kullanılan karşılaştırma algoritmasını belirtmek için SELECT, CREATE TABLE ve CREATE INDEX ifadelerinde kullanılır.

sql-statement   ::=  COLLATE collation-name 
collation-name  ::=  BINARY | NOCASE

Sütunlar için varsayılan harmanlama türü: BINARY. BINARY harmanlama TEXT saklama sınıfının değerlerinde kullanıldığında, ikili harmanlama, metin kodlamasına bakılmaksızın değeri gösteren bellekteki baytlar karşılaştırılarak gerçekleştirilir.

NOCASE harmanlama sırası yalnızca TEXT saklama sınıfının değerlerine uygulanır. Kullanıldığında, NOCASE harmanlama sırası, büyük/küçük harf duyarsız bir karşılaştırma yapar.

NULL, BLOB, INTEGER veya REAL türündeki saklama sınıfları için hiçbir harmanlama sırası kullanılmaz.

Bir sütunla BINARY dışında bir harmanlama türü kullanmak için, bir COLLATE deyiminin CREATE TABLE ifadesindeki sütun tanımının bir parçası olarak belirtilmesi gerekir. İki TEXT değeri karşılaştırıldığında, karşılaştırmanın sonuçlarını aşağıdaki kurallara göre belirlemek üzere bir harmanlama sırası kullanılır:

  • İkili karşılaştırma operatörleri için, işlenenlerden biri bir sütunsa, sütunun varsayılan harmanlama türü karşılaştırma için kullanılan harmanlama sırasını belirler. Her iki işlenen de sütunsa, soldaki işlenenin harmanlama türü kullanılan harmanlama sırasını belirler. İşlenenlerden hiçbiri sütun değilse, BINARY harmanlama sırası kullanılır.

  • BETWEEN...AND operatörü, >= ve <= operatörleriyle iki ifade kullanmaya eşdeğerdir. Örneğin, x BETWEEN y AND z ifadesi x >= y AND x <= z ifadesine eşdeğerdir. Sonuç olarak, BETWEEN...AND operatörü, harmanlama sırasını belirlemek için önceki kuralı izler.

  • IN operatörü, kullanılacak harmanlama sırasını belirlemek için = operatörü gibi hareket eder. Örneğin, x IN (y, z) ifadesi için kullanılan harmanlama sırasını, x bir sütunsa, x için varsayılan harmanlama türüdür. Tersi durumda, BINARY harmanlama kullanılır.

  • SELECT ifadesinin bir parçası olan bir ORDER BY deyimi, sıralama işlemi için kullanmak üzere bir harmanlama sırasına açık şekilde atanabilir. Bu durumda, açık harmanlama sırası her zaman kullanılır. Tersi durumda, ORDER BY tarafından sıralanan ifade bir sütunsa, sütunun varsayılan harmanlama türü sıralama düzenini belirlemek için kullanılır. İfade bir sütun değilse, BINARY harmanlama sırası kullanılır.

EXPLAIN

EXPLAIN komutu değiştiricisi, standart olmayan bir SQL uzantısıdır.

sql-statement  ::=  EXPLAIN sql-statement

EXPLAIN anahtar sözcüğü başka bir SQL ifadesinden önce gelirse, sonuç, komutu gerçekte çalıştırmak yerine EXPLAIN anahtar sözcüğü bulunmadığında komutu çalıştırmak için kullandığı sanal makine talimatlarının dizisini bildirir. EXPLAIN özelliği gelişmiş bir özelliktir ve geliştiricilerin performansı iyileştirmeyi denemek veya düzgün çalışmayan bir ifadede hata ayıklama işlemi gerçekleştirmek için SQL ifadesi metnini değiştirmelerini sağlar.

ON CONFLICT (çakışma algoritmaları)

ON CONFLICT deyimi ayrı bir SQL komutu değildir. Diğer birçok SQL komutunda görülebilen standart olmayan bir deyimdir.

conflict-clause     ::=  ON CONFLICT conflict-algorithm 
conflict-clause     ::=  OR conflict-algorithm 
conflict-algorithm  ::=  ROLLBACK | 
                         ABORT | 
                         FAIL | 
                         IGNORE | 
                         REPLACE

ON CONFLICT anahtar sözcüklerini kullanan ON CONFLICT deyiminin ilk biçimi bir CREATE TABLE ifadesine kullanılır. Bir INSERT veya UPDATE ifadesi için ikinci biçim kullanılır. Bu biçimde, söz diziminin daha doğal görünmesi için ON CONFLICT ifadesinin yerini OR ifadesi alır. Örneğin, INSERT ON CONFLICT IGNORE yerine, ifade INSERT OR IGNORE biçimine dönüşür. Anahtar sözcükler farklı olsa da, deyimin anlamı her iki biçimde de aynıdır.

ON CONFLICT deyimi, sınırlama çakışmalarını çözümlemek için kullanılan algoritmaları belirler. Beş algoritma şunlardır: ROLLBACK, ABORT, FAIL, IGNORE ve REPLACE. Varsayılan algoritma ABORT şeklindedir. Aşağıda, beş çakışma algoritmasının açıklaması mevcuttur:

ROLLBACK
Bir sınırlama ihlali ortaya çıktığında, geçerli işlemi sona erdiren bir ROLLBACK hemen devreye girer. Komut iptal edilir ve SQLStatement örneği bir hata olayı gönderir. Hiçbir işlem etkin değilse (her komutta oluşturulan üstü kapalı işlemin dışında), bu algoritma ABORT ile aynı şekilde işler.

ABORT
Bir sınırlama ihlali ortaya çıktığında, komut daha önce yapmış olabileceği değişiklikleri geri alır ve SQLStatement örneği bir hata olayı gönderir. Hiçbir ROLLBACK çalıştırılmaz; dolayısıyla bir işlem içerisindeki önceki komutlardan gelen değişiklikler korunur. ABORT varsayılan davranıştır.

FAIL
Bir sınırlama ihlali ortaya çıktığında, komut iptal edilir ve SQLStatement bir hata olayı gönderir. Ancak, ifadenin sınırlama ihlaliyle karşılaşmadan önce veritabanında yaptığı değişiklikler korunur ve geri alınmaz. Örneğin, bir UPDATE ifadesi, güncellemeye çalıştığı 100. satırda bir sınırlama ihlaliyle karşılaşırsa, ilk 99 satırdaki değişiklikler korunur; ancak 100. satırda ve sonraki satırlarda yapılan değişiklikler uygulanmaz.

IGNORE
Bir sınırlama ihlali ortaya çıktığında, sınırlama ihlalini içeren satır eklenmez veya değiştirilmez. Bu satırın yok sayılmasının yanı sıra, komut olağan şekilde çalışmaya devam eder. Sınırlama ihlalini içeren satırdan önce ve sonra gelen diğer satırlar olağan şekilde eklenmeye ve güncellenmeye devam eder. Hiçbir hata döndürülmez.

REPLACE
UNIQUE sınırlama ihlali oluştuğunda, buna neden olan daha önceden varolan satırlar geçerli satır eklenmeden ve güncellenmeden önce kaldırılır. Sonuç olarak, ekleme ve güncelleme her zaman gerçekleşir ve komut olağan şekilde çalışmaya devam eder. Hiçbir hata döndürülmez. Bir NOT NULL sınırlama ihlali ortaya çıkarsa, NULL değeri bu sütun için varsayılan değerle değiştirilir. Sütun hiçbir varsayılan değere sahip değilse, ABORT algoritması kullanılır. CHECK sınırlama ihlali ortaya çıkarsa, IGNORE algoritması kullanılır. Bu çakışma çözümleme stratejisi, sınırlama işlemini yerine getirmek için satırlar silerse, bu satırlarda tetikleyicileri silme işlemini çağırmaz.

INSERT veya UPDATE ifadesinin OR deyiminde belirtilen algoritma, CREATE TABLE ifadesinde belirtilen bir algoritmayı geçersiz kılar. CREATE TABLE ifadesinde hiçbir algoritma belirtilmediğinde veya INSERT veya UPDATE ifadesi çalıştırılırken ABORT algoritması kullanılır.

REINDEX

REINDEX komutu, bir veya birden fazla dizini silmek veya yeniden oluşturmak için kullanılır. Bu komut, bir harmanlama sırasının tanımı değiştirildiğinde faydalıdır.

sql-statement  ::=  REINDEX collation-name 
sql-statement  ::=  REINDEX [database-name .] ( table-name | index-name )

İlk biçimde, bağlı tüm veritabanlarında belirtilen harmanlama sırasını kullanan tüm dizinler yeniden oluşturulur. İkinci biçimde, bir table-name belirtilirse, tablo ile ilişkilendirilmiş tüm dizinler yeniden oluşturulur. Bir index-name verilirse, yalnızca belirtilen dizin silinir ve yeniden oluşturulur.

YORUMLAR

Yorumlar, SQL komutu değildir, ancak SQL sorgularında görülebilir. Çalışma zamanı tarafından beyaz boşluk olarak işlenirler. Birden çok satıra yayılan ifadelerin içerisi de dahil olmak üzere, beyaz boşluğun bulunduğu her yerde başlayabilir.

comment             ::=  single-line-comment | 
                         block-comment 
single-line-comment ::=  -- single-line 
block-comment       ::=  /* multiple-lines or block [*/]

Tek satır yorumu iki tire işareti ile gösterilir. Tek satır yorumu yalnızca geçerli satırın sonuna kadar uzanabilir.

Blok yorumlar birden çok satıra yayılabilir veya tek bir satıra gömülebilir. Hiçbir sonlandırıcı ayırıcısı yoksa, blok yorum, girişin sonuna kadar yayılır. Bu durum bir hata olarak ele alınmaz. Yeni SQL ifadesi, blok yorum sona erdikten sonra bir satırda başlayabilir. Blok yorumlar, ifadelerin içerisi ve diğer SQL ifadelerinin ortası da dahil olmak üzere beyaz boşluğun bulunduğu her yere yerleştirilebilir. Blok yorumlar yuvalanmaz. Bir blok yorumun içindeki tek satırlı yorumlar yok sayılır.

İFADELER

İfadeler, diğer SQL bloklarının içindeki alt komutlardır. Aşağıda bir SQL ifadesinin içindeki bir ifade için geçerli sözdizimi açıklanmaktadır:

expr            ::=  expr binary-op expr | 
                     expr [NOT] like-op expr [ESCAPE expr] | 
                     unary-op expr | 
                     ( expr ) | 
                     column-name | 
                     table-name.column-name | 
                     database-name.table-name.column-name | 
                     literal-value | 
                     parameter | 
                     function-name( expr-list | * ) | 
                     expr ISNULL | 
                     expr NOTNULL | 
                     expr [NOT] BETWEEN expr AND expr | 
                     expr [NOT] IN ( value-list ) | 
                     expr [NOT] IN ( select-statement ) | 
                     expr [NOT] IN [database-name.] table-name | 
                     [EXISTS] ( select-statement ) | 
                     CASE [expr] ( WHEN expr THEN expr )+ [ELSE expr] END | 
                     CAST ( expr AS type ) | 
                     expr COLLATE collation-name 
like-op         ::=  LIKE | GLOB 
binary-op       ::=  see Operators 
unary-op        ::=  see Operators 
parameter       ::=  :param-name | @param-name | ? 
value-list      ::=  literal-value [, literal-value]* 
literal-value   ::=  literal-string | literal-number | literal-boolean | literal-blob | literal-null 
literal-string  ::=  'string value' 
literal-number  ::=  integer | number 
literal-boolean  ::=  true | false 
literal-blob  ::=  X'string of hexadecimal data' 
literal-null  ::=  NULL

İfade, tek bir değere çözümlenebilen değerler ve operatörlerin bir birleşimidir. İfadeler, boolean değerine (true veya false) çözümlenmelerine veya boolean dışı bir değere çözümlenmelerine göre iki genel türe ayrılabilir.

WHERE deyimi, HAVING deyimi, JOIN deyimindeki ON ifadesi ve bir CHECK ifadesi de dahil olmak üzere çoğu yaygın durumda, ifadenin bir boolean değerine çözümlenmesi gerekir. Aşağıdaki ifade türleri bu koşulu yerine getirir:

  • ISNULL

  • NOTNULL

  • IN ()

  • EXISTS ()

  • LIKE

  • GLOB

  • Belirli işlevler

  • Belirli operatörler (özellikle karşılaştırma operatörleri)

Değişmez değerler

Değişmez sayısal değer bir tam sayı veya kayar nokta sayısı olarak yazılır. Bilimsel gösterim desteklenir. . (nokta) karakteri her zaman ondalık ayırıcı olarak kullanılır.

Dize değişmezi, dizeyi tek tırnak işareti ' içine alarak gösterilir. Dizeye tek tırnak işareti eklemek için, satıra bu örnekteki gibi iki tek tırnak işareti ekleyin: ".

Boolean değişmezi, true veya false değeriyle gösterilir. Değişmez boolean değerleri, Boolean sütunu veri türü ile kullanılır.

BLOB değişmezi, onaltılı veriler içeren ve başında tek bir x veya X karakteri bulunan bir dize değişmezidir; örneğin, X'53514697465'.

Değişmez değer NULL işareti de olabilir.

Sütun adı

Sütun adı, CREATE TABLE ifadesinde tanımlı adlardan biri veya aşağıdaki özel kimliklerden biri olabilir: ROWID, OID veya _ROWID_ Bu özel kimliklerin hepsi, her tablonun her satırıyla ilişkilendirilmiş benzersiz rastgele tam sayı anahtarını ("satır anahtarı") açıklar. Özel tanımlayıcılar yalnızca, CREATE TABLE ifadesi, aynı adı taşıyan gerçek bir sütunu tanımlamadığında satır anahtarına başvuruda bulunur. Satır anahtarları salt okunur sütunlar gibi hareket eder. Satır anahtarı, UPDATE veya INSERT ifadesindeki bir satır anahtarının değerini değiştirememeniz dışında, normal bir sütunun kullanılabileceği her yerde kullanılabilir. SELECT * FROM tablo ifadesi, sonuç kümesinde satır anahtarı içermez.

SELECT ifadesi

SELECT ifadesi, bir ifadede IN operatörünün sağ taraftaki işleneni, ölçekleme miktarı (tek sonuç değeri) veya EXISTS operatörünün işleneni olarak görülebilir. Ölçekleme miktarı veya bir IN operatörünün işleneni olarak kullanıldığında, SELECT ifadesi, sonucunda yalnızca tek bir sütuna sahip olabilir. Bileşik SELECT ifadesine (UNION veya EXCEPT gibi anahtar sözcüklerle bağlanan) izin verilir. EXISTS operatörüyle, SELECT ifadesinin sonuç kümesindeki sütunlar yok sayılır ve bir veya birden fazla sütun varsa ifade TRUE değerini ve sonuç kümesi boşsa FALSE değerini döndürür. SELECT ifadesindeki hiçbir terim, içeren sorgudaki değere başvurmazsa, ifade diğer işlemelerden önce değerlendirilir ve sonuç gerektiği şekilde yeniden kullanılır. SELECT ifadesi, bağıntılı alt sorgu olarak bilinen dış sorgudan değişkenler içermezse, SELECT gerek olan her defasında yeniden değerlendirilir.

SELECT ifadesi IN operatörünün sağ işleneni olduğunda, sol işlenenin sonucu SELECT ifadesinin sonuç kümesindeki değerlerden birine eşitse, IN operatörü TRUE değerini döndürür. Testin şeklini ters çevirmek için IN operatöründen önce NOT anahtar sözcüğü gelebilir.

SELECT ifadesi bir ifadede görülürse ancak, IN operatörünün sağ işleneni değilse, SELECT ifadesinin sonucunun ilk satırı ifadede kullanılan değer olur. SELECT birden fazla sonuç satırı döndürürse, ilk satırdan sonraki tüm satırlar yok sayılır. SELECT hiçbir satır döndürmezse, SELECT ifadesinin değeri NULL olur.

CAST ifadesi

CAST ifadesi, belirtilen değerin veri türünü belirtilen türle değiştirir. Belirtilen tür, bir CREATE TABLE ifadesinin sütun tanımındaki tür için geçerli herhangi bir boş olmayan tür olabilir. Ayrıntılar için Veri türü desteği bölümüne bakın.

Ek ifade öğeleri

Şu SQL öğeleri ifadelerde de kullanılabilir:

  • Yerleşik işlevler (Toplama, ölçekleme ve tarih/saat biçimlendirme işlevleri)

  • Operatörler

  • Parametreler

Yerleşik işlevler

Yerleşik işlevler üç ana kategoriye ayrılır:
  • Toplu işlevler

  • Ölçekleme işlevleri

  • Tarih ve saat işlevleri

Bu işlevlere ek olarak, bir tetikleyicinin çalıştırılması sırasına bir hatanın oluştuğunu bildirmek için kullanılan RAISE() özel işlevi de bulunur. Bu işlev, yalnızca bir CREATE TRIGGER ifadesinin gövdesinde kullanılabilir. RAISE() işlevine ilişkin bilgi için bkz. >CREATE TRIGGER > RAISE().

SQL'deki tüm anahtar sözcüklerde olduğu gibi, işlev adları da büyük/küçük harf duyarlı değildir.

Toplama işlevleri

Toplu işlevler, birden çok satırdan değerler üzerine işlemler gerçekleştirir. Bu işlevler çoğunlukla, SELECT ifadelerinde GROUP BY deyimiyle birlikte kullanılır.

AVG(X)

Bir grup içinde NULL olmayan tüm X'lerin ortalama değerini döndürür. Sayıya benzemeyen dize ve BLOB değerleri 0 olarak yorumlanır. Tüm girişler tam sayı olsa da, AVG() sonucu her zaman kayar nokta değeridir.

COUNT(X) COUNT(*)

İlk biçim, X'in bir grupta kaç kez NULL olmadığını döndürür. İkinci biçim (* argümanıyla), gruptaki toplam satır sayısını döndürür.

MAX(X)

Gruptaki tüm değerlerin maksimum değerini döndürür. Maksimum değeri belirlemek için her zamanki sıralama düzeni kullanılır.

MIN(X)

Gruptaki tüm değerlerin NULL olmayan minimum değerini döndürür. Minimum değeri belirlemek için her zamanki sıralama düzeni kullanılır. Gruptaki tüm değerler NULL ise, NULL döndürülür.

SUM(X)

TOTAL(X)

Grupta NULL olmayan tüm değerlerin sayısal toplamını döndürür. Bütün değerler NULL ise; SUM(), NULL ve TOTAL(), 0 döndürür. TOTAL() sonucu her zaman kayan nokta değeridir. NULL olmayan tüm girişler tam sayı ise SUM() sonucu bir tam sayı değeri olur. SUM() girişlerinden biri tam sayı ve NULL değilse, SUM() bir kayan nokta değeri döndürür. Bu değer, gerçek toplamın yaklaşık bir sonucu olabilir.

Tek bir argüman alan önceki toplu işlevlerden herhangi birinde, bu argümandan önce DISTINCT anahtar sözcüğü gelebilir. Bu durumda, yinelenen öğeler toplu işleve iletilmeden önce filtrelenir. Örneğin, COUNT(DISTINCT x) işlev çağırısı, x sütununda NULL olmayan değerlerin toplam sayısı yerine X sütununun belirgin değerlerinin sayısını döndürür.

Ölçekleme işlevleri

Ölçekleme işlevleri değerler üzerinde bir defada bir satır olacak şekilde çalışır.

ABS(X)

X argümanının mutlak değerini döndürür.

COALESCE(X, Y, ...)

NULL olmayan ilk argümanın bir kopyasını döndürür. Tüm argümanlar NULL ise, NULL değeri döndürülür. En az iki argümanın olması gerekir.

GLOB(X, Y)

Bu işlev, X GLOB Y sözdizimini uygulamak için kullanılır.

IFNULL(X, Y)

NULL olmayan ilk argümanın bir kopyasını döndürür. Her iki argüman da NULL ise, NULL döndürülür. Bu işlev COALESCE() ile aynı şekilde işler.

HEX(X)

Argüman BLOB saklama türünün bir değeri olarak yorumlanır. Sonuç, bu değerin içeriğinin onaltılı oluşturmasıdır.

LAST_INSERT_ROWID()

Geçerli SQLConnection üzerinden veritabanına son eklenen satırın satır kimliğini (oluşturulan ana anahtar) döndürür. Değer SQLConnection.lastInsertRowID özelliği tarafından döndürülen değerle aynıdır.

LENGTH(X)

X'in dize uzunluğunu karakter cinsinden döndürür.

LIKE(X, Y [, Z])

Bu işlev, SQL'in X LIKE Y [ESCAPE Z] sözdizimini uygulamak için kullanılır. İsteğe bağlı ESCAPE deyimi varsa, işlev üç argümanla çağrılır. Tersi durumda, yalnızca iki argümanla çağrılır.

LOWER(X)

X dizesinin bir kopyasını, tüm karakterler küçük harfe dönüştürülmüş şekilde döndürür.

LTRIM(X) LTRIM(X, Y)

X'in sol tarafındaki boşluklar kaldırılarak oluşturulan bir dize döndürür. Y argümanı belirtilirse işlev, Y altındaki herhangi bir karakteri X'in sol tarafından kaldırır.

MAX(X, Y, ...)

Maksimum değerli argümanı döndürür. Argümanlar, sayıların yanı sıra dizeler olabilir. Maksimum değer, sıralama düzeni tarafından belirlenir. MAX() işlevinin, 2 veya daha fazla argüman olduğunda basit bir işlev; ancak, tek bir argüman olduğunda toplu bir işlev olduğunu unutmayın.

MIN(X, Y, ...)

Minimum değerli argümanı döndürür. Argümanlar, sayıların yanı sıra dizeler olabilir. Minimum değer, sıralama düzeni tarafından belirlenir. MIN() işlevinin, 2 veya daha fazla argüman olduğunda basit bir işlev; ancak, tek bir argüman olduğunda toplu bir işlev olduğunu göz önünde bulundurun.

NULLIF(X, Y)

Argümanlar farklıysa ilk argümanı; tersi durumda, NULL değerini döndürür.

QUOTE(X)

Bu yordam, başka bir SQL ifadesine eklemek için uygun olan argümanının değeri olan bir dize döndürür. Dizeler, gerektiğinde iç tırnak imlerinde çıkışlarla birlikte tek tırnak işareti içine alınır. BLOB saklama sınıfları, onaltılı değişmezler olarak kodlanır. Bu işlev, geri al/yinele işlevini uygulamak için tetikleyiciler yazarken faydalıdır.

RANDOM(*)

-9223372036854775808 ile 9223372036854775807 arasında yapay olarak rastgele bir tam sayı döndürür. Bu rastgele değer güçlü bir şifrelemeye sahip değildir.

RANDOMBLOB(N)

Boş rastgele baytlar içeren bir N-bayt BLOB döndürür. N, pozitif bir tam sayı olmalıdır. Bu rastgele değer güçlü bir şifrelemeye sahip değildir. N değeri negatif ise, tek bayt döndürülür.

ROUND(X) ROUND(X, Y)

X sayısını, ondalık basamağın sağındaki Y basamağa yuvarlar. Y argümanı atılırsa, 0 kullanılır.

RTRIM(X) RTRIM(X, Y)

X'in sağ tarafındaki boşluklar kaldırılarak oluşturulan bir dize döndürür. Y argümanı belirtilirse, işlev Y içindeki karakterleri X'in sağ tarafından kaldırır.

SUBSTR(X, Y, Z)

Y. sıradaki karakterle başlayan ve Z uzunluğunda olan X giriş dizesinin alt dizesini döndürür. X'in en soldaki karakteri dizin konumu 1'dir. Y negatif ise, alt dizenin ilk karakteri soldan sağa yerine sağdan sola doğru sayılarak bulunur.

TRIM(X) TRIM(X, Y)

X'in sağ tarafındaki boşluklar kaldırılarak oluşturulan bir dize döndürür. Y argümanı belirtilirse, işlev Y içindeki karakterleri X'in sağ tarafından kaldırır.

TYPEOF(X)

X ifadesinin türünü döndürür. Döndürülen olası değerler, 'null', 'integer', 'real', 'text' ve 'blob'dur. Veri türleri hakkında daha fazla bilgi için bkz. Veri türü desteği.

UPPER(X)

X giriş dizesinin bir kopyasını tüm karakterler büyük harfe dönüştürülmüş şekilde döndürür.

ZEROBLOB(N)

0x00'ın N baytını içeren bir BLOB döndürür.

Tarih ve saat biçimlendirme işlevleri

Tarih ve saat biçimlendirme işlevleri, biçimlendirilmiş tarih ve saat verileri oluşturmak için kullanılan bir ölçekleme işlevleri grubudur. Bu işlevlerin çalıştığını ve dize ve sayı değerleri döndürdüğünü göz önünde bulundurun. Bu işlevler, DATE veri türüyle kullanılmak üzere tasarlanmamıştır. Bu işlevleri, belirtilmiş veri türü DATE olan bir sütunda kullanırsanız, beklenildiği gibi davranış sergilemezler.

DATE(T, ...)

DATE() işlevi, şu biçimdeki tarihi içeren bir dize döndürür: YYYY-AA-GG. İlk parametre (T), Saat biçimleri altında bulunan biçimin saat dizesini belirler. Saat dizesinden sonra istenilen sayıda değiştirici belirtilebilir. Değiştiriciler, Değiştiriciler'in altında bulunabilir.

TIME(T, ...)

TIME() işlevi, saati SS:DD:SS olarak içeren bir dize döndürür. İlk parametre (T), Saat biçimleri altında bulunan biçimin saat dizesini belirler. Saat dizesinden sonra istenilen sayıda değiştirici belirtilebilir. Değiştiriciler, Değiştiriciler'in altında bulunabilir.

DATETIME(T, ...)

DATETIME() işlevi, YYYY-AA-GG SS:DD:SS biçiminde tarih ve saat içeren bir dize döndürür. İlk parametre (T), Saat biçimleri altında bulunan biçimin saat dizesini belirler. Saat dizesinden sonra istenilen sayıda değiştirici belirtilebilir. Değiştiriciler, Değiştiriciler'in altında bulunabilir.

JULIANDAY(T, ...)

JULIANDAY() işlevi, M.Ö 24 Kasım 4714 öğlen tarihi ile belirtilen tarih arasında Greenwich saatine göre geçen gün sayısını gösteren bir sayı döndürür. İlk parametre (T), Saat biçimleri altında bulunan biçimin saat dizesini belirler. Saat dizesinden sonra istenilen sayıda değiştirici belirtilebilir. Değiştiriciler, Değiştiriciler'in altında bulunabilir.

STRFTIME(F, T, ...)

STRFTIME() yordamı, ilk F argümanı olarak belirtilen biçim dizesine göre biçimlendirilen tarihi döndürür. Biçim dizesi yerine şunların kullanılması desteklenir:

%d - ayın günü

%f - kesirli saniye SS.SSS

%H - saat 00-24

%j - yılın günü 001-366

%J - Julyen gün sayısı

%m -ay 01-12

%M - dakika 00-59

%s - 01.01.1970'ten bu yana geçen saniye

%S - saniye 00-59

%w - haftanın günü 0-6 (pazar = 0)

%W - yılın haftası 00-53

%Y - yıl 0000-9999

%% - %

İkinci parametre (T), Saat biçimleri altında bulunan biçimin saat dizesini belirler. Saat dizesinden sonra istenilen sayıda değiştirici belirtilebilir. Değiştiriciler, Değiştiriciler'in altında bulunabilir.

Saat biçimleri

Saat dizesi aşağıdaki biçimlerden birinde olabilir:

YYYY-AA-GG

2007-06-15

YYYY-AA-GG SS DD

2007-06-15 07:30

YYYY-AA-GG SS DD:SS

2007-06-15 07:30:59

YYYY-AA-GG SS DD:SS.SSS

2007-06-15 07:30:59.152

YYYY-AA-GGTSS:DD

2007-06-15T07:30

YYYY-AA-GGTSS:DD:SS

2007-06-15T07:30:59

YYYY-AA-GGTSS:DD:SS.SSS

2007-06-15T07:30:59.152

SS:DD

07:30 (tarih 2000-01-01)

SS DD:SS

07:30:59 (tarih 2000-01-01)

SS DD:SS.SSS

07:30:59:152 (tarih 2000-01-01)

şimdi

Eşgüdümlü Evrensel Saat cinsinden o sıradaki tarih ve saat.

GGGG.GGGG

Kayar nokta sayısı olarak Julyen gün sayısı

Bu biçimlerdeki T karakteri, tarih ve saati birbirinden ayıran değişmez "T" karakteridir. Yalnızca saatin olduğu biçimler tarih olarak 2001-01-01 tarihini kabul eder.

Değiştiriciler

Saat dizesinden sonra, tarihi veya tarihin yorumlanmasını değiştiren sıfır veya daha fazla değiştirici gelebilir. Kullanılabilen değiştiriciler şunlardır:

NNN gün

Saate eklenecek gün sayısı.

NNN saat

Saate eklenecek saat sayısı.

NNN dakika

Saate eklenecek dakika sayısı.

NNN.NNNN saniye

Saate eklenecek saniye ve milisaniye sayısı.

NNN ay

Saate eklenecek ay sayısı.

NNN yıl

Saate eklenecek yıl sayısı.

ay başı

Saati ayın başına gelecek şekilde geriye doğru kaydırır.

yıl başı

Saati yılın başına gelecek şekilde geriye doğru kaydırır.

gün başı

Saati günün başına gelecek şekilde geriye doğru kaydırır.

haftasonu N

Saati belirtilen haftanın gününe gelecek şekilde ileriye doğru kaydırır. (0 = Pazar, 1 = Pazartesi, vb.)

yerelsaat

Tarihi yerel saate dönüştürür.

utc

Tarihi Eşgüdümlü Evrensel Saat'e dönüştürür.

Operatörler

SQL, SQL'e özgü birçok operatörün yanı sıra birçok programlama dilinde olan yaygın operatörler de dahil olmak üzere, geniş çapta operatör seçimini destekler.

Yaygın operatörler

Aşağıdaki ikili operatörlere SQL bloğunda izin verilir ve en yüksek öncelikli olandan en düşük öncelikli olana doğru listelenir:

*    /    % 
+    - 
<< >> &     | 
< >=   > >= 
=    ==   !=   <> IN 
AND 
OR

Desteklenen tekli önek operatörleri şunlardır:

 !    ~    NOT

COLLATE operatörü, tekli sonek operatörü olarak düşününebilir. COLLATE operatörü en yüksek önceliğe sahiptir. Bir önek tekli operatöründen veya ikili bir operatörden her zaman daha sıkı bağlar.

Eşittir veya eşit değildir operatörlerinin iki çeşitlemesinin olduğunu göz önünde bulundurun. Eşittir = veya == olabilir. Eşit değildir operatörü != veya <> olabilir.

|| operatörü dize bitiştirme operatörüdür - iki dizeyi işlenenlerinden birbiriyle birleştirir.

% operatörü, sol işlenen modülünün kalan kısmını sağ işlenenine çıkarır.

İkili bir operatörün sonucu, dize sonucu veren || birleştirme operatörü dışında sayısal bir değerdir.

SQL operatörleri

LIKE

LIKE operatörü bir model eşleştirme karşılaştırması gerçekleştirir.

expr     ::=  (column-name | expr) LIKE pattern 
pattern  ::=  '[ string | % | _ ]'

LIKE operatörünün sağındaki işlenen, modeli içerir ve soldaki işlenen modelle eşleştirilecek dizeyi içerir. Modeldeki yüzde sembolü (%) bir joker karakterdir; dizedeki sıfır dizisi veya daha fazla karakterle eşleşir. Modeldeki alt çizgi (_) dizedeki herhangi bir tek karakterle eşleşir. Diğer karakter kendiyle veya küçük/büyük harf eşdeğeriyle eşleşir; diğer bir deyişle, eşleştirmeler büyük/küçük harf duyarsız şekilde gerçekleştirilir. Not: veritabanı motoru yalnızca 7 bitlik Latin karakterler için büyük/küçük harfi anlar. Sonuç olarak, LIKE operatörü, 8 bitlik iso8859 karakterleri veya UTF-8 karakterleri için büyük/küçük harf duyarlıdır. Örneğin, 'a' LIKE 'A' ifadesi TRUE; ancak 'æ' LIKE 'Æ' ifadesi FALSE) değerine sahiptir. Latin karakterleri için büyük/küçük harf duyarlılığı SQLConnection.caseSensitiveLike özelliği kullanılarak değiştirilebilir.

İsteğe bağlı ESCAPE deyimi varsa, ESCAPE anahtar sözcüğünü izleyen ifade, tek bir karakterden oluşan bir dizede değerlendirilmelidir. Bu karakter, değişmez yüzde veya alt çizgi karakterlerini eşleştirmek için LIKE modelinde kullanılabilir. Ardından yüzde sembolü, alt çizgi veya kendisi gelen bir çıkış karakteri, sırasıyla dizedeki değişmez yüzde sembolü, alt çizgi veya çıkış karakteriyle eşleşir.

GLOB

GLOB operatörü LIKE operatörüne benzer; ancak, joker karakterleri için Unix dosyası genelleştirme sözdizimini kullanır. LIKE operatöründen farklı olarak, GLOB operatörü büyük/küçük harf duyarlıdır.

IN

IN operatörü, sol işleneninin sağ işlenenindeki (parantez içindeki değerler kümesi) değerlerden birine eşit olup olmadığını hesaplar.

in-expr         ::=  expr [NOT] IN ( value-list ) | 
                     expr [NOT] IN ( select-statement ) | 
                     expr [NOT] IN [database-name.] table-name 
value-list      ::=  literal-value [, literal-value]*

Sağ işlenen, virgülle ayrılmış değişmez değerler kümesi veya bir SELECT ifadesinin sonucu olabilir. IN operatörünün sağ işleneni olarak SELECT ifadesinin kullanılmasına yönelik açıklama ve sınırlamalar için ifadelerdeki SELECT ifadelerine bakın.

BETWEEN...AND

BETWEEN...AND operatörü, >= ve <= operatörleriyle iki ifade kullanmaya eşdeğerdir. Örneğin, x BETWEEN y AND z ifadesi x >= y AND x <= z ifadesine eşdeğerdir.

NOT

NOT operatörü bir negatiflik operatörüdür. GLOB, LIKE ve IN operatörlerinin başına NOT anahtar sözcüğü gelerek testin şekli tersine çevrilir (diğer bir deyişle, bir değerin belirtilen modelle eşleşmediğini göstermek için).

Parametreler

Bir parametre, çalışma zamanı sırasında SQLStatement.parameters ilişkilendirici dizisine bir değer atayarak doldurulan bir değişmez değer için ifadede bir yer tutucu belirler. Parametreler üç biçimde olabilir:

?

Soru işareti dizin oluşturulmuş bir parametreyi gösterir. Parametrelere ifadedeki sıralarına göre sayısal (sıfır tabanlı) dizin değerleri atanır.

:AAAA

Ardından bir kimlik gelen bir iki nokta üst üste imi, AAAA adındaki adlandırılmış parametre için bir yer tutar. Adlandırılmış parametreler, SQL ifadesindeki sıralarına göre de numaralandırılır. Karışıklığı önlemek için, adlandırılmış ve numaralandırılmış parametreleri karışık kullanmaktan kaçının.

@AAAA

Bir "at işareti" iki nokta üst üsteye eşdeğerdir.

Desteklenmeyen SQL özellikleri

Aşağıda, Adobe AIR'de desteklenmeyen standart SQL öğelerinin bir listesi bulunmaktadır:
FOREIGN KEY sınırlamaları
FOREIGN KEY sınırlamaları ayrıştırılır; ancak zorlanmaz.

Tetikleyiciler
FOR EACH STATEMENT tetikleyicileri desteklenmez (her tetikleyicinin FOR EACH ROW tetikleyicisi olması gerekir). INSTEAD OF tetikleyicileri tablolarda desteklenmez (INSTEAD OF tetikleyicilerine yalnızca görünümlerde izin verilir). Yinelenen tetikleyiciler - kendi kendini tetikleyen tetikleyiciler- desteklenmez.

ALTER TABLE
ALTER TABLE komutunun yalnızca RENAME TABLE ve ADD COLUMN varyasyonları desteklenir. DROP COLUMN, ALTER COLUMN, ADD CONSTRAINT ve benzeri diğer ALTER TABLE işlemleri yok sayılır.

Yuvalanmış işlemler
Yalnızca tek bir etkin işleme izin verilir.

RIGHT ve FULL OUTER JOIN
RIGHT OUTER JOIN ve FULL OUTER JOIN desteklenmez.

Güncellenebilir VIEW
Görünüm salt okunurdur. Bir görünümde DELETE, INSERT veya UPDATE ifadesi çalıştıramazsınız. Bir görünümde DELETE, INSERT veya UPDATE ifadesi çalıştırma girişimini tetikleyen bir INSTEAD OF tetikleyicisi desteklenir ve tetikleyicinin gövdesinde desteklenen tabloları güncellemek için kullanılabilir.

GRANT ve REVOKE
Veritabanı normal bir disk dosyasıdır; uygulanabilecek erişim izinleri temeldeki işletim sisteminin dosya erişim izinleridir. Genelde istemci/sunucu RDBMS'lerinde bulunan GRANT ve REVOKE komutları uygulanmaz.

Aşağıdaki SQL öğeleri ve SQLite özellikleri bazı SQLite uygulamalarında desteklenir; ancak, Adobe AIR'de desteklenmez. Bu işlevlerin çoğu SQLConnection sınıfı yöntemleri üzerinden kullanılabilir:
İşlemle ilgili SQL öğeleri (BEGIN, END, COMMIT, ROLLBACK)
Bu işlev SQLConnection sınıfının işlemle ilgili yöntemleri üzerinden kullanılabilir: SQLConnection.begin()SQLConnection.commit()SQLConnection.rollback()

ANALYZE
Bu işlev, SQLConnection.analyze() yöntemi üzerinden kullanılabilir.

ATTACH
Bu işlev, SQLConnection.attach() yöntemi üzerinden kullanılabilir.

COPY
Bu ifade desteklenmez.

CREATE VIRTUAL TABLE
Bu ifade desteklenmez.

DETACH
Bu işlev SQLConnection.detach() yöntemi üzerinden kullanılabilir.

PRAGMA
Bu ifade desteklenmez.

VACUUM
Bu işlev SQLConnection.compact() yöntemi üzerinden kullanılabilir.

Sistem tablo erişimi kullanılamaz
sqlite_master ve "sqlite_" önekinin olduğu diğer tabloların da içinde olduğu sistem tabloları SQL ifadelerinde kullanılamaz. Çalışma zamanı, şema verilerine nesne odaklı erişim sunan bir şema API'si içerir. Daha fazla bilgi için SQLConnection.loadSchema() yöntemine bakın.

Normal ifade işlevleri (MATCH() ve REGEX()
Bu işlevler SQL ifadelerinde kullanılmaz.

Aşağıdaki işlev, birçok SQLite uygulamasında ve Adobe AIR'de farklılık gösterir:

Dizinlenmiş ifade parametreleri
Birçok uygulamada, dizinlenmiş ifade parametreleri bir tabanlıdır. Ancak, Adobe AIR dizinlenmiş ifade parametreleri sıfır tabanlıdır (başka bir deyişle, ilk parametreye 0 dizini, ikinci parametreye 1 dizini verilir ve bu şekilde devam eder).

INTEGER PRIMARY KEY sütun tanımları
Bir çok uygulamada, tablo için esas birincil anahtar sütun olarak yalnızca INTEGER PRIMARY KEY olarak tanımlanmış sütunlar kullanılır. Bu uygulamalarda çoğu zaman INTEGER ile eşanlamlı olan bir veri türünün (örn. int) kullanılması, sütunun dahili birincil anahtar olarak kullanılmasına neden olmaz. Ancak Adobe AIR'de, int veri türü (ve diğer INTEGER ile eşanlamlı olan öğeler), INTEGER öğesine tam olarak eşdeğer sayılır. Sonuç olarak, PRIMARY KEY olarak tanımlanmış bir sütun tablo için dahili birincil anahtar olarak kullanılır. Daha fazla bilgi için CREATE TABLE ve Sütun yakınlığı bölümlerine bakın.

Ek SQL özellikleri

Aşağıdaki sütun yakınlık türleri SQLite'ta varsayılan olarak desteklenmez; ancak, Adobe AIR'de desteklenir (SQL'deki bütün anahtar sözcükler gibi veri türü adlarının da büyük/küçük harf duyarlı olmadığına dikkat edin):
Boolean
Boolean sınıfına karşılık gelir.

Date
Date sınıfına karşılık gelir.

int
int sınıfına karşılık gelir (INTEGER sütun yakınlığına eşdeğerdir).

Number
Number sınıfına karşılık gelir (REAL sütun yakınlığına eşdeğerdir).

Nesne
Object sınıfına veya AMF3 kullanılarak serileştirilebilen ve serileştirmesi kaldırılabilen alt sınıfa karşılık gelir. (Bu, özel sınıflar da dahil olmak üzere birçok sınıfı içerir; ancak, ekran nesneleri ve ekran nesnelerini özellik olarak içeren nesnelerin de aralarında bulunduğu bazı nesneleri hariç bırakır.)

Dize
String sınıfına karşılık gelir (TEXT sütun yakınlığına eşdeğerdir).

XML
ActionScript (E4X) XML sınıfına karşılık gelir.

XMLList
ActionScript (E4X) XMLList sınıfına karşılık gelir.

Aşağıdaki değişmez değerler SQLite'ta varsayılan olarak desteklenmez; ancak, Adobe AIR'de desteklenir:

true
BOOLEAN sütunlarıyla çalışmak üzere true değişmez boolean değerini göstermek için kullanılır.

false
BOOLEAN sütunlarıyla çalışmak üzere false değişmez boolean değerini göstermek için kullanılır.