![]() ![]() ![]() |
|
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
![]() ![]() ![]() |
|