3. Lokßlnφ SQL

BDE umo╛≥uje p°istupovat jak k lokßlnφm tak i vzdßlen²m databßzov²m tabulkßm prost°ednictvφm Lokßlnφho SQL. Lokßlnφ SQL (n∞kdy naz²vanΘ klientskΘ SQL) je podmno╛ina ANSI-92 SQL roz╣φ°enß o podporu pojmenovacφch konvencφ Paradoxu a dBASE. Lokßlnφ SQL umo╛≥uje pou╛φvat SQL k dotazovßnφ standardnφch databßzov²ch tabulek, kterΘ nesφdlφ na databßzovΘm serveru (tabulek Paradoxu a dBASE) stejn∞ jako vzdßlen²ch SQL server∙. Lokßlnφ SQL je takΘ pou╛itelnΘ k provßd∞nφ vφcetabulkov²ch dotaz∙ mezi lokßlnφmi tabulkami a tabulkami na vzdßlen²ch SQL serverech.
SQL p°φkazy je mo╛no rozd∞lit do dvou skupin:

Existujφ jistß pravidla pro aplikovßnφ Lokßlnφho SQL. Tato pravidla urΦujφ pojmenovßnφ sloupc∙ a tabulek, formßt hodnot DATE, pou╛φvßnφ logick²ch hodnot, a dal╣φ aspekty jazyka Lokßlnφho SQL. Nedodr╛enφ t∞chto pravidel zp∙sobuje, ╛e p°φkazy SQL nepracujφ. Tato pravidla jsou popsßna v nßsledujφcφch bodech:
JmΘna tabulek
Standard ANSI SQL p°edpoklßdß, ╛e ka╛dΘ jmΘno tabulky je tvo°eno jednφm slovem slo╛en²m z alfanumerick²ch znak∙ a znak∙ podr╛enφ. Nap°.
SELECT *
FROM customer
Lokßlnφ SQL podporuje ·plnou specifikaci souboru pro jmΘno tabulky. JmΘno tabulky ve tvaru specifikace souboru musφ b²t uzav°eno v uvozovkßch nebo apostrofech. Nap°.
SELECT * FROM 'PARTS.DBF'
SELECT * FROM "C:\SAMPLE\PARTS.DBF"
Lokßlnφ SQL takΘ podporuje BDE p°ezdφvky pro jmΘna tabulek. Nap°.
SELECT * FROM ":PDOX:TABLE1"
Pokud pro lokßlnφ jmΘno tabulky vynechßme p°φponu souboru, pak se p°edpoklßdß, ╛e se jednß o tabulku typu specifikovanΘho v Φßsti Default Driver na strßnce System konfiguraΦnφ utility BDE nebo implicitnφ typ pro standardnφ p°ezdφvku p°i°azenou k dotazu nebo tabulce. Pokud jmΘno tabulky odpovφdß n∞kterΘmu klφΦovΘmu slovu SQL, pak jej takΘ musφme uzav°φt do apostrof∙ nebo uvozovek. Nap°.
SELECT PASSID FROM "PASSWORD"
JmΘna sloupc∙
Standard ANSI SQL p°edpoklßdß, ╛e ka╛dΘ jmΘno sloupce je tvo°eno jednφm slovem slo╛en²m z alfanumerick²ch znak∙ a znak∙ podr╛enφ. Lokßlnφ SQL podporuje vφceslovnφ jmΘna sloupc∙ a jmΘna sloupc∙, kterΘ se shodujφ s klφΦov²mi slovy SQL. Uzavφrßme je do apostrof∙ nebo uvozovek a jsou p°edchßzeny SQL jmΘnem tabulky nebo korelaΦnφm jmΘnem tabulky. Nap°. jmΘno sloupce v nßsledujφcφm p°φkazu je tvo°eno dv∞mi slovy:
SELECT E."Emp Id" FROM EMPLOYEE E
V dal╣φm p°φklad∞, jmΘno sloupce se shoduje s klφΦov²m slovem DATE:
SELECT DATELOG."DATE" FROM DATELOG
Formßty DATE
Lokßlnφ SQL oΦekßvß datumovΘ konstanty v US formßtu MM/DD/YY nebo MM/DD/YYYY. Mezinßrodnφ datumovΘ formßty nejsou podporovßny. K zabrßn∞nφ datumov²m konstantßm p°ed rozlo╛enφm SQL pro aritmetickΘ v²poΦty, je zapot°ebφ je uzav°φt do uvozovek. Tφm zabrßnφme nap°. 1/23/1999 od 1 d∞leno 23 d∞leno 1999.
SELECT *
FROM orders
WHERE (saledate <= "1/23/1998")
┌vodnφ nuly pro polo╛ky m∞sφce a dn∙ jsou volitelnΘ.
Pokud rok nemß specifikovßno stoletφ, pak stoletφ urΦuje nastavenφ FORDIGITYEAR BDE. Kdy╛ FOURDIGITYEAR je nastaveno na FALSE a rok je specifikovßn pouze dvojicφ Φφslic, pak roky 49 a men╣φ p°edchßzφ 20 a roky 50 a v∞t╣φ p°edchßzφ 19. Nap°. s nastavenφm FOURDIGITYEAR na FALSE, nßsledujφcφ p°φkaz SQL vracφ °ßdky, kde sloupec SaleDate obsahuje datumy mezi ?5/5/1980? a ?5/5/2030?.
SELECT *
FROM orders
WHERE (saledate <= "5/5/30") OR  (saledate >= "5/5/80")
Pokud pot°ebujeme zadat jinΘ datumovΘ konstanty, pak je nutno pou╛φt Φty°znakov² rok. Nap°.
SELECT *
FROM orders
WHERE (saledate >= "5/5/1930") OR  (saledate <= "5/5/2080")
Formßty TIME
Lokßlnφ SQL oΦekßvß ΦasovΘ konstanty ve tvaru hh:mm:ss AP/PM, kde hh jsou hodiny, mm jsou minuty a ss jsou sekundy. Kdy╛ vklßdßme nov² °ßdek s hodnotou Φasu, pak AM/PM je volitelnΘ a nezßle╛φ na velikosti pφsmen. ╚asovß konstanta musφ b²t uzav°ena v uvozovkßch:
INSERT INTO WorkOrder (ID, StartTime)
VALUES ("B00120","10:30:00 PM")
K urΦenφ, kterß polovina dne je Φasovou konstantou urΦena, jsou mo╛nΘ dva zp∙soby. Pokud je pou╛ito AM nebo PM pak to urΦuje p°φslu╣nou polovinu dne. Pokud tento specifikßtor nenφ uveden, pak hodinovß polo╛ka je porovnßna s 12. Hodinovß polo╛ka p°episuje specifikßtor AM/PM. Nap°. Φasovß konstanta "15:03:22 AM" je p°evedena na "3:03:22 PM".
LogickΘ konstanty
LogickΘ konstanty TRUE a FALSE mohou b²t zapisovßny s nebo bez uvozovek. Nap°.
SELECT *
FROM transfers
WHERE (paid = TRUE) AND NOT (incomplete = "FALSE")
KorelaΦnφ jmΘna tabulek
KorelaΦnφ jmΘna tabulek jsou pou╛φvßny k explicitnφmu p°i°azenφ sloupc∙ k tabulce ze kterΘ pochßzφ. To je obzvlß╣t∞ u╛iteΦnΘ, kdy╛ je v jednom dotazu vφce sloupc∙ stejnΘho jmΘna (obvykle ve vφcetabulkov²ch dotazech). KorelaΦnφ jmΘno tabulky je definovßno za jmΘnem tabulky v klauzuli FROM dotazu SELECT unikßtnφm identifikßtorem. Tento identifikßtor m∙╛e b²t pou╛it jako p°edpona jmΘna sloupce.
Pokud jmΘno tabulky nenφ uzav°eno v uvozovkßch, pak jmΘno tabulky je implicitnφ korelaΦnφ jmΘno. Explicitnφ korelaΦnφ jmΘno stejnΘ jako jmΘno tabulky nemusφ b²t specifikovßno v klauzuli FROM a jmΘno tabulky m∙╛e p°edchßzet jmΘno sloupce v jin²ch Φßstech p°φkazu.
SELECT *
FROM customer
  LEFT OUTER JOIN orders ON (customer.custno = orders.custno)
Pokud jmΘno tabulky je uzav°eno v uvozovkßch, pak musφme pou╛φt jednu z nßsledujφcφch dvou mo╛nostφ: Lze takΘ pou╛φt zkrßcenΘ jmΘno jako korelaΦnφ jmΘno v klauzuli FROM.
SELECT *
FROM "customer.db" C
  LEFT OUTER JOIN "orders.db" O ON (C.custno = O.custno)
KorelaΦnφ jmΘna sloupc∙
Pou╛ijeme klφΦovΘ slovo AS k p°i°azenφ korelaΦnφho jmΘna ke sloupci, agregovanΘ hodnot∞ nebo konstant∞. KorelaΦnφ jmΘna sloupc∙ nemohou b²t uzav°eny v uvozovkßch a tedy nemohou obsahovat mezery. V nßsledujφcφm p°φkazu sub a word jsou korelaΦnφmi jmΘny.
SELECT SUBSTRING(company FROM 1 FOR 1) AS sub, "Text" AS word
FROM customer
Vno°enΘ komentß°e
Komentß°e mohou b²t pro zv²╣enφ srozumitelnosti vno°eny do p°φkaz∙ SQL. Text je pova╛ovßn za komentß°, pokud je uzav°en mezi symboly /* a */. Tyto symboly nemusφ b²t na stejnΘm °ßdku.
/*
  Toto je komentß°
*/
SELECT SUBSTRING(company FROM 1 FOR 1) AS sub, "Text" AS word
FROM customer
Komentß°e mohou b²t takΘ uvnit° p°φkazu SQL. To je u╛iteΦnΘ p°i lad∞nφ SQL p°φkazu (odstran∞nφ n∞kterΘ klauzule p°i testovßnφ).
SELECT company
FROM customer
/* WHERE (state = "TX") */
ORDER BY company

P°φkazy jazyka manipulace dat (DML)

P°i popisu DML pou╛ijeme tyto kategorie:
Seznam p°φkaz∙
Lokßlnφ SQL podporuje nßsledujφcφ p°φkazy DML: P°φkaz SELECT
P°φkaz SELECT je pou╛φvßn k zφskßvßnφ dat z jednΘ nebo vφce tabulek. SELECT, kter² zφskßvß data z vφce tabulek se naz²vß spojenφ. Lokßlnφ SQL podporuje nßsledujφcφ tvar p°φkazu SELECT:
SELECT [DISTINCT] * | seznam_sloupc∙
 FROM tabulkov²_odkaz
 [WHERE vyhledßvacφ_podmφnka]
 [ORDER BY seznam_po°adφ]
 [GROUP BY seznam_skupiny]
 [HAVING seskupovacφ_podmφnka]
