A Interbase / Firebird adatbázisok SELECT adatlekérdezési parancsa

SELECT

Adatokat olvas be egy vagy több táblából. Használható SQL, DSQL és isql esetén.

SELECT [TRANSACTION tranzakció]
[DISTINCT | ALL]
{* | <érték> [, <érték> ]}
[INTO :var [, :var ]]
FROM <tábla_hivatkozás> [, <tábla_hivatkozás> ]
[WHERE <keresési_feltétel>]
[GROUP BY oszlop [COLLATE rendezési_sorrend] [, oszlop [COLLATE rendezési_sorrend] ]
[HAVING <keresési_feltétel>]
[UNION <kereső_kifejezés> [ALL]]
[PLAN <terv_kifejezés>]
[ORDER BY <rendezés_lista>]
[FOR UPDATE [OF oszlop [, oszlop ]]];

<érték> = {
oszlop [<tömb_dimenzió>] | :változó
| <változó> | <kifejezés> | <függvény>
| udf ([<érték> [, <érték> ]])
| NULL | USER | RDB$DB_KEY | ?
} [COLLATE rendezési_sorrend] [AS alias]

<tömb_dimenzió> = [[x:]y [, [x:]y ]]

<változó> = szám | 'szöveg' | karakterkészlet_neve 'szöveg'

<függvény> = COUNT (* | [ALL] <érték> | DISTINCT <érték>)
| SUM ([ALL] <érték> | DISTINCT <érték>)
| AVG ([ALL] <érték> | DISTINCT <érték>)
| MAX ([ALL] <érték> | DISTINCT <érték>)
| MIN ([ALL] <érték> | DISTINCT <érték>)
| CAST (<érték> AS <adattípus>)
| UPPER (<érték>)
| GEN_ID (generátor, <érték>)

<tábla_hivatkozás> = <kapcsolt_tábla> | tábla | nézet | eljárás
[(<érték> [, <érték> ])] [alias]

<kapcsolt_tábla> = <tábla_hivatkozás> <kapcsolat_típusa> JOIN <tábla_hivatkozás>
ON <keresési_feltétel> | (<kapcsolt_tábla>)

<kapcsolat_típusa> = [INNER] JOIN
| {LEFT | RIGHT | FULL } [OUTER]} JOIN

<keresési_feltétel> = <érték> <műveleti_jel> {<érték> | (<egyetlen_sor_kiválasztása>)}

| <érték> [NOT] BETWEEN <érték> AND <érték>

| <érték> [NOT] LIKE <érték> [ESCAPE <érték>]

| <érték> [NOT] IN (<érték> [, <érték> ] | <kiválasztó_lista>)

| <érték> IS [NOT] NULL

| <érték> {>= | <=}

| <érték> [NOT] {= | < | >}

| {ALL | SOME | ANY} (<kiválasztó_lista>)

| EXISTS (<kereső_kifejezés>)

| SINGULAR (<kereső_kifejezés>)

| <érték> [NOT] CONTAINING <érték>

| <érték> [NOT] STARTING [WITH] <érték>

| (<keresési_feltétel>)

| NOT <keresési_feltétel>

| <keresési_feltétel> OR <keresési_feltétel>

| <keresési_feltétel> AND <keresési_feltétel>

<műveleti_jel> = {= | < | > | <= | >= | !< | !> | <> | !=}

<terv_kifejezés> =
[JOIN | [SORT] [MERGE]] ({<tervezési_adat> | <terv_kifejezés>}
[, {<tervezési_adat> | <terv_kifejezés>} ])

<tervezési_adat> = {tábla | alias}

{NATURAL | INDEX (<index> [, <index> ]) | ORDER <index>}

<rendezés_lista> =
{oszlop | int} [COLLATE rendezési_sorrend]
[ASC[ENDING] | DESC[ENDING]]
[, <rendezés_lista> ]

Paraméter

Ismertetés

kifejezés

egyetlen értéket szolgáltató érvényes SQL kifejezés

egyetlen_sor_kiválasztása

A SELECT on a single column that returns exactly one value

kiválasztó_lista

A SELECT on a single column that returns zero or more rows

kereső_kifejezés

A SELECT on a list of values that returns zero or more rows

Néhány megjegyzés a SELECT utasítással kapcsolatban:

my_array = varchar(6)[5,5]
A kettőspontot kell használnunk, ha a tömb indexe nem eggyel kezdődik. A következő példában egész számokból álló 11-elemű tömböt hozunk létre, mely a 20-as index-szel kezdődik, és a 30-assal végződik:
my_array = integer[20:30]

Fontos DSQL-nek átadott SQL utasításokban ne használjuk a lezáró pontosvesszőt. C-ben, C++-ban és isql-ben a pontosvessző utasítás lezáró karakter, ezért használni kell.

