A TIBSQL a standart SQL utasitás készlet szükitett változatát értelmezi.Ez a dokumentáció az értelmezett utasitásokat tartalmazza. A dokumentáció végén megtalálható a foglalt szavak listája is..
A nyelv leirásánál az utasitásokba beirandó, a szintaktika részét képező részek vastag kék betükkel szerepelnek, a leirásban késöbb kifejtett szimbolumok és a tetszőlegesen (kivéve kulcsszavak!) választható nevek dölt piros betükkel, a szintaktikai leirás segéd szimbolumai fekete betükkel.
A szintaktikai leirás segéd szimbolumai:
elhagyható
rész := szögletes zárójel [
]
elhagyható, vagy tetszőleges számban ismételhetö rész := szögletes
zárójel és csillag [ ]*
válaszható részek := függőleges vonal
|
Az adatbázis nevek, tábla nevek, oszlop nevek 1..32
karakterbol állhatnak, csak az angol ABC betüi, számok,
aláhuzás jel szerepelhetnek bennük.
TIBSQL által értelmezett szintaxis:
Részletesebben lásd a következőkben.
sql-statement ::= | ALTER TABLE table-name ADD colmn-name type |
sql-statement ::= | BEGIN TRANSACTION |
sql-statement ::= | COMMIT |
Véglegesiti az utolsó BEGIN TRANSACTION (vagy az adatbázis megnyitása, vagy az utolsó COMMIT vagy az utolsó ROLL BACK, vagy az utolsó FLUSH) óta történt változásokat. Automatikusan új tranzakciót is indít.Gyakorlatilag azonos a FLUSH utasítással.
sql-statement ::= | CREATE DATABASE database-name |
A CREATE DATABASE utasitás létrehoz egy új, üres adatbázist.
comment ::= | /* multiple-lines */ |
Megjegyzések. A /* */ közötti karaktereket a TIBSQL figyelmen kivül hagyja.
sql-command ::= | CREATE TABLE table-name
( column-def [, column-def]* ) |
column-def ::= | name type |
type ::= |
CHAR(méret)
| |
A CREATE TABLE utasitás létrehoz egy új, üres táblát.Az egyes adat tipusok tulajdonságai:
CHAR ANSI karakterek, max méretét a CREATE TABLE
utasitásban kell megadni ( 1..255)
INTEGER 32 bites egész szám
(-2,147,483,638 ... 2,147,483,647)
FLOAT lebegőpontos valós szám (5.0E-324 ...
1.7E308)
DATE dátum
LOGICAL 'T' vagy 'F' érték
Tábla fizikai törlése: DROP TABLE utasitással történhet.Meglévö táblához új oszlopot füzhetünk hozzá az ALTER TABLE utasitással.
sql-statement ::= | DELETE FROM table-name [WHERE expr] |
A DELETE utasitás rekordokat töröl a megadott táblából. Ha WHERE feltételt magadunk akkor azok a rekordok törlődnek, melyek megfelelnek a megadott feltételnek. Ha WHERE feltételt nem adunk meg akkor a tábla összes rekordja törlődik.
sql-command ::= | DROP DATABASE database-name |
A DROP DATABASE utasitás törli a megadott adatbázist ( a benne lévő táblákkal együtt).
sql-command ::= | DROP TABLE table-name |
A DROP TABLE utasitás fizikailag törli a megadott táblát.
END TRANSACTION
sql-command ::=
END
TRANSACTION
Lezárja a tranzakciót, az eddigi változásokat lemezre menti, automatikusan új tranzakciót is indit. Gyakorlatilag azonos hatású a FLUSH és a COMMIT utasításokkal.
sql-command ::= | FLUSH |
A tranzakcióban eddig történt változásokat lemezre irja, Automatikusan új tranzakciót kezd.
kifejezés
expr ::= | expr1 | agregát-function(expr1) | COUNT(*) |
expr1 ::= | expr1
muvelet expr1 | like-op | NOT expr1| ( expr1 ) | column-spec | konstans | normál-function ( expr1 ) | expr1 IS NULL | expr1 IS NOT NULL | expr1 [NOT] BETWEEN expr1 AND expr1 | expr1 [NOT] IN ( value[,value]* ) |
column-spec := | [table-alias .] column-name |
muvelet := | + | - | * | / | || | < | > | <= | >= | = | <> | OR | AND |
konstans := | 'karakterek' | szám | 'éééé.hh.nn' |
normál-function := | SUBSTR | ABS | UPPER |
agregaát-function := | MIN | MAX | SUM | AVG |
like-op ::= |
column-name [NOT] LIKE
"%karakterek"
| |
A karakteres konstansokat aposztrofok közé kell irni, a dátum konstans formája: 'yyyy.hh.nn' (az aposztrofokat is ki kell irni), a szám konstansokban a tizedes helyet PONT -al kell jelölni,
TIBSQL által értelmezett müveleti jelek és ezek prioritása:
1. prioritási szint: || * / < <= > >= = <> IN AND OR normál-függvények
2. prioritási szint: + -
3. prioritási szintagregát-függvényekEgy-egy prioritási szinten belül a kiértékelés balról - jobbra történik. Az utasitások végrehajtási sorrendje gömbölyű zárójelek alkalmazásával befolyásolható.A TIB SQL által értelmezett normál-függvények:
abs(X) | Abszolut érték. |
substr(X,Y,Z) |
Részlet string. X: kiinduló string, Pld: substr('1234567',3,2) => '34' |
upper(X) | Nagybetüssé alakitás |
A következő függvények az un."agregáte" függvények a GROUP BY -al képzett csoportokra értelmezettek:
avg(X) | Átlag érték. |
count(*) | Rekordok darabszáma. |
max(X) | Előforduló legnagyobb érték. |
min(X) | Előforduló legkisebb érték. |
sum(X) | Összeg. |
Ha egy SELECT utasitás oszlop listájának minden eleme agregát függvény és GROUP BY definiciót nem adunk meg akkor a select eredménye egyetlen sor, amelyben a teljes eredmény táblát egyetlen csoportnak tekintjük.
Szükség esetén a TIBSQL tipus konverziókat végez.
NULL érték kezelés
A NULL érték CHAR mezőben '' (üres string), INTEGER és FLOAT mezőben 0 (nulla), DATE mezőben '1900.01.01', LOGICAL mezőben False értéknek felel meg.
sql-statement ::= | INSERT INTO
table-name [(column-list)] VALUES(value-list) | INSERT INTO table-name [(column-list)] select-statement |
column-list := | column-name [ , column-name ]* |
value-list:= | konstans [ , konstans ]* |
Az INSERT utasitás rekordot vagy rekordokat illeszt a
táblához.
Az első alakkal egy rekordot irhatunk, az értékeket az utasitásban a VALUES utáni részben kell megadni. A column-list -ben felsorolt oszlopok rendre a value-list értékeit kapják. A column-list -ben nem szereplő oszlopok NULL értéket kapnak.
A második alakkal egy SELECT utasitással létrehozott eredmény soraival bővitjük a táblát.A column-list -ben felsorolt oszlopok rendre az eredmény tábla értékeit kapják. A column-list -ben nem szereplő oszlopok NULL értéket kapnak.
Ha column-list -et nem adunk meg akkor alapértelmezés a tábla összes oszlopa a CREATE TABLE -ban megadott sorrendben.
sql-statement ::= | ROLLBACK |
Az aktuális tranzakciókban végzett változásokat "eldobja" nem irja ki őket a lemezre. Automatikusan új tranzakciót is indit.
sql-statement ::= |
egyszerü-select |
egyszerü-select:= |
SELECT [ DISTINCT] result |
result ::= | result-column [, result-column]* |
result-column ::= | * | [table-alias . ]col-name [ alias ] | expr [ alias ] |
table-list ::= | table [join-op table join-args]* |
table ::= | table-name [ alias] |
join-op ::= | , | LEFT OUTER JOIN | INNER JOIN |
join-args ::= | [ON expr] |
expr-list ::= | expr [, expr]* |
union-op ::= | UNION | UNION ALL |
A 'result-column' -ban az 'expr' csak string, integer, float vagy datum tipust eredményező kifejezés lehet.
A WHERE, 'join-arg' és HAVING -ben az 'expr' csak logikai értéket eredményező kifejezés lehet.
Az ORDER BY részre vonatkozó szabályok:
Megjegyzések:
A select utasitás végrehajtási sorrendje:
sql-statement ::= | UPDATE table-name SET assignment [, assignment]* [WHERE expr] |
assignment ::= | column-name = expr |
Az UPDATE utasítás modositja a megadott tábla tartalmát. Ha WHERE feltételt megadunk akkor azok a rekordok változnak melyek EREDETI tartalma megfelel a megadott feltételnek. Ha WHERE feltételt nem adunk meg akkor a tábla összes rekordja megváltozik.
Az alábbi kulcsszavakat tilos adatbázisnévként, táblanévként, oszlopnévként vagy aliasnévként használni:
DATABASE DESC FOR INNER LEFT OF OUTER ALL AND BETWEEN BY CREATE DELETE DISTINCT DROP FROM GROUP HAVING IN INDEX INSERT INTO IS JOIN LIKE NOT NULL ON OR ORDER SELECT SET TABLE UNION UPDATE VALUES MIN MAX AVG SUM COUNT SUBSTR UPPER ABS WHERE BEGIN END COMMIT ROLLBACK FLUSH