![]() ![]() ![]() |
|
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:
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.
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:
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²:
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:
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.
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"))
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.
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)
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
![]() ![]() ![]() |
|