Paraméter

Ismertetés

TRANSACTION tranzakció

annak a tranzakciónak a neve, amely alatt az utasítás végrehajtásra kerül, csak SQL

SELECT [DISTINCT | ALL]

a beolvasandó adatot adja meg, DISTINCT opció esetén az ismétlődő értékek a halmazban csak egy egyszer fordulnak elő (az alapértelmezett ALL minden értéket továbbad)

{*|érték [, érték ]}

a csillag (*) a megadott tábla minden oszlopát beolvassa
az érték [, érték ] a megadott oszlopok, értékek és kifejezések listáját olvassa be

INTO :var [, var ]

egysoros kiválasztás csak beágyazott SQL esetén, megadja a gazdanyelvi változó listát, amelybe az értékeket beolvassa

FROM tábla_hivatkozás
[, tábla_hivatkozás ]

táblák, nézetek és tárolt eljárások listája, amelyekből adatbeolvasás történik, a lista tartalmazhat kapcsolatokat és a kapcsolatok egymásba ágyazhatók

tábla

az adatbázis meglevő táblájának a neve

nézet

az adatbázis meglevő nézetének a neve

eljárás

az adatbázis olyan meglevő eljárásának a neve, SELECT utasításként működik

alias

tábla, nézet vagy oszlop rövid helyettesítő neve, a tábla_hivatkozás-ban történt megadás után az alias szerepelhet a táblára vagy nézetre történő hivatkozáskor (oszlop alias nevet a PREPARE utasítással hozhatunk létre - DSQL)

kapcsolt_tábla

JOIN-t tartalmazó tábla hivatkozás

kapcsolat_típusa

a létrehozandó kapcsolat típusa, alapértelmezés: belső (INNER)

WHERE keresési_feltétel

azt a keresési feltételt adja meg, amely az összes rendelkezésre álló sor beolvasandó részhalmazát szolgáltatja

GROUP BY oszlop [, oszlop ]

a lekérdezés eredményének olyan csoportosítása, amelyben adott oszloplista alapján az azonos értékű sorok egy csoportba kerülnek

COLLATE rendezési_sorrend

a lekérdezés eredmény adatkészletének rendezési sorrendjét adja meg

HAVING keresési_feltétel

a GROUP BY utasítással együtt használjuk és olyan feltételt ad meg, amely szűkíti az eredmény adatkészletet

UNION [ALL]

két vagy több olyan táblát egyesít, amelyek adatszerkezete teljes mértékben megegyezik, az ALL opció minden azonos sort külön megtart ahelyett, hogy összevonná egybe

PLAN terv_kifejezés

megadja az InterBase optimalizáló számára az adatbetöltéskor alkalmazandó adatelérési tervet

tervezési_adat

megadja az adatelérési tervhez a táblát és az index metódust

ORDER BY rendezés_lista

megadja a rendezendő oszlopokat nevük vagy a lekérdezésben meglevő oszlopsorszámuk alapján, továbbá az eredmény adatkészletben a sorok rendezési módját (emelkedő ASC vagy csökkenő DESC)

Ismertetés A SELECT Adatokat olvas be egy vagy több táblából, nézetből vagy tárolt eljárásból. A SELECT utasítás változatai a következő lehetőségeket biztosítják:

Beágyazott alkalmazásokban minden olyan SELECT utasítás, amely nem tartozik kurzorhoz, csak egysoros lehet.
Beágyazott alkalmazásokban több sor beolvasását kurzorral segíti - DECLARE CURSOR utasításba beágyazott SELECT utasítással.
isql-ben közvetlenül beolvashatunk több sort.

Minden SELECT utasítás két kötelező (SELECT, FROM), valamint további lehetséges elemekből (INTO, WHERE, GROUP BY, HAVING, UNION, PLAN, ORDER BY) áll.  A következő táblázat megadja az egyes elemek feladatát és hogy mikor kötelező ezeket megadni:

Kulcsszó

Feladata

egysoros SELECT

többsoros SELECT

SELECT

felsorolja a beolvasandó oszlopokat

kötelező

kötelező

INTO

felsorolja a beolvasott oszlopok tárolására szolgáló gazdanyelvi változókat

kötelező

nincs engedélyezve

FROM

azonosítja a keresett értékeket tartalmazó táblát

kötelező

kötelező

WHERE

megadja azt a keresési feltételt, amellyel szűkítjük az eredmény részhalmazt, a WHERE feltétel allekérdezésnek nevezett saját SELECT utastást tartalmazhat

lehetséges

lehetséges

GROUP BY

adott oszlop azonos értékei alapján csoportosítja a sorokat, a HAVING-gel együtt használjuk

lehetséges

lehetséges

