SQL Nyelv

TIBSQL

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.


ALTER TABLE

sql-statement ::= ALTER TABLE table-name ADD colmn-name type

Az  ALTER TABLE utasitás új oszloppal egészit ki egy meglévő táblát. Ha a tábla már tartalmaz rekordokat akkor az új oszlop NULL értékekkel töltődik fel.

A type paraméter lehetséges értékeit lásd a CREATE TABLE utasitásnál. 


BEGIN TRANSACTION

sql-statement ::= BEGIN TRANSACTION

A BEGIN TRANSACTION lemezre irja az eddigi változásokat, és egy új tranzakciót indit. A tranzakcióban történt változásokat lehetőség van visszavonni "ROLLBACK" vagy veglegesíteni "COMMIT". Az adatbázis megnyitása, a COMMIT, ROLLBACK automatikusan BEGIN TRANSACTION -t is jelent, ezért ennek az utasitást a gyakorlatban szinte sosem kell használni.


COMMIT

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.


CREATE DATABASE

sql-statement ::= CREATE DATABASE database-name

A CREATE DATABASE utasitás létrehoz egy új, üres adatbázist.


megjegyzés

comment ::= /* multiple-lines */

Megjegyzések. A /* */ közötti karaktereket a TIBSQL figyelmen kivül hagyja.


CREATE TABLE

sql-command ::= CREATE  TABLE table-name (
    
column-def [, column-def]*
    
)
column-def ::= name type
type ::=

CHAR(méret) |
INTEGER |
FLOAT|
DATE|
LOGICAL

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.


DELETE

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.


DROP DATABASE

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).


DROP TABLE

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.


FLUSH

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" |
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 szint
   agregát-függvények
Egy-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,
Y: kezdo pozició
Z kivágandó karakterek száma

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.


INSERT

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.


ROLLBACK

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.


SELECT

sql-statement ::=

egyszerü-select
[union_op sql-statement]*
[ORDER BY expr-list]

egyszerü-select:=

SELECT [ DISTINCT] result
[FROM table-list]
[WHERE expr]
[GROUP BY expr-list]
[HAVING expr]

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:

  1. Input táblák kiválasztása, összekapcsolása a join feltételekkel -, eredmény egy olyan virtuális tábla ami a kiválasztott táblák összes oszlopát tartalmazza, szürve még csak a join feltételekkel van.
  2. A virtuális tábla szürése a WHERE feltétellel
  3. Ha egy UNION van és nincs GROUP BY és az ORDER BY oszlop nevekkel van megadva akkor a virtuális tábla rendezése az ORDER BY szerint
  4. SELECT és GROUP BY alapján Output tábla kialakitása, ez a tábla már csak a ki szelektált oszlopokat tartalmazza (beleértve a képlettel megadott oszlopokat is) , ha DISTINCT van megadva akkor a dupla sorok ki vannak szürve.
  5. Output tábla szürése a HAVING feltétel alapján
  6. Ha több UNION van akkor az 1..5 lépések ismétlésével ujabb "rész-output" táblák kialakitása és hozzáfüzése az eddigi output táblához, ha nem UNION ALL  akkor a dupla rekordok szürése
  7. Ha több UNION volt, vagy GROUP BY is volt, vagy az ORDER BY oszlop sorszámokkal van megadva akkor az OUTPUT tábla rendezése az ORDER BY szerint

 


UPDATE

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.


TIBSQL keywords

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 


Visit the TIBSQL Home Page