Desteklenen SQL söz dizimiAş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Çeşitli deyimler ve ifadeler için belirli sözdizimine ek olarak, aşağıda SQL sözdizimi için genel kuralları bulabilirsiniz:
Veri işleme ifadeleriVeri 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; INSERTINSERT 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. UPDATEGü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. DELETESil 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ı ifadeleriVeri 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:
CREATE TABLECREATE 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 TABLEALTER 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:
ALTER TABLE ifadesinin çalışma zamanı tablodaki veri miktarından etkilenmez. DROP TABLEDROP 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 temizlenir. İsteğe bağlı IF EXISTS deyimi, tablo yoksa ortaya çıkacak olan hatayı bastırır. CREATE INDEXCREATE 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 INDEXDROP 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 VIEWCREATE 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 VIEWDROP 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 TRIGGERCREATE 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:
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 TRIGGERDROP 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 deyimlerBu 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. COLLATECOLLATE 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:
EXPLAINEXPLAIN 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:
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. REINDEXREINDEX 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. YORUMLARYorumlar, 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:
Değişmez değerlerDeğ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 ifadesiSELECT 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 ifadesiCAST 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şlevlerYerleşik işlevler üç ana kategoriye ayrılır:
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. Toplu işlevlerToplu 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.
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.
Tarih ve saat biçimlendirme işlevleriTarih 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.
Saat biçimleriSaat dizesi aşağıdaki biçimlerden birinde olabilir:
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ştiricilerSaat 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:
OperatörlerSQL, 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örlerAş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örleriLIKE 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). ParametrelerBir 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:
Desteklenmeyen SQL özellikleriAşağıda, Adobe AIR'de desteklenmeyen standart SQL öğelerinin bir listesi bulunmaktadır:
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:
Aşağıdaki işlev, birçok SQLite uygulamasında ve Adobe AIR'de farklılık gösterir:
Ek SQL özellikleriAş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):
Aşağıdaki değişmez değerler SQLite'ta varsayılan olarak desteklenmez; ancak, Adobe AIR'de desteklenir:
|
|