P°φkaz SELECT pou╛φvßme k: Klauzule SELECT definuje seznam prvk∙ vracen²ch p°φkazem SELECT. Klauzule SELECT pou╛φvß Φßrkami odd∞len² seznam slo╛en² ze jmen sloupc∙, konstant, a sloupc∙ nebo konstant modifikovan²ch funkcemi. Nelze pou╛φvat parametry k reprezentaci jmen sloupc∙. K zφskßnφ hodnot v╣ech sloupc∙ pou╛ijeme hv∞zdiΦku.
Sloupce v seznamu sloupc∙ klauzule SELECT mohou b²t z vφce ne╛ jednΘ tabulky, ale mohou b²t pouze z t∞ch tabulek, kterΘ jsou uvedeny v klauzuli FROM. Klauzule FROM identifikuje tabulky, ze kter²ch jsou zφskßvßna data.
Nßsledujφcφ p°φkaz zφskßvß data ze dvou sloupc∙ a v╣ech °ßdk∙ tabulky.
SELECT custno, company
FROM orders
DISTINCT pou╛ijeme k omezenφ zφskßvßnφ dat na pouze li╣φcφ se °ßdky. ╪ßdky rozli╣ujeme na zßklad∞ kombinace sloupc∙ v seznamu sloupc∙ klauzule SELECT. DISTINCT m∙╛e b²t pou╛it pouze s jednoduch²mi typy sloupc∙ jako je CHAR a INTEGER (nelze pou╛φt se slo╛it²mi typy sloupc∙ jako BLOB nebo MEMO).
P°φkaz SELECT m∙╛e takΘ zφskßvat °ßdky ze souboru QBE Paradoxu. Je to aproximace pohledu SQL.
SELECT *
FROM "customers.qbe"

P°φkaz DELETE

Ru╣φ jeden nebo vφce °ßdk∙ v tabulce.
DELETE FROM tabulkov²_odkaz
[WHERE tvrzenφ]
Delete pou╛ijeme k zru╣enφ jednoho nebo vφce °ßdk∙ z existujφcφ tabulky.
DELETE FROM "employee.db"
Volitelnß klauzule WHERE omezuje ru╣enΘ °ßdky na podmno╛inu °ßdk∙ v tabulce. Pokud klauzule WHERE nenφ specifikovßna, pak jsou zru╣eny v╣echny °ßdky tabulky.
DELETE FROM "employee.db"
WHERE (empno IN (SELECT empno FROM "old_employee.db"))
JmΘna tabulek nemohou b²t p°edßvßny pomocφ parametr∙.

P°φkaz INSERT
P°idßvß jeden nebo vφce nov²ch °ßdk∙ dat do tabulky.
INSERT INTO tabulkov²_odkaz
[(seznam_sloupc∙)]
VALUES (vklßdanΘ_hodnoty)
P°φkaz INSERT pou╛φvßme k p°idßvßnφ nov²ch °ßdk∙ dat k tabulce.
Tabulkov² odkaz v klauzuli INTO pou╛ijeme ke specifikaci tabulky p°ijφmajφcφ data.
Seznam sloupc∙ v Φßrkami odd∞lovanΘm seznamu uzav°enΘm v zßvorkßch je voliteln². Klauzule VALUES je Φßrkami odd∞len² seznam vklßdan²ch hodnot, uzav°en² v zßvorkßch. Pokud seznam sloupc∙ nenφ specifikovßn, pak datovΘ hodnoty jsou ulo╛eny do polo╛ek v po°adφ jak jsou definovßny ve struktu°e tabulky. PoΦet hodnot musφ odpovφdat poΦtu sloupc∙ v tabulce.
INSERT INTO "holdings.dbf"
VALUES (4094095, "BORL", 5000, 10.500, "1/2/1998")
Pokud je pou╛it seznam sloupc∙, pak novΘ hodnoty jsou uklßdßny do sloupc∙ uveden²ch v seznamu a to v po°adφ jejich uvedenφ v seznamu. Do ostatnφch sloupc∙ (kterΘ nejsou uvedeny v seznamu) jsou vlo╛eny hodnoty NULL.
INSERT INTO "customer.db"
(custno, company)
VALUES (9842, "Borland International, Inc.")
Pro p°idßvßnφ °ßdk∙ z jednΘ tabulky do jinΘ vynechßme klφΦovΘ slovo VALUES a pou╛ijeme poddotaz jako zdroj pro novΘ °ßdky.
INSERT INTO "customer.db"
(custno, company)
SELECT custno, company
FROM "oldcustomer.db"
VklßdanΘ hodnoty mohou b²t p°edßny p°φkazu INSERT pomocφ parametr∙. Parametry nelze pou╛φt pro odkaz na tabulku nebo v seznamu sloupc∙.
Poznßmka: Vklßdßnφ jednoho nebo vφce °ßdk∙ z jednΘ tabulky do jinΘ prost°ednictvφm poddotazu nenφ podporovßno.

P°φkaz UPDATE
Modifikuje jeden nebo vφce °ßdk∙ v existujφcφ tabulce.
UPDATE tabulkov²_odkaz
SET sloupcov²_odkaz = vklßdanß_hodnota [, sloupcov²_odkaz = vklßdanß_hodnota...]
[WHERE tvrzenφ]
Tabulkov² odkaz v klauzuli UPDATE pou╛ijeme ke specifikaci tabulky p°ijφmajφcφ datovΘ zm∞ny.
Klauzule SET je Φßrkami odd∞len² seznam aktualizovan²ch v²raz∙. Ka╛d² v²raz je slo╛en ze jmΘna sloupce, operßtoru p°i°azenφ (=) a novΘ hodnoty pro tento sloupec. Novß hodnota m∙╛e b²t konstanta, jedna hodnota vrßcenß z poddotazu nebo n∞co z p°edchozφho modifikovanΘ funkcφ. Poddotaz musφ vracet pouze jeden °ßdek s jednφm sloupcem.
UPDATE salesinfo
SET taxrate = 0.0825
WHERE (state = "CA")
VklßdanΘ hodnoty mohou b²t p°edßvßny p°φkazu pomocφ parametr∙. Parametry nelze pou╛φt pro tabulkovΘ odkazy a seznam sloupc∙. Volitelnß klauzule WHERE omezuje aktualizace na podmno╛inu °ßdk∙ v tabulce. Pokud klauzule WHERE nenφ pou╛ita, pak jsou aktualizovßny v╣echny °ßdky v tabulce.

Seznam klauzulφ
Lokßlnφ SQL podporuje nßsledujφcφ klauzule p°φkaz∙ SQL: Klauzule FROM
Specifikuje tabulky ze kter²ch p°φkaz SELECT zφskßvß data.
FROM tabulkov²_odkaz [, tabulkov²_odkaz...]
Hodnota pro klauzuli FROM je Φßrkami odd∞len² seznam jmen tabulek. Specifikace jmen tabulek musφ spl≥ovat pojmenovacφ konvence pro tabulky Lokßlnφho SQL. Nap°. nßsledujφcφ p°φkaz zφskßvß data z jednΘ tabulky Paradoxu.
SELECT *
FROM "customer.db"
TabulkovΘ odkazy pro klauzuli FROM nelze p°edßvat p°es parametry.

Klauzule WHERE
Specifikuje filtrovacφ podmφnku pro p°φkazy SELECT a UPDATE.
WHERE tvrzenφ
Klauzuli WHERE pou╛φvßme k omezenφ efektu p°φkaz∙ SELECT a UPDATE na podmno╛inu °ßdk∙ v tabulce. Pou╛itφ klauzule WHERE je nepovinnΘ.
Hodnota pro klauzuli WHERE je jeden nebo vφce logick²ch v²raz∙ (tvrzenφ), kterΘ po vyhodnocenφ pro ka╛d² °ßdek tabulky dßvajφ TRUE nebo FALSE. Pouze ty °ßdky, kterΘ dßvajφ TRUE jsou zφskßny p°φkazem SELECT nebo modifikovßny p°φkazem UPDATE. Nap°. nßsledujφcφ p°φkaz SELECT zφskßvß v╣echny °ßdky, kterΘ ve sloupci STATE obsahujφ hodnotu "CA".
SELECT company, state
FROM customer
WHERE state = "CA"
Vφce tvrzenφ musφ b²t odd∞leno jednφm z logick²ch operßtor∙ (OR nebo AND). Ka╛dΘ tvrzenφ m∙╛e b²t negovßno operßtorem NOT. Zßvorky mohou b²t pou╛ity k izolovßnφ logick²ch porovnßvßnφ a skupin porovnßvßnφ k vytvo°enφ odli╣n²ch kritΘriφ. Nap°. nßsledujφcφ p°φkaz SELECT zφskßvß v╣echny °ßdky, kterΘ ve sloupci STATE obsahujφ hodnoty "CA" nebo "HI".
SELECT company, state
FROM customer
WHERE (state = "CA") OR (state = "HI")
Dal╣φ p°φkaz SELECT zφskßvß v╣echny °ßdky, kde ve sloupci SHAPE je "round" nebo "square", ale pouze tehdy, kdy╛ sloupec COLOR obsahuje "red".
SELECT shape, color, cost
FROM objects
WHERE ((shape = "round") OR (shape = "square")) AND (color = "red")
Bez zßvorek mß p°edchozφ p°φkaz jin² v²znam. Zφskßvß v╣echny °ßdky kde SHAPE je "round" a to bez ohledu na sloupec COLOR a takΘ v╣echny °ßdky kde SHAPE je "square" s souΦasn∞ COLOR je "red". Tedy dostaneme i °ßdek kde SHAPE je "round" a COLOR je "blue".
SELECT shape, color, cost
FROM objects
WHERE shape = "round" OR shape = "square" AND color = "red"
V klauzuli WHERE jsou podporovanΘ poddotazy. Poddotazy pracujφ jako Φßst tvrzenφ k omezenφ poΦtu °ßdk∙ vracen²ch vn∞j╣φm nebo nad°φzen²m dotazem.
V klauzuli WHERE nelze p°edßvat odkazy sloupc∙ pomocφ parametr∙. PorovnßvanΘ hodnoty lze parametry p°edßvat.
Poznßmka: Klauzule WHERE filtruje data p°ed agregovßnφm klauzulφ GROUP BY. Pro filtrovßnφ na zßklad∞ agregovan²ch hodnot pou╛φvßme klauzuli HAVING.

Klauzule ORDER BY
╪adφ °ßdky zφskanΘ p°φkazem SELECT.
ORDER BY sloupcov²_odkaz [, sloupcov²_odkaz...] [ASC|DESC]
Klauzuli ORDER BY pou╛ijeme k se°azenφ °ßdk∙ zφskan²ch p°φkazem SELECT na zßklad∞ hodnot jednoho nebo vφce sloupc∙.
Hodnota pro klauzuli ORDER BY je Φßrkami odd∞len² seznam jmen sloupc∙. Sloupce v tomto seznamu musφ b²t takΘ v klauzuli SELECT p°φkazu dotazu. Sloupce v seznamu ORDER BY mohou b²t z jednΘ nebo vφce tabulek. ╚φselnß reprezentace relativnφ pozice sloupce v klauzuli SELECT m∙╛e b²t pou╛ita mφsto jmΘna sloupce. V klauzuli ORDER BY mohou b²t takΘ pou╛ita korelaΦnφ jmΘna sloupc∙.
Pou╛ijeme ASC (nebo ASCENDING) k zaji╣t∞nφ vzestupnΘho °azenφ (od nejmen╣φho k nejv∞t╣φmu), nebo DESC (nebo DESCENDING) pro sestupnΘ °azenφ. Pokud nenφ specifikovßno, pak je implicitn∞ pou╛ito ASC.
Nßsledujφcφ p°φkaz °adφ v²sledkovou mno╛inu sestupn∞ podle roku zφskanΘho ze sloupce LASTINVOICEDATA, pak vzestupn∞ podle sloupce STATE a pak vzestupn∞ podle sloupce COMPANY p°evedenΘho na velkß pφsmena.
SELECT EXTRACT(YEAR FROM lastinvoicedate) AS YY, state, UPPER(company)
FROM customer
ORDER BY YY DESC, state ASC, 3
SloupcovΘ odkazy nemohou b²t p°edßvßny pomocφ parametr∙.