HAVING

a GROUP BY által szolgáltatott adatkészlet részhalmazát hozza létre

lehetséges

lehetséges

UNION

két vagy több SELECT utasítás eredmény adatkészletét egyesíti olyan egyetlen dinamikus táblává, amely ismétlődő sorokat nem tartalmaz

lehetséges

lehetséges

ORDER BY

megadja a rendezendő oszlopokat nevük vagy a lekérdezésben meglevő oszlopsorszámuk alapján, továbbá az eredmény adatkészletben a sorok rendezési módját (emelkedő ASC [alapértelmezett] vagy csökkenő DESC)

lehetséges

lehetséges

PLAN

a lekérdezés optimalizáló által normál esetben használt helyett használandó adatelérési tervet adja meg

lehetséges

lehetséges

FOR UPDATE

a DECLARE CURSOR utasítás SELECT feltétele után megjelenő azon oszlopokat adja meg, amelyeket a WHERE CURRENT OF feltétel használatával módosíthatunk

lehetséges

Mivel a SELECT utasítás csaknem mindenütt megtalálható és összetett utasítás, ennek részletes tárgyalása kívül meghaladja a jelen ismertető kereteit. Az isql-ben történő alkalmazását az Operations Guide taglalja. A SELECT utasítást és feltételeit az Embedded SQL Guide tárgyalja.

Néhány példa

A következő isql utasítás oszlopokat választ ki adott táblából:

SELECT JOB_GRADE, JOB_CODE, JOB_COUNTRY, MAX_SALARY FROM PROJECT;

A következő isql utasítás a helyettesítő csillagot (*) használja, hogy adott tábla minden oszlopát és sorát betöltse:

SELECT * FROM COUNTRIES;

A következő beágyazott SQL utasítás oszlopfüggvényt használ a tábla azon sorainak megszámolására, amelyek kielégítik a WHERE feltételt:

EXEC SQL
SELECT COUNT (*) INTO :cnt FROM COUNTRY
WHERE POPULATION > 5000000;

A következő isql utasítás a SELECT feltételben létrehozza a CITIES tábla aliasát (C), majd ezzel azonosítja az oszlopokat a WHERE feltételben:

SELECT C.CITY FROM CITIES C

WHERE C.POPULATION < 1000000;

A következő isql utasítás két oszlopot választ ki és a második oszlop alapján rendezi a sorokat:

SELECT CITY, STATE FROM CITIES

ORDER BY STATE;

Ez az isql utasítás LEFT JOIN-t hoz létre:

SELECT CITY, STATE_NAME FROM CITIES C

LEFT JOIN STATES S ON S.STATE = C.STATE

WHERE C.CITY STARTING WITH 'San';

A következő isql utasítás index alapján rendezetten letöltött eredményt szolgáltató lekérdezés optimalizáló tervet ad meg:

SELECT * FROM CITIES

PLAN (CITIES ORDER CITIES_1);

ORDER BY CITY

A következő isql utasítás két indexelt oszlopos háromtáblás JOIN-on alapuló lekérdezés optimalizáló tervet ad meg:

SELECT * FROM CITIES C, STATES S, MAYORS M
WHERE C.CITY = M.CITY AND C.STATE = M.STATE
PLAN JOIN (STATE NATURAL, CITIES INDEX DUPE_CITY,
MAYORS INDEX MAYORS_1);

A következő példában két rendszertáblát kérdezünk le (RDB$CHARACTER_SETS és RDB$COLLATIONS),  hogy kijelezzünk minden, rendelkezésünkre álló karakterkészletet, ID azonosítójukat, a karakterenkénti bájtok számát, és a rendezési sorrendet. 

Megjegyzés: az ORDER BY feltételben az oszlopok sorszámát használjuk

SELECT RDB$CHARACTER_SET_NAME, RDB$CHARACTER_SET_ID,
        RDB$BYTES_PER_CHARACTER, RDB$COLLATION_NAME

FROM RDB$CHARACTER_SETS JOIN RDB$COLLATIONS

ON RDB$CHARACTER_SETS.RDB$CHARACTER_SET_ID =

RDB%COLLATIONS.RDB$CHARACTER_SET_ID

ORDER BY 1, 4;



© Szabó János (www.dunaweb.hu/~szabojanos/)

Eredeti letöltési cím:
http://www.dunaweb.hu/~szabojanos/Az%20InterBase%20-%20bemutat%f3p%e9ld%e1ny/Fejezetek/D1/SELECT.htm

Javasolt weblapcím a teljes szöveg megismerésére:
http://www.dunaweb.hu/~szabojanos/Az%20InterBase%20-%20bemutat%f3p%e9ld%e1ny/index.htm

Az oldalt összeállította eMeL 2005.06.23