Klauzule GROUP BY
Kombinuje hodnoty sloupc∙ °ßdk∙ do jednoho °ßdku.
GROUP BY sloupcov²_odkaz [, sloupcov²_odkaz...]
Klauzuli GROUP BY pou╛ijeme ke kombinovßnφ °ßdk∙ se stejn²mi hodnotami sloupc∙ do jednoho °ßdku. KritΘrium pro kombinovßnφ °ßdk∙ je zalo╛eno na hodnotßch sloupc∙ specifikovan²ch v klauzuli GROUP BY. D∙vodem pro pou╛itφ klauzule GROUP BY je kombinovat jednu nebo vφce hodnot sloupc∙ (agregovat) do jednΘ hodnoty a poskytnout jeden nebo vφce sloupc∙ k jednoznaΦnΘ identifikaci agregovan²ch hodnot. Klauzule GROUP BY m∙╛e b²t pou╛ita pouze, kdy╛ na jeden nebo vφce sloupc∙ je aplikovßna agregaΦnφ funkce.
Hodnota pro klauzuli GROUP BY je Φßrkami odd∞lovan² seznam sloupc∙. Ka╛d² sloupec v tomto seznamu musφ spl≥ovat nßsledujφcφ kritΘria:

Kdy╛ je pou╛ita klauzule GROUP BY, pak v╣echny sloupce tabulky v klauzuli SELECT dotazu musφ mφt alespo≥ jedno nßsledujφcφ kritΘrium nebo nem∙╛e b²t vlo╛en do klauzule SELECT: Konstanty v klauzuli SELECT nejsou subjektem p°edchozφch kritΘriφ.
╪ßdky jsou rozd∞leny na zßklad∞ specifikovan²ch sloupc∙ v seznamu sloupc∙. V╣echny °ßdky se stejn²mi hodnotami v t∞chto sloupcφch jsou kombinovßny do jednoho °ßdku (nebo logickΘ skupiny). Sloupce, kterΘ jsou subjektem agregaΦnφch funkcφ zφskajφ svΘ hodnoty ze v╣ech °ßdk∙ ve skupin∞. V╣echny sloupce kterΘ nejsou subjektem agregaΦnφch funkcφ si hodnoty ponechajφ a slou╛φ k identifikaci skupin. Nap°. v nßsledujφcφm p°φkazu SELECT, hodnoty ve sloupci SALES jsou agregovßny (seΦteny) do skupin na zßklad∞ hodnot sloupce COMPANY. Tφm zφskßme celkovΘ prodeje v jednotliv²ch podnicφch.
SELECT company, SUM(sales) AS TOTALSALES
FROM sales1998
GROUP BY company
ORDER BY company
Sloupce mohou b²t v klauzuli GROUP BY identifikovßny referenΦnφm jmΘnem sloupce, mφsto aktußlnφm jmΘnem sloupce. Nßsledujφcφ p°φkaz seskupuje podle prvnφho sloupce (COMPANY), reprezentovan²m jmΘnem korelaΦnφm jmΘnem sloupce Co.
SELECT company AS Co, SUM(sales) AS TOTALSALES
FROM sales1998
GROUP BY Co
ORDER BY 1
Poznßmka: OdvozenΘ hodnoty (poΦitatelnΘ polo╛ky) nemohou b²t pou╛ity jako zßklad pro GROUP BY.
Odkazy sloupc∙ v klauzuli GROUP BY nelze p°edßvat prost°ednictvφm parametr∙.

Klauzule HAVING
Specifikuje filtrovacφ podmφnku pro p°φkaz SELECT.
HAVING tvrzenφ
Klauzuli HAVING pou╛φvßme k omezenφ zφskßvan²ch °ßdk∙ p°φkazem SELECT na podmno╛inu °ßdk∙, kde agregovanΘ hodnoty sloupc∙ spl≥ujφ specifikovanß kritΘria. Tato klauzule m∙╛e b²t pou╛ita pouze v p°φkazu SELECT, kter²:

Hodnota pro klauzuli HAVING je jeden nebo vφce logick²ch v²raz∙ (tvrzenφ), jejich╛ vyhodnocenφm zφskßme TRUE nebo FALSE pro ka╛d² agregovan² °ßdek zφskan² z tabulky. Pouze ty °ßdky, jejich vyhodnocenφm zφskßme TRUE jsou zφskßny p°φkazem SELECT. Nap°. p°φkaz SELECT uveden² dßle zφskßvß v╣echny °ßdky jejich celkov² prodej p°ekraΦuje 1000.
SELECT company, SUM(sales) AS TOTALSALES
FROM sales1998
GROUP BY company
HAVING (SUM(sales) >= 1000)
ORDER BY company
Vφce tvrzenφ musφ b²t odd∞leno n∞kter²m logick²m operßtorem (OR nebo AND). Ka╛dΘ tvrzenφ m∙╛e b²t negovßno operßtorem NOT. Zßvorky mohou b²t pou╛ity k izolovßnφ logick²ch porovnßvßnφ a skupin porovnßvßnφ k zφskßnφ jinΘho kritΘria.
P°φkaz SELECT m∙╛e obsahovat jak klauzuli WHERE, tak i klauzuli HAVING. Klauzule WHERE filtruje data pou╛φvanß k agregovßnφ. Klauzule HAVING pak filtruje data po agregaci. Nßsledujφcφ dotaz SELECT provßdφ stejnΘ operace jako d°φve, ale pouze pro ty °ßdky, kterΘ ve sloupci STATE majφ CA.
SELECT company, SUM(sales) AS TOTALSALES
FROM sales1998
WHERE (state = "CA")
GROUP BY company
HAVING (SUM(sales) >= 1000)
ORDER BY company
V klauzuli HAVING jsou podporovßny poddotazy. Poddotazy pracujφ jako vyhledßvacφ podmφnky k omezenφ poΦtu °ßdk∙ vrßcen²ch vn∞j╣φm dotazem.
Poznßmka: Klauzule HAVING filtruje data po agregovßnφ klauzulφ GROUP BY. Pro filtrovßnφ hodnot °ßdk∙ p°ed agregovßnφm pou╛φvßme klauzuli WHERE.
Seznam funkcφ
Lokßlnφ SQL podporuje nßsledujφcφ funkce jazyka manipulacφ dat: Spojovacφ funkce
Spojuje dv∞ znakovΘ hodnoty.
hodnota1 || hodnota2
Nap°. nßsledujφcφ v²raz vrazφ °et∞zec ABCdef.
"ABC" || "def"
Nßsledujφcφ p°φkaz pou╛φvß spojovacφ funkci ke slouΦenφ hodnot sloupc∙ a znakovΘ konstanty.
SELECT lastname || ", " || firstname
FROM names
Spojovacφ funkce m∙╛e b²t pou╛φvßna pouze se znakov²mi sloupci nebo konstantami. Pro pou╛itφ na hodnotßch jin²ch datov²ch typ∙, hodnota musφ b²t nejprve p°evedena na CHAR pomocφ funkce CAST.

Funkce LOWER
P°evßdφ v╣echny znaky na malß pφsmena.
LOWER(sloupcov²_odkaz)
Funkci LOWER pou╛ijeme pro p°evod v╣ech znak∙ ve sloupci tabulky nebo znakovΘ konstant∞ na malß pφsmena. Nap°. nßsledujφcφ p°φkaz SELECT zobrazuje hodnoty ze sloupce NAME mal²mi pφsmeny.
SELECT LOWER(name)
FROM country
Kdy╛ funkci aplikujeme na data zφskanß p°φkazem SELECT, pak efekt je p°echodn² a neovliv≥uje ulo╛enß data. P°i aplikovßnφ na vklßdanou hodnotu p°φkazu UPDATE, efekt je trval² a p°evßdφ uklßdanΘ hodnoty.
Funkce LOWER m∙╛e b²t pou╛ita v klauzuli WHERE p°i porovnßvßnφ °et∞zc∙ k ignorovßnφ velikosti pφsmen. Funkci aplikujeme na ob∞ strany porovnßvacφho operßtoru (je-li na jednΘ stran∞ znakovß konstanta, pak staΦφ kdy╛ ji zapφ╣eme mal²mi pφsmeny).
SELECT *
FROM names
WHERE LOWER(lastname) = "smith"
LOWER m∙╛e b²t pou╛φvßna pouze se znakov²mi sloupci nebo konstantami. Pro pou╛itφ na hodnotßch jin²ch datov²ch typ∙, hodnota musφ b²t nejprve p°evedena na CHAR pomocφ funkce CAST.

Funkce UPPER
P°evßdφ v╣echny znaky na velkß pφsmena.
UPPER(sloupcov²_odkaz)
Funkci UPPER pou╛ijeme pro p°evod v╣ech znak∙ ve sloupci tabulky nebo znakovΘ konstant∞ na velkß pφsmena. Nap°. nßsledujφcφ p°φkaz SELECT zobrazuje hodnoty ze sloupce NAME velk²mi pφsmeny. Proto╛e funkce je aplikovßna na sloupec filtru i na porovnßvanou hodnotu, tak p°i filtrovßnφ nenφ rozli╣ovßna velikost pφsmen.
SELECT name, capital, continent
FROM country
WHERE UPPER(name) LIKE UPPER("Pe%")
Kdy╛ funkci aplikujeme na data zφskanß p°φkazem SELECT, pak efekt je p°echodn² a neovliv≥uje ulo╛enß data. P°i aplikovßnφ na vklßdanou hodnotu p°φkazu UPDATE, efekt je trval² a p°evßdφ uklßdanΘ hodnoty.
UPPER m∙╛e b²t pou╛φvßna pouze se znakov²mi sloupci nebo konstantami. Pro pou╛itφ na hodnotßch jin²ch datov²ch typ∙, hodnota musφ b²t nejprve p°evedena na CHAR pomocφ funkce CAST.

Funkce SUBSTRING
Extrahuje pod°et∞zec z °et∞zce.
SUBSTRING(sloupcov²_odkaz FROM poΦßteΦnφ_index [FOR dΘlka])
SUBSTRING pou╛φvßme k extrakci pod°et∞zce ze sloupce tabulky nebo znakovΘ konstanty specifikovanΘ ve sloupcovΘm odkazu.
FROM je znakovß pozice od kterΘ zaΦφnß pod°et∞zec v p∙vodnφm °et∞zci. Znaky v °et∞zci jsou Φφslovßny od 1. FOR je nepovinnΘ a specifikuje dΘlku extrahovanΘho pod°et∞zce. Je-li FOR vynechßno, pak pod°et∞zec konΦφ koncem °et∞zce.
Nßsledujφcφ p°φklad vracφ hodnotu BCD.
SELECT SUBSTRING("ABCDE" FROM 2 FOR 3) AS Sub
FROM country
Nßsledujφcφ p°φkaz ignoruje prvnφ znaky ve sloupci NAME.
SELECT SUBSTRING(name FROM 2)
FROM country
Kdy╛ funkci aplikujeme na data zφskanß p°φkazem SELECT, pak efekt je p°echodn² a neovliv≥uje ulo╛enß data. P°i aplikovßnφ na vklßdanou hodnotu p°φkazu UPDATE, efekt je trval² a p°evßdφ uklßdanΘ hodnoty.
SUBSTRING m∙╛e b²t pou╛φvßna pouze se znakov²mi sloupci nebo konstantami. Pro pou╛itφ na hodnotßch jin²ch datov²ch typ∙, hodnota musφ b²t nejprve p°evedena na CHAR pomocφ funkce CAST.

Funkce TRIM
Odstra≥uje poΦßteΦnφ a koncovΘ znaky z °et∞zce.
TRIM([LEADING|TRAILING|BOTH] [odstra≥ovan²_znak] FROM sloupcov²_odkaz)
TRIM pou╛φvßme k odstran∞nφ ·vodnφch nebo koncov²ch znak∙ ze sloupce tabulky nebo znakovΘ konstanty. Funkce TRIM ru╣φ znaky umφst∞nΘ pouze na specifikovan²ch pozicφch.
Prvnφ parametr indikuje pozici ru╣en²ch znak∙ a mß jednu z nßsledujφcφch hodnot:

Parametr odstra≥ovanΘho znaku specifikuje ru╣en² znak, je-li p°φtomen. Je zde rozli╣ovßna velikost pφsmen. FROM specifikuje sloupec nebo znakovou konstantu kde ru╣φme znaky. Nßsledujφ r∙znΘ p°φklady pou╛itφ:
 
V²raz V²sledek
TRIM(LEADING "_" FROM "_ABC_") "ABC_"
TRIM(TRAILING "_" FROM "_ABC_") "_ABC"
TRIM(BOTH "_" FROM "_ABC_") "ABC"
TRIM(BOTH "A" FROM "ABC")  "BC"

Kdy╛ funkci aplikujeme na data zφskanß p°φkazem SELECT, pak efekt je p°echodn² a neovliv≥uje ulo╛enß data. P°i aplikovßnφ na vklßdanou hodnotu p°φkazu UPDATE, efekt je trval² a p°evßdφ uklßdanΘ hodnoty.
TRIM m∙╛e b²t pou╛φvßno pouze se znakov²mi sloupci nebo konstantami. Pro pou╛itφ na hodnotßch jin²ch datov²ch typ∙, hodnota musφ b²t nejprve p°evedena na CHAR pomocφ funkce CAST.

Funkce AVG
Vracφ pr∙m∞rnou hodnotu specifikovanΘho sloupce nebo v²razu.
AVG([ALL] sloupcov²_odkaz | DISTINCT sloupcov²_odkaz)
AVG pou╛ijeme k v²poΦtu pr∙m∞rnΘ hodnoty pro Φφseln² sloupec. Jako agregaΦnφ funkce, AVG provßdφ v²poΦet agregovanΘ hodnoty ve sloupci p°es v╣echny °ßdky v datovΘ mno╛in∞. Datovß mno╛ina m∙╛e b²t celß tabulka, filtrovanß datovß mno╛ina nebo logickß skupina vytvo°enß klauzulφ GROUP BY. NulovΘ hodnoty sloupc∙ jsou zapoΦφtßvßny do pr∙m∞ru. Hodnoty NULL jsou ignorovßny.
SELECT AVG(itemstotal)
FROM orders
ALL vracφ pr∙m∞r pro v╣echny °ßdky. Kdy╛ nenφ specifikovßno DISTINCT, pak se implicitn∞ p°edpoklßdß ALL. DISTINCT ignoruje duplicitnφ hodnoty p°i v²poΦtu pr∙m∞ru ve specifikovanΘm sloupci.
AVG vracφ pr∙m∞r hodnot ve sloupci nebo pr∙m∞r vypoΦφtanΘho v²razu pro ka╛d² °ßdek.
SELECT AVG(itemstotal), AVG(itemstotal * 0.0825) AS AverageTax
FROM orders
Kdy╛ pou╛ijeme klauzuli GROUP BY, pak AVG vypoΦφtß jednu hodnotu pro ka╛dou skupinu. Tato hodnota je agregacφ specifikovanΘho sloupce pro v╣echny °ßdky v ka╛dΘ skupin∞. Nßsledujφcφ p°φkaz agreguje pr∙m∞rnΘ hodnoty pro sloupec ITEMSTOTAL v tabulce ORDERS s vytvß°enφm mezisouΦtu pro ka╛d² podnik v tabulce COMPANY.
SELECT C."company", AVG(O."itemstotal") AS Average,
  MAX(O."itemstotal") AS Biggest,
  MIN(O."itemstotal") AS Smallest
FROM "customer.db" C, "orders.db" O
WHERE (C."custno" = O."custno")
GROUP BY C."company"
ORDER BY C."company"
AVG operuje pouze na Φφseln²ch hodnotßch. Pro pou╛itφ AVG na neΦφseln²ch hodnotßch, musφme nejprve pou╛φt funkci CAST k p°evedenφ sloupce na Φφseln² typ.

Funkce COUNT
Vracφ poΦet °ßdk∙, kterΘ spl≥ujφ vyhledßvacφ podmφnku dotazu.
COUNT(* | [ALL] sloupcov²_odkaz | DISTINCT sloupcov²_odkaz)
COUNT pou╛φvßme k v²poΦtu poΦtu °ßdk∙ zφskan²ch p°φkazem SELECT. P°φkaz SELECT m∙╛e b²t jedno nebo vφce tabulkov² dotaz. Hodnota vracenß COUNT je poΦet °ßdk∙ filtrovanΘ datovΘ mno╛iny.
SELECT COUNT(amount)
FROM averaging
ALL vracφ poΦet v╣ech °ßdk∙. Kdy╛ nenφ specifikovßno DISTINCT, pak se implicitn∞ p°edpoklßdß ALL. DISTINCT ignoruje duplicitnφ hodnoty ve specifikovanΘm sloupci p°i poΦφtßnφ °ßdk∙.

Funkce MAX
Vracφ nejv∞t╣φ hodnotu ve specifikovanΘm sloupci.
MAX([ALL] sloupcov²_odkaz | DISTINCT sloupcov²_odkaz)
MAX pou╛ijeme k v²poΦtu nejv∞t╣φ hodnoty pro Φφseln² sloupec. Jako agregaΦnφ funkce, MAX provßdφ v²poΦet agregovanΘ hodnoty ve sloupci p°es v╣echny °ßdky v datovΘ mno╛in∞. Datovß mno╛ina m∙╛e b²t celß tabulka, filtrovanß datovß mno╛ina nebo logickß skupina vytvo°enß klauzulφ GROUP BY. NulovΘ hodnoty sloupc∙ jsou zahrnuty do v²poΦtu. Hodnoty NULL jsou ignorovßny. Pokud poΦet °ßdk∙ je nulov², pak funkce vracφ NULL.
SELECT MAX(itemstotal)
FROM orders
ALL vracφ nejv∞t╣φ hodnotu ze v╣ech °ßdk∙. Kdy╛ nenφ specifikovßno DISTINCT, pak se implicitn∞ p°edpoklßdß ALL. DISTINCT ignoruje duplicitnφ hodnoty ve specifikovanΘm sloupci p°i v²poΦtu nejv∞t╣φ hodnoty sloupce.
MAX vracφ nejv∞t╣φ hodnotu ve sloupci nebo v²poΦtu v²razu provedenΘm pro ka╛d² °ßdek.
SELECT MAX(itemstotal), MAX(itemstotal * 0.0825) AS HighestTax
FROM orders
P°i pou╛itφ s klauzulφ GROUP BY, MAX vracφ jednu hodnotu pro ka╛dou skupinu. Tato hodnota je agregacφ specifikovanΘho sloupce pro v╣echny °ßdky ka╛dΘ skupiny. Nßsledujφcφ p°φkaz agreguje nejv∞t╣φ hodnotu pro sloupec ITEMSTOTAL v tabulce ORDERS s vytvß°enφm mezisouΦt∙ pro ka╛d² podnik v tabulce COMPANY.
SELECT C."company", AVG(O."itemstotal") AS Average,
  MAX(O."itemstotal") AS Biggest,
  MIN(O."itemstotal") AS Smallest
FROM "customer.db" C, "orders.db" O
WHERE (C."custno" = O."custno")
GROUP BY C."company"
ORDER BY C."company"
MAX m∙╛e b²t pou╛ito na v╣echny typy sloupc∙ s v²jimkou BLOB. Kdy╛ pou╛φvßme s Φφseln²mi sloupci, pak vracenß hodnota je stejnΘho typu jako sloupec (nap°. INTEGER nebo FLOAT). Kdy╛ je pou╛ito se sloupcem CHAR, pak vrßcenß nejv∞t╣φ hodnota zßvisφ na jazyku pou╛itΘho ovladaΦe BDE.

Funkce MIN
Vracφ nejmen╣φ hodnotu ve specifikovanΘm sloupci.
MIN([ALL] sloupcov²_odkaz | DISTINCT sloupcov²_odkaz)
MIN pou╛ijeme k v²poΦtu nejmen╣φ hodnoty pro Φφseln² sloupec. Jako agregaΦnφ funkce, MIN provßdφ v²poΦet agregovanΘ hodnoty ve sloupci p°es v╣echny °ßdky v datovΘ mno╛in∞. Datovß mno╛ina m∙╛e b²t celß tabulka, filtrovanß datovß mno╛ina nebo logickß skupina vytvo°enß klauzulφ GROUP BY. NulovΘ hodnoty sloupc∙ jsou zahrnuty do v²poΦtu. Hodnoty NULL jsou ignorovßny. Pokud poΦet °ßdk∙ je nulov², pak funkce vracφ NULL.
SELECT MIN(itemstotal)
FROM orders
ALL vracφ nejmen╣φ hodnotu ze v╣ech °ßdk∙. Kdy╛ nenφ specifikovßno DISTINCT, pak se implicitn∞ p°edpoklßdß ALL. DISTINCT ignoruje duplicitnφ hodnoty ve specifikovanΘm sloupci p°i v²poΦtu nejmen╣φ hodnoty sloupce.
MIN vracφ nejmen╣φ hodnotu ve sloupci nebo v²poΦtu v²razu provedenΘm pro ka╛d² °ßdek.
SELECT MIN(itemstotal), MIN(itemstotal * 0.0825) AS LowestTax
FROM orders
P°i pou╛itφ s klauzulφ GROUP BY, MIN vracφ jednu hodnotu pro ka╛dou skupinu. Tato hodnota je agregacφ specifikovanΘho sloupce pro v╣echny °ßdky ka╛dΘ skupiny. Nßsledujφcφ p°φkaz agreguje nejmen╣φ hodnotu pro sloupec ITEMSTOTAL v tabulce ORDERS s vytvß°enφm mezisouΦt∙ pro ka╛d² podnik v tabulce COMPANY.
SELECT C."company", AVG(O."itemstotal") AS Average,
  MAX(O."itemstotal") AS Biggest,
  MIN(O."itemstotal") AS Smallest
FROM "customer.db" C, "orders.db" O
WHERE (C."custno" = O."custno")
GROUP BY C."company"
ORDER BY C."company"
MIN m∙╛e b²t pou╛ito na v╣echny typy sloupc∙ s v²jimkou BLOB. Kdy╛ pou╛φvßme s Φφseln²mi sloupci, pak vracenß hodnota je stejnΘho typu jako sloupec (nap°. INTEGER nebo FLOAT). Kdy╛ je pou╛ito se sloupcem CHAR, pak vrßcenß nejv∞t╣φ hodnota zßvisφ na jazyku pou╛itΘho ovladaΦe BDE.

Funkce SUM
PoΦφtß souΦet hodnot sloupce.
SUM([ALL] sloupcov²_odkaz | DISTINCT sloupcov²_odkaz)
SUM pou╛ijeme k v²poΦtu souΦtu hodnot pro Φφseln² sloupec. Jako agregaΦnφ funkce, SUM provßdφ v²poΦet agregovanΘ hodnoty ve sloupci p°es v╣echny °ßdky v datovΘ mno╛in∞. Datovß mno╛ina m∙╛e b²t celß tabulka, filtrovanß datovß mno╛ina nebo logickß skupina vytvo°enß klauzulφ GROUP BY. NulovΘ hodnoty sloupc∙ jsou zahrnuty do v²poΦtu. Hodnoty NULL jsou ignorovßny. Pokud poΦet °ßdk∙ je nulov², pak funkce vracφ NULL.
SELECT SUM(itemstotal)
FROM orders
ALL vracφ souΦet hodnot ze v╣ech °ßdk∙. Kdy╛ nenφ specifikovßno DISTINCT, pak se implicitn∞ p°edpoklßdß ALL. DISTINCT ignoruje duplicitnφ hodnoty ve specifikovanΘm sloupci p°i v²poΦtu souΦtu hodnot sloupce.
SUM vracφ souΦet hodnot ve sloupci nebo v²poΦtu v²razu provedenΘho pro ka╛d² °ßdek.
SELECT SUM(itemstotal), SUM(itemstotal * 0.0825) AS TotalTax
FROM orders
P°i pou╛itφ s klauzulφ GROUP BY, SUM vracφ jednu hodnotu pro ka╛dou skupinu. Tato hodnota je agregacφ specifikovanΘho sloupce pro v╣echny °ßdky ka╛dΘ skupiny. Nßsledujφcφ p°φkaz agreguje souΦtovou hodnotu pro sloupec ITEMSTOTAL v tabulce ORDERS s vytvß°enφm mezisouΦt∙ pro ka╛d² podnik v tabulce COMPANY.
SELECT C."company", SUM(O."itemstotal") AS SubTotal
FROM "customer.db" C, "orders.db" O
WHERE (C."custno" = O."custno")
GROUP BY C."company"
ORDER BY C."company"
SUM operuje pouze na Φφseln²ch sloupcφch. Pro pou╛itφ SUM na neΦφseln²ch hodnotßch, musφme nejprve funkcφ CAST p°evΘst sloupec na Φφseln² typ.

Funkce CAST
P°evßdφ specifikovanou hodnotu na specifikovan² datov² typ.
CAST(sloupcov²_odkaz AS datov²_typ)
CAST pou╛ijeme k p°evodu hodnoty ve specifikovanΘm sloupci na specifikovan² datov² typ. CAST m∙╛e b²t takΘ pou╛ito na konstantu nebo vypoΦφtanou hodnotu. CAST m∙╛e b²t pou╛ito v seznamu sloupc∙ p°φkazu SELECT, v tvrzenφ pro klauzuli WHERE nebo k modifikovßnφ m∞n∞nΘ hodnoty v p°φkazu UPDATE.
Parametr datovΘho typu m∙╛e b²t jednφm z mo╛n²ch datov²ch typ∙ sloupc∙, jako je nap°. CHAR, INTEGER a NUMERIC. Nßsledujφcφ typy sloupc∙ nemohou byt pou╛ity jako zdrojov² nebo cφlov² datov² typ: BLOB, MEMO a BYTES.
Nßsledujφcφ p°φkaz p°evßdφ hodnoty sloupce DATETIME Paradoxu na DATE:
SELECT CAST(saledate AS DATE)
FROM ORDERS
P°evßd∞nφm hodnoty sloupce pomocφ CAST umo╛≥uje pou╛φvßnφ ostatnφch funkcφ pro jinak nekompatibilnφ datov² typ, jako je nap°. pou╛φvßnφ funkce SUBSTRING na sloupci DATE.
SELECT saledate, SUBSTRING(CAST(CAST(saledate AS DATE) AS CHAR(10)) FROM 1 FOR 1)
FROM orders
Kdy╛ funkci aplikujeme na data zφskanß p°φkazem SELECT, pak efekt je p°echodn² a neovliv≥uje ulo╛enß data. P°i aplikovßnφ na vklßdanou hodnotu p°φkazu UPDATE, efekt je trval² a p°evßdφ uklßdanΘ hodnoty.

Funkce EXTRACT
Vracφ jednu Φßst datumovΘ hodnoty.
EXTRACT(extrahovanß_polo╛ka FROM sloupcov²_odkaz)
EXTRACT pou╛ijeme k nßvratu roku, m∞sφce nebo dne ze sloupce typu DATE nebo TIMESTAMP. Pokud sloupec pou╛it² s funkcφ EXTRACT obsahuje NULL, pak funkce vracφ NULL. Pokud hodnota nenφ NULL, pak funkce vracφ specifikovanou Φßst datumu jako SMALLINT.
Parametr extrahovanΘ polo╛ky m∙╛e obsahovat n∞kterou z nßsledujφcφch hodnot: YEAR, MONTH, DAY, HOUR, MINUTE nebo SECOND. Specifikßtory YEAR, MONTH a DAY mohou b²t pou╛ity pouze pro sloupce DATE a TIMESTAMP. Specifikßtory HOUR, MINUTE a  SECOND mohou b²t pou╛ity pouze pro sloupce TIMESTAMP a TIME.
SELECT saledate,
  EXTRACT(YEAR FROM saledate) AS YY,
  EXTRACT(MONTH FROM saledate) AS MM,
  EXTRACT(DAY FROM saledate) AS DD
FROM orders
Nßsledujφcφ p°φkaz pou╛φvß sloupec DOB (obsahujφcφ datum narozenφ) k filtrovßnφ t∞ch °ßdk∙, kde datum obsahuje m∞sφc kv∞ten.
SELECT DOB, LastName, FirstName
FROM People
WHERE (EXTRACT(MONTH FROM DOB) = 5)
EXTRACT operuje pouze na hodnotßch DATE, TIME a TIMESTAMP. Pro pou╛itφ EXTRACT na jin²ch hodnotßch musφme nejprve pomocφ funkce CAST p°evΘst sloupec na datumov² typ.
Poznßmka: I kdy╛ SQL-92 poskytuje pro funkci EXTRACT specifikßtory TIMEZONE_HOUR a TIMEZONE_MINUTE, tyto specifikßtory nejsou podporovßny Lokßlnφm SQL.

Seznam operßtor∙
Lokßlnφ SQL podporuje nßsledujφcφ operßtory: AritmetickΘ operßtory
Provßd∞jφ aritmetickΘ operace. Nap°.
Φφselnß_hodnota1 + Φφselnß_hodnota2
Φφselnß_hodnota1 - Φφselnß_hodnota2
Φφselnß_hodnota1 * Φφselnß_hodnota2
Φφselnß_hodnota1 / Φφselnß_hodnota2
Pomocφ aritmetick²ch operßtor∙ provßdφme aritmetickΘ v²poΦty na datech v p°φkazu SELECT. V²poΦty mohou b²t provßd∞ny na mφstech kde jsou povolena neagregovanß data, jako je klauzule SELECT nebo WHERE. V nßsledujφcφm p°φkazu je provßd∞no nßsobenφ:
SELECT (itemstotal * 0.0825) AS Tax
FROM orders
AritmetickΘ v²poΦty dodr╛ujφ normßlnφ prioritu operßtor∙. V nßsledujφcφm p°φkazu je p°ed nßsobenφm provedeno sΦφtßnφ.
SELECT (n.numbers * (n.multiple + 1)) AS Result
FROM numbertable n
AritmetickΘ operßtory operujφ pouze na Φφseln²ch hodnotßch. Pro jejich pou╛itφ na neΦφseln²ch hodnotßch musφme nejprve pomocφ funkce CAST p°evΘst hodnotu na Φφseln² typ.

LogickΘ operßtory
Spojuje vφce tvrzenφ.
[NOT] tvrzenφ OR [NOT] tvrzenφ
[NOT] tvrzenφ AND [NOT] tvrzenφ
LogickΘ operßtory OR a AND pou╛φvßme ke spojovßnφ dvou tvrzenφ v jednΘ klauzuli WHERE. To umo╛≥uje filtrovßnφ tabulky pomocφ slo╛it∞j╣φch podmφnek. V nßsledujφcφm p°φkazu jsou vraceny °ßdky, kdy alespo≥ jedno tvrzenφ je pravdivΘ (reservdate < "1/31/1998" nebo paid = TRUE).
SELECT *
FROM reservations
WHERE ((reservdate < "1/31/1998") OR (paid = TRUE))
LogickΘ operßtory jsou provßd∞ny v po°adφ priority: AND a potom OR. Ke zm∞n∞ priority lze pou╛φt zßvorky. Nap°.
SELECT shape, color, cost
FROM objects
WHERE (shape = "round") AND ((color = "blue") OR  (color = "red"))
Bez zßvorek je jinΘ po°adφ provßd∞nφ logick²ch operacφ.
SELECT shape, color, cost
FROM objects
WHERE shape = "round" AND color = "blue" OR color = "red"
Operßtor NOT pou╛ijeme k negaci logickΘho v²sledku operace. V nßsledujφcφm p°φkazu, jsou vrßceny pouze ty °ßdky kde sloupec PAID obsahuje hodnoty FALSE.
SELECT *
FROM reservations
WHERE (NOT (paid = "TRUE"))

Seznam tvrzenφ
Lokßlnφ SQL podporuje nßsledujφcφ tvrzenφ: Porovnßvßnφ
Porovnßvß dv∞ hodnoty.
hodnota1 < hodnota2
hodnota1 > hodnota2
hodnota1 = hodnota2
hodnota1 <> hodnota2
hodnota1 != hodnota2
hodnota1 >= hodnota2
hodnota1 <= hodnota2
Pou╛φvßme pro porovnßvßnφ dvou hodnot. Mohou b²t porovnßvßny hodnoty sloupc∙, konstanty nebo vypoΦφtanΘ hodnoty. V²sledek porovnßvßnφ je logickß hodnota, kterß je pou╛ita v kontextu klauzule WHERE k urΦenφ zda °ßdek spl≥uje filtrovacφ kritΘria.
SELECT *
FROM orders
WHERE (itemstotal >= 1000)
Porovnßvat lze kodnoty stejnΘho nebo kompatibilnφho typu. Pokud jedna hodnota je nekompatibilnφho typu, pak ji musφme nejprve p°evΘst funkcφ CAST na kompatibilnφ typ.
V²sledek porovnßvßnφ m∙╛e b²t modifikovßn logick²mi operßtory, jako nap°. NOT.
SELECT *
FROM orders
WHERE NOT (itemstotal >= 1000)
Poznßmka: Porovnßvßnφ m∙╛e b²t pou╛ito pouze v klauzulφch WHERE a HAVING, ale ne v klauzuli ON spojenφ; nem∙╛e b²t pou╛ito v klauzuli SELECT.

Tvrzenφ BETWEEN
UrΦuje, zda hodnota je v intervalu.
hodnota1 [NOT] BETWEEN hodnota2 AND hodnota3
Tvrzenφ BETWEEN pou╛ijeme k zji╣t∞nφ, zda hodnota je ve specifikovanΘm rozsahu. Je-li hodnota v rozsahu, pak BETWEEN vracφ TRUE, jinak vracφ FALSE. Nap°. nßsledujφcφ v²raz vracφ FALSE, proto╛e 10 nenφ mezi 1 a 5:
10 BETWEEN 1 AND 5
NOT pou╛ijeme k negaci porovnßvßnφ BETWEEN. Nap°. nßsledujφcφ v²raz vracφ TRUE:
10 NOT BETWEEN 1 AND 5
BETWEEN m∙╛e b²t pou╛ito se v╣emi datov²mi typy s v²jimkou BLOB, ale porovnßvanΘ hodnoty musφ b²t stejnΘho nebo kompatibilnφho datovΘho typu. Pokud jedna hodnota je nekompatibilnφho typu, pak nejprve musφme pou╛φt funkci CAST k p°etypovßnφ na kompatibilnφ datov² typ. Hodnoty pou╛itΘ v BETWEEN mohou b²t sloupce, konstanty nebo vypoΦφtanΘ hodnoty.
SELECT saledate
FROM orders
WHERE (saledate BETWEEN "1/1/1988" AND "12/31/1988")

Tvrzenφ EXISTS
Indikuje, zda hodnota existuje v poddotazu.
EXISTS poddotaz
EXISTS pou╛ijeme k filtrovßnφ tabulky na zßklad∞ existence hodnoty sloupce v tabulce z poddotazu. EXISTS vracφ TRUE, pokud poddotaz mß ve svΘ v²sledkovΘ mno╛in∞ alespo≥ jeden °ßdek a FALSE je-li zφskßn nulov² poΦet °ßdk∙. Poddotaz je proveden jednou pro ka╛d² °ßdek ve filtrovanΘ tabulce a existence °ßdku v poddotazu je pou╛ita k vlo╛enφ nebo vylouΦenφ °ßdku filtrovanΘ tabulky.
SELECT O.orderno, O.custno
FROM orders O
WHERE EXISTS
  (SELECT C.custno
   FROM customer C
   WHERE (C.custno = O.custno))
Nap°. nßsledujφcφ p°φkaz vracφ °ßdky v╣ech zßkaznφk∙, kte°φ majφ objednßvky p°ekraΦujφcφ 1000.
SELECT C.company, C.custno
FROM customer C
WHERE EXISTS
  (SELECT O.custno
   FROM orders O
   WHERE (O.custno = C.custno) AND (O.itemstotal > 1000))
NOT pou╛φvßme k nßvratu negace porovnßvßnφ EXISTS.

Tvrzenφ IN
Indikuje, zda hodnota existuje v mno╛in∞ hodnot.
hodnota [NOT] IN (mno╛ina_hodnot)
IN pou╛ijeme k filtrovßnφ tabulky na zßklad∞ existence hodnoty sloupce ve specifikovanΘ mno╛in∞ porovnßvan²ch hodnot. Mno╛ina porovnßvan²ch hodnot m∙╛e b²t statickß (Φßrkami odd∞lovan² seznam konstant) nebo dynamickß (pou╛φvß v²sledek z poddotazu).
Porovnßvanß hodnota s mno╛inou hodnot m∙╛e b²t hodnota sloupce, konstanta nebo vypoΦφtanß hodnota.
P°φklad pou╛itφ statickΘ mno╛iny porovnßvan²ch hodnot:
SELECT C.company, C.state
FROM customer C
WHERE (C.state IN ("CA", "HI"))
Mno╛ina porovnßvan²ch hodnot m∙╛e b²t takΘ dynamickß. Poddotaz pro porovnßvßnφ m∙╛e vracet vφce °ßdk∙ ale pouze jeden sloupec.
SELECT C.company, C.state
FROM customer C
WHERE (C.state IN
  (SELECT R.state
  FROM regions R
  WHERE (R.region = "Pacific")))
NOT pou╛ijeme k negaci porovnßvßnφ IN.
IN m∙╛e b²t pou╛ito se v╣emi datov²mi typy s v²jimkou BLOB, ale porovnßvanΘ hodnoty musφ b²t stejnΘho nebo kompatibilnφho datovΘho typu. Pokud jedna hodnota je nekompatibilnφho typu, pak nejprve musφme pou╛φt funkci CAST k p°etypovßnφ na kompatibilnφ datov² typ.

Tvrzenφ LIKE
Indikuje podobnost jednΘ hodnoty s jinou.
hodnota [NOT] LIKE [substituΦnφ_znak] porovnßvanß_hodnota [substituΦnφ_znak] [ESCAPE znak_escape]
LIKE filtruje tabulku na zßklad∞ podobnosti hodnoty sloupce s porovnßvanou hodnotou. SubstituΦnφ znaky umo╛≥ujφ porovnßvat na zßklad∞ celΘ hodnoty sloupce nebo jejφ Φßsti.
SELECT *
FROM customer
WHERE (company LIKE "Adventure Undersea")
SubstituΦnφ znak % m∙╛e b²t pou╛it v porovnßvßnφ k reprezentaci neznßmΘho poΦtu znak∙. LIKE vracφ TRUE, kdy╛ Φßst hodnoty sloupce odpovφdß Φßsti porovnßvanΘ hodnoty neodpovφdajφcφ pozici substituΦnφho znaku. SubstituΦnφ znak m∙╛e b²t na zaΦßtku, uprost°ed nebo na konci porovnßvanΘ hodnoty (nebo vφce kombinacφ t∞chto pozic). Nap°. nßsledujφcφ p°φkaz zφskßvß °ßdky, kde hodnota sloupce COMPANY zaΦφnß A kterΘ je nßsledovßno libovoln²m poΦtem znak∙.
SELECT *
FROM customer
WHERE (company LIKE "A%")
SubstituΦnφ znak _ m∙╛e byt pou╛it k reprezentaci jednoho znaku. Nap°. nßsledujφcφ p°φkaz zφskßvß °ßdky, kde ve sloupci WORDS je hodnota zaΦφnajφcφ b, nßsleduje jeden libovoln² znak a konΦφ znakem n.
SELECT words
FROM dictionary
WHERE (words LIKE "b_n")
NOT lze pou╛φt k negaci porovnßvßnφ LIKE.
Kdy╛ substituΦnφ znaky se vyskytujφ v datech sloupce, pak pou╛ijeme ESCAPE. KlφΦovΘ slovo ESCAPE urΦuje znak escape. V porovnßvanΘ hodnot∞ pro tvrzenφ LIKE, znak nßsledujφcφ znak escape je brßn jako znak dat a ne jako substituΦnφ znak. Ostatnφ substituΦnφ znaky v porovnßvanΘ hodnot∞ nejsou ovlivn∞ny.
V nßsledujφcφm p°φklad∞ znak ^ je urΦen jako znak escape. V porovnßvanΘ hodnot∞ pro tvrzenφ LIKE se provßdφ filtrovßnφ na zßklad∞ °et∞zce 10%.
SELECT *
FROM Sales
WHERE (PercentValue LIKE "%10^%%" ESCAPE "^")
LIKE m∙╛e b²t pou╛ito pouze s datov²m typem CHAR nebo kompatibilnφmi typy. Pokud jedna hodnota je nekompatibilnφho typu, pak musφme nejprve funkcφ CAST p°evΘst data na kompatibilnφ typ. P°i porovnßvßnφ provedenΘm pomocφ LIKE se rozli╣uje velikost pφsmen.

Tvrzenφ IS NULL
Indikuje zda sloupec obsahuje hodnotu NULL.
sloupcov²_odkaz IS [NOT] NULL
Nap°.
SELECT *
FROM customer
WHERE (invoicedate IS NULL)
NOT pou╛ijeme k negaci v²sledku porovnßvßnφ.
Poznßmka: Pro ΦφselnΘ sloupce, nulovß hodnota nenφ totΘ╛ co NULL.

Tvrzenφ SOME/ANY/ALL
Porovnßvß hodnotu sloupce s hodnotou sloupce ve vφce °ßdcφch v poddotazu.
sloupcov²_odkaz porovnßvacφ_operßtor SOME | ANY | ALL (poddotaz)
Tvrzenφ SOME, ANY a ALL m∙╛eme pou╛φt k filtrovßnφ tabulky porovnßvßnφ hodnoty sloupce s vφce porovnßvan²mi hodnotami (ve sloupci poddotazu).
ANY je vyhodnoceno na TRUE, kdy╛ tvrzenφ nab²vß hodnotu TRUE pro libovolnou hodnotu v poddotazu. SOME pracuje stejn∞ jako ANY. Nap°. pomocφ nßsledujφcφho p°φkazu, pro libovoln² °ßdek vrßcen² z tabulky HOLDINGS, hodnota ve sloupci PUR_PRICE musφ b²t v∞t╣φ ne╛ libovolnß hodnota vrßcenß poddotazem.
SELECT *
FROM "holdings.dbf" H
WHERE (H."pur_price" > ANY
  (SELECT O."price"
  FROM "old_sales.dbf"))
Tvrzenφ ALL je vyhodnoceno na TRUE, kdy╛ tvrzenφ nab²vß hodnotu TRUE pro v╣echny hodnoty v poddotazu. Nap°. pomocφ nßsledujφcφho p°φkazu, pro libovoln² °ßdek vrßcen² z tabulky HOLDINGS, hodnota ve sloupci PUR_PRICE musφ b²t v∞t╣φ ne╛ v╣echny hodnoty vrßcenΘ poddotazem.
SELECT *
FROM "holdings.dbf" H
WHERE (H."pur_price" > ALL
  (SELECT O."price"
  FROM "old_sales.dbf"))
Poznßmka: Poddotaz poskytujφcφ porovnßvanΘ hodnoty m∙╛e zφskßvat vφce °ßdk∙, ale musφ mφt pouze jeden sloupce.

Seznam relaΦnφch operßtor∙
Lokßlnφ SQL podporuje nßsledujφcφ typy spojenφ: Spojenφ Ekvi
Spojenφ dvou tabulek na zßklad∞ spoleΦn²ch hodnot sloupc∙ s vylouΦenφm neshody.
SELECT seznam_sloupc∙
FROM tabulkov²_odkaz, tabulkov²_odkaz [, tabulkov²_odkaz...]
WHERE tvrzenφ [AND tvrzenφ...]
Pou╛ijeme ke spojenφ dvou tabulek, zdrojovΘ a spojovanΘ tabulky, kterΘ majφ hodnoty z jednoho nebo vφce sloupc∙ spoleΦnΘ. Jeden nebo vφce sloupc∙ z ka╛dΘ tabulky je porovnßvßn v klauzuli WHERE na ekvivalentnφ hodnoty. Pro °ßdky ve zdrojovΘ tabulce, kterΘ majφ shodu ve spojovanΘ tabulce, jsou vlo╛eny spojenΘ do v²sledkovΘ mno╛iny. ╪ßdky ze zdrojovΘ tabulky, bez nalezenφ °ßdk∙ ve spojovanΘ tabulce jsou vylouΦeny ze spojovanΘ v²sledkovΘ mno╛iny. V nßsledujφcφm p°φkladu, tabulky CUSTOMER a ORDERS jsou spojeny na zßklad∞ stejn²ch hodnot ve sloupci CUSTNO, kter² obsahujφ ob∞ tabulky.
SELECT *
FROM customer C, orders O
WHERE (C.custno = O.custno)
Tφmto spojenφm lze spojovat i vφce tabulek. Jedno porovnßvßnφ v klauzuli WHERE je vy╛adovßno pro spojenφ ka╛d²ch dvou tabulek. Nßsledujφcφ p°φkaz spojuje tabulku CUSTOMER s ORDERS a pak ORDERS s ITEMS. V tomto p°φpad∞, p°ipojenß tabulka ORDERS pracuje jako zdrojovß tabulka pro p°ipojenφ tabulky ITEMS.
SELECT *
FROM customer C, orders O, items I
WHERE (C.custno = O.custno) AND (O.orderno = I.orderno)
Tabulky mohou b²t takΘ spojovßny pomocφ z°et∞zenφ hodnot vφce sloupc∙ k vytvo°enφ jednΘ hodnoty pro porovnßvacφ tvrzenφ spojenφ. Nap°. sloupce ID1 a ID2 ve spojovanΘ tabulce jsou spojeny a porovnßvßny s hodnotou ID ve zdrojovΘ tabulce.
SELECT *
FROM source S, joining J
WHERE (S.ID = J.ID1 || J.ID2)

Spojenφ INNER
Spojenφ dvou tabulek na zßklad∞ spoleΦn²ch hodnot sloupc∙ s vylouΦenφm neshody.
SELECT seznam_sloupc∙
FROM tabulkov²_odkaz
  [INNER] JOIN tabulkov²_odkaz
    ON tvrzenφ
  [[INNER] JOIN tabulkov²_odkaz
    ON tvrzenφ...]
Pou╛ijeme ke spojenφ dvou tabulek, zdrojovΘ a spojovanΘ tabulky, kterΘ majφ hodnoty z jednoho nebo vφce sloupc∙ spoleΦnΘ. Jeden nebo vφce sloupc∙ z ka╛dΘ tabulky je porovnßvßn v klauzuli ON na ekvivalentnφ hodnoty. Pro °ßdky ve zdrojovΘ tabulce, kterΘ majφ shodu ve spojovanΘ tabulce, jsou vlo╛eny spojenΘ do v²sledkovΘ mno╛iny. ╪ßdky ze zdrojovΘ tabulky, bez nalezenφ °ßdk∙ ve spojovanΘ tabulce jsou vylouΦeny ze spojovanΘ v²sledkovΘ mno╛iny. V nßsledujφcφm p°φkladu, tabulky CUSTOMER a ORDERS jsou spojeny na zßklad∞ stejn²ch hodnot ve sloupci CUSTNO, kter² obsahujφ ob∞ tabulky.
SELECT *
FROM customer C
  INNER JOIN orders O
    ON (C.custno = O.custno)
Tφmto spojenφm lze spojovat i vφce tabulek. Jedno pou╛itφ operßtoru INNER JOIN a odpovφdajφcφ klauzule ON je vy╛adovßno pro spojenφ ka╛d²ch dvou tabulek. Nßsledujφcφ p°φkaz spojuje tabulku CUSTOMER s ORDERS a pak ORDERS s ITEMS. V tomto p°φpad∞, p°ipojenß tabulka ORDERS pracuje jako zdrojovß tabulka pro p°ipojenφ tabulky ITEMS. Nßsledujφcφ p°φkaz je pou╛it bez nepovinnΘho klφΦovΘho slova INNER.
SELECT *
FROM customer C
  JOIN orders O
    ON (C.custno = O.custno)
  JOIN items I
    ON (O.orderno = I.orderno)
Tabulky mohou b²t takΘ spojovßny pomocφ z°et∞zenφ hodnot vφce sloupc∙ k vytvo°enφ jednΘ hodnoty pro porovnßvacφ tvrzenφ spojenφ. Nap°. sloupce ID1 a ID2 ve spojovanΘ tabulce jsou spojeny a porovnßvßny s hodnotou ID ve zdrojovΘ tabulce.
SELECT *
FROM source S
  INNER JOIN joining J
    ON (S.ID = J.ID1 || J.ID2)

Spojenφ OUTER
Spojenφ dvou tabulek na zßklad∞ spoleΦn²ch hodnot sloupc∙ bez vylouΦenφ neshody.
SELECT seznam_sloupc∙
FROM tabulkov²_odkaz
   LEFT | RIGHT | FULL [OUTER] JOIN tabulkov²_odkaz
    ON tvrzenφ
  [LEFT | RIGHT | FULL [OUTER] JOIN tabulkov²_odkaz
    ON tvrzenφ...]
OUTER JOIN pou╛ijeme ke spojenφ dvou tabulek, zdrojovΘ a  spojovanΘ tabulky, kterΘ majφ jeden nebo vφce sloupc∙ spoleΦn²ch. Jeden nebo vφce sloupc∙ z ka╛dΘ tabulky je porovnßvßno v klauzuli ON na rovnost. Zßkladnφ rozdφl mezi vnit°nφm (INNER) a vn∞j╣φm (OUTER) spojenφm je ten, ╛e °ßdky ve vn∞j╣φm spojenφ, ze zdrojovΘ tabulky, kterΘ nemajφ shodu ve spojovanΘ tabulce, nejsou vylouΦeny z v²sledkovΘ mno╛iny (sloupce ve spojovanΘ tabulce zφskajφ hodnoty NULL).
V nßsledujφcφm p°φkazu, tabulky CUSTOMER a ORDERS jsou spojeny na zßklad∞ stejn²ch hodnot ve sloupci CUSTNO, kter² je obsa╛en v obou tabulkßch. Pro °ßdky z CUSTOMER, kterΘ nemajφ shodnΘ hodnoty v CUSTOMER.CUSTNO a ORDERS.CUSTNO, sloupce z ORDERS zφskajφ hodnoty NULL.
SELECT *
FROM customer C
  LEFT OUTER JOIN orders O
    ON (C.custno = O.custno)
Modifikßtor LEFT zp∙sobuje, ╛e v╣echny °ßdky z tabulky vlevo od operßtoru OUTER JOIN jsou vlo╛eny do v²sledkovΘ mno╛iny a to bez ohledu na to, zda odpovφdajφcφ °ßdek je nalezen v tabulce napravo od operßtoru. Pokud nenφ nalezen odpovφdajφcφ °ßdek v tabulce napravo, pak jeho sloupce zφskajφ hodnoty NULL. Modifikßtor RIGHT zp∙sobuje, ╛e v╣echny °ßdky z tabulky napravo od operßtoru OUTER JOIN jsou vlo╛eny do v²sledkovΘ mno╛iny a to bez ohledu na nalezenφ shody. Jestli╛e nenφ nalezen odpovφdajφcφ °ßdek v tabulce nalevo od operßtoru, pak jeho sloupce zφskajφ hodnoty NULL. Modifikßtor FULL zp∙sobuje, ╛e v╣echny °ßdky ze v╣ech tabulek specifikovan²ch v klauzuli FROM jsou vlo╛eny do v²sledkovΘ mno╛iny a to bez ohledu na nalezenφ shody. Pokud n∞kter² °ßdek n∞kterΘ tabulky nenφ nalezen, pak jeho sloupce zφskajφ hodnoty NULL.
Tφmto spojenφm lze spojovat i vφce tabulek. Jedno pou╛itφ operßtoru OUTER JOIN a odpovφdajφcφ klauzule ON je vy╛adovßno pro spojenφ ka╛d²ch dvou tabulek. Nßsledujφcφ p°φkaz spojuje tabulku CUSTOMER s ORDERS a pak ORDERS s ITEMS. V tomto p°φpad∞, p°ipojenß tabulka ORDERS pracuje jako zdrojovß tabulka pro p°ipojenφ tabulky ITEMS.
SELECT *
FROM customer C
  FULL OUTER JOIN orders O
    ON (C.custno = O.custno)
  FULL OUTER JOIN items I
    ON (O.orderno = I.orderno)
Tabulky mohou b²t takΘ spojovßny pomocφ v²raz∙ vytvß°ejφcφch jednotlivΘ hodnoty pro porovnßvacφ tvrzenφ spojenφ. Nap°. sloupce ID1 a ID2 jsou porovnßvßny samostatn∞ s dv∞mi hodnotami vytvo°en²mi rozlo╛enφm sloupce ID.
SELECT *
FROM source S
  RIGHT OUTER JOIN joining J
    ON (SUBSTRING(S.ID FROM 1 FOR 2) = J.ID1) AND
    (SUBSTRING(S.ID FROM 3 FOR 1) = J.ID2)

KartΘzskΘ spojenφ
Spojenφ dvou tabulek nerelaΦnφm zp∙sobem.
SELECT *
FROM tabulkov²_odkaz, tabulkov²_odkaz [,tabulkov²_odkaz...]
Pou╛ijeme pro spojenφ sloupc∙ dvou tabulek do jednΘ v²sledkovΘ mno╛iny, bez zßvislostφ mezi °ßdky tabulek. Ka╛d² °ßdek ze zdrojovΘ tabulky je spojen se v╣emi °ßdky spojovanΘ tabulky. Pokud zdrojovß tabulka mß 10 °ßdk∙ a spojovanß tabulka takΘ 10 °ßdk∙, pak v²sledkovß mno╛ina bude mφt 100 °ßdk∙.
SELECT *
FROM "employee.dbf", "items.db"

Spojenφ UNION
P°ipojuje °ßdky jednΘ tabulky na konec jinΘ tabulky.
SELECT sloup_1 [, sloup_2, ... sloup_n]
FROM tabulkov²_odkaz
UNION [ALL]
SELECT sloup_1 [, sloup_2, ... sloup_n]
FROM tabulkov²_odkaz
Spojenφ UNION p°idßvß °ßdky jednΘ tabulky na konec jinΘ podobn∞ strukturovanΘ v²sledkovΘ mno╛iny. P°φkaz SELECT pro zdrojovou a spojovanou tabulku musφ mφt stejn² poΦet sloupc∙ a sloupce musφ b²t kompatibilnφ.
SELECT custno, company
FROM customers
UNION
SELECT custno, company
FROM old_customers

Heterogennφ spojenφ
Spojenφ dvou tabulek z r∙zn²ch databßzφ.
SELECT seznam_sloupc∙
FROM ":databßzov²_odkaz:tabulkov²_odkaz", ":databßzov²_odkaz:tabulkov²_odkaz" [,":databßzov²_odkaz:tabulkov²_odkaz"...]
WHERE tvrzenφ [AND tvrzenφ...]
Pou╛φvßme ke spojenφ dvou tabulek, kterΘ sφdlφ v r∙zn²ch databßzφch. SpojovanΘ tabulky mohou b²t r∙znΘho typu, ale musφ to b²t tabulky databßzφ, ke kter²m m∙╛eme p°istupovat pomocφ BDE. Nap°.
SELECT *
FROM ":DBDEMOS:customer.db" C, ":BCDEMOS:orders.db" O
WHERE (C.custno = O.custno)

AktualizovatelnΘ dotazy
Dotazy, kterΘ spl≥ujφ nßsledujφcφ podmφnky jsou aktualizovatelnΘ.
Substituce parametr∙ v DML p°φkazech
OznaΦovaΦe parametr∙ mohou b²t pou╛φvßny v p°φkazech DML na mφst∞ datov²ch hodnot. Parametry jsou identifikovßny dvojteΦkou. Nap°.
SELECT last_name, first_name
FROM "customer.db"
WHERE (last_name > :lname) AND (first_name < :fname)
Parametry umo╛≥ujφ jednomu p°φkazu SQL pou╛φvat pro porovnßvßnφ r∙znΘ datovΘ hodnoty. Za b∞hu, aplikace doplnφ hodnoty parametr∙ a pak je dotaz proveden. Nap°.
UPDATE orders
SET itemstotal = :TotalParam
WHERE (orderno = 1014)

P°φkazy jazyka definice dat

Lokßlnφ SQL podporuje jazyk definice dat (DDL) pro vytvß°enφ, modifikaci a ru╣enφ tabulek a pro vytvß°enφ a ru╣enφ index∙. Jsou podporovßny takΘ pohledy. Lokßlnφ SQL neumo╛≥uje substituci prom∞nn²ch v DDL p°φkazech.
Lokßlnφ SQL podporuje nßsledujφcφ p°φkazy: P°φkaz CREATE TABLE
Vytvß°φ tabulku.
CREATE TABLE tabulkov²_odkaz (definice_sloupce [, definice_sloupce,...] [, omezenφ_primßrnφho_klφΦe])
P°φkaz CREATE TABLE pou╛ijeme k vytvo°enφ tabulky dBASE nebo Paradoxu, definovßnφ jejich sloupc∙ a primßrnφho klφΦe.
JmΘno tabulky musφ spl≥ovat pravidla pojmenovacφ konvence. Pokud jmΘno obsahuje mezeru, pak musφ b²t uzav°eno v uvozovkßch.
Definice sloupc∙ obsahujφ Φßrkami odd∞len² seznam kombinacφ jmen sloupc∙, datov²ch typ∙ a velikostφ (jsou-li aplikovatelnΘ). Seznam definic sloupc∙ m∙sφ b²t uzav°en v zßvorkßch.
K vytvo°enφ primßrnφho klφΦe pou╛ijeme klφΦovΘ slovo PRIMARY KEY. Nßsledujφcφ p°φkaz vytvß°φ tabulku Paradoxu:
CREATE TABLE "employee.db"
(
  last_name CHAR(20),
  first_name CHAR(15),
  salary NUMERIC(10,2),
  dept_no SMALLINT,
  PRIMARY KEY (last_name, first_name)
)
Alternativnφ syntaxφ pro vytvß°enφ primßrnφho klφΦe je pou╛itφ klφΦovΘho slova CONSTRAINT. I kdy╛ primßrnφ index tabulky Paradoxu nemß jmΘno, p°i pou╛itφ CONSTRAINT musφ b²t jmΘno poskytnuto.
CREATE TABLE "employee.db"
(
  last_name CHAR(20),
  first_name CHAR(15),
  salary NUMERIC(10,2),
  dept_no SMALLINT,
  CONSTRAINT z PRIMARY KEY (last_name, first_name)
)
K urΦenφ, zda vytvß°φme tabulku Paradoxu nebo dBASE, urΦφme p°φponou jmΘna tabulky: Pokud vynechßme p°φponu, pak je vytvo°en typ tabulky specifikovan² v nastavenφ Default Driver na strßnce INIT Administrßtora BDE. P°i pou╛itφ p°φpony, musφ b²t jmΘno tabulky uzav°eno v uvozovkßch.

P°φkaz ALTER TABLE
P°idßvß nebo odstra≥uje sloupce z tabulky.
ALTER TABLE tabulkov²_odkaz DROP [COLUMN] sloupcov²_odkaz | ADD [COLUMN] sloupcov²_odkaz [,odkaz DROP [COLUMN] sloupcov²_odkaz | ADD [COLUMN] sloupcov²_odkaz...]
P°φkaz ALTER TABLE pou╛φvßme k p°idßvßnφ sloupce k nebo ru╣enφ sloupce v existujφcφ tabulce. Je mo╛no zru╣it jeden sloupec a p°idat jin² v jednom p°φkazu ALTER TABLE.
KlφΦovΘ slovo DROP vy╛aduje pouze jmΘno ru╣enΘho sloupce. KlφΦovΘ slovo ADD vy╛aduje kombinaci jmΘna sloupce, typu a p°φpadn∞ rozm∞r∙, jako p°i definovßnφ sloupce v p°φkazu CREATE TABLE.
Nßsledujφcφ p°φkaz ru╣φ sloupec FULLNAME a p°idßvß sloupec LASTNAME.
ALTER TABLE "names.db"
DROP fullname, ADD lastname CHAR(25)
Je mo╛nΘ zru╣it a p°idat sloupec stejnΘho jmΘna v jednom p°φkazu ALTER TABLE, ale data z ru╣enΘho sloupce jsou ztracena. To umo╛≥uje rychlou redefinici sloupc∙ ve stavu nßvrhu databßze.
ALTER TABLE "names.db"
DROP lastname, ADD lastname CHAR(30)
Pokud zru╣en² sloupec je Φßstφ primßrnφho klφΦe, pak je zru╣en i primßrnφ klφΦ. ALTER TABLE konΦφ chybou po pokusu o zru╣enφ sloupce, kter² je cφlem omezenφ cizφho klφΦe (referenΦnφ integrita).
K odkaz∙m na sloupec s nenumerick²mi znaky nebo mezerami uzav°eme jmΘno sloupce do uvozovek a p°ed n∞j zapφ╣eme jmΘno tabulky v uvozovkßch.
ALTER TABLE "customer.db"
ADD "customer.db"."#ID" CHAR(3)

P°φkaz DROP TABLE
Ru╣φ tabulku.
DROP TABLE tabulkov²_odkaz
P°φkaz DROP TABLE ru╣φ celou tabulku. Nap°.
DROP TABLE "employee.db"

P°φkaz CREATE INDEX
Vytvß°φ sekundßrnφ index.
CREATE [UNIQUE] [ASC | DESC] INDEX indexov²_odkaz ON tabulkov²_odkaz (sloupcov²_odkaz [,sloupcov²_odkaz...])
P°φkaz CREATE INDEX pou╛ijeme k vytvo°enφ sekundßrnφho indexu pro existujφcφ tabulku. JmΘna index∙ nemohou obsahovat mezeru. Paradox m∙╛e indexovat na zßklad∞ vφce sloupc∙.
UNIQUE pou╛ijeme k vytvo°enφ indexu, kter² generuje chybu, pokud je vlo╛en °ßdek s duplicitnφmi hodnotami sloupce. Implicitn∞ indexy nejsou unikßtnφ.
ASC (nebo ASCENDING) pou╛ijeme k vytvo°enφ indexu, kter² °adφ data ve vzestupnΘm po°adφ. DESC (nebo DESCENDING) vytvß°φ sestupnΘ po°adφ. Pokud nenφ specifikovßno, pak implicitnφ hodnota je ASC.
Nßsledujφcφ p°φkaz vytvß°φ vφcesloupcov² (slo╛en²) sekundßrnφ index Paradoxu:
CREATE INDEX custdate ON "orders.db" (custno, saledate)
Dal╣φ p°φkaz vytvß°φ unikßtnφ sekundßrnφ index dBASE:
CREATE UNIQUE INDEX namex ON "employee.dbf" (last_name)

P°φkaz DROP INDEX
Ru╣φ index.
DROP INDEX tabulkov²_odkaz.indexov²_odkaz | PRIMARY
P°φkaz DROP INDEX pou╛ijeme ke zru╣enφ primßrnφho nebo sekundßrnφho indexu.
K zru╣enφ primßrnφho nebo sekundßrnφho indexu dBASE nebo sekundßrnφho indexu Paradoxu, identifikujeme index pomocφ jmΘna tabulky a jmΘna indexu odd∞lenΘ teΦkou.
DROP INDEX "employee.dbf".namex
K zru╣enφ primßrnφho indexu Paradoxu index identifikujeme klφΦov²m slovem PRIMARY:
DROP INDEX orders.PRIMARY


  1. ZaΦneme op∞t vytvß°et aplikace C++ Builderu. Na╣e novß aplikace spojφ dv∞ tabulky customer.db a orders.db v dotazu SQL. V²sledek dotazu bude zobrazen v ovladaΦi DBGrid. Pou╛it² p°φkaz SQL zadßme do vlastnosti SQL objektu TQuery.

  2. ZaΦneme v²voj novΘ aplikace. Na formulß° umφstφme komponenty TQuery, TDataSource a TDBGrid. U komponenty TQuery nastavφme vlastnost DatabaseName na BCDEMOS, vlastnost SQL na
    select Customer.Company, Orders.OrderNo, Orders.SaleDate
      from Customer, Orders
      where Customer.CustNo = Orders.CustNo
    a vlastnost Active na true. U komponenty TDataSource nastavφme vlastnost DataSet na Query1. U komponenty TDBGrid nastavφme Align na alClient, BorderStyle na bsNone a DataSource na DataSource1. Tφm je na╣e aplikace hotova. M∙╛ete ji vyzkou╣et.
  3. V Inspektoru objekt∙ modifikujte vlastnosti SQL a DatabaseName komponenty TQuery a podφvejte se na zm∞ny zobrazenΘ v²sledkovΘ mno╛iny v TDBGrid. Nap°. v²sledkovou mno╛inu se°a∩te podle jmΘna podniku, vypisujte pouze n∞kterΘ zßznamy spl≥ujφcφ urΦitΘ kritΘrium nebo vypisujte ·daje n∞kterΘ tabulky jinΘ databßze.
  4. Zjist∞te polo╛ky tabulky Customer. Nap°. pomocφ zm∞ny vlastnosti SQL komponenty TQuery.
  5. Pokuste se v n∞jakΘ aplikaci pou╛φt tabulku vytvo°enou v p°edchozφ kapitole.
3. Lokßlnφ SQL