]Jazyk SQL zahrnuje 3 typy konstrukcí SELECT:
1. specifikace kurzoru
2. vyberte příkaz
3.poddotaz
tabulkový výraz je základem všech syntaktických struktur.
1.
Specifikace kurzoru – kurzor konstruktoru SQL, umožňuje získat řádkový přístup k výsledkům dotazu v databázi. Neexistují žádné zvláštní požadavky na tabulkové výrazy zahrnuté ve specifikaci kurzoru.
Potřebujete „SELECT * WHERE a=b FROM c“ nebo „SELECT WHERE a=b FROM c ON *“?
Pokud jste jako já, budete souhlasit: SQL je jedna z věcí, která se na první pohled zdá snadná (čte se jako angličtina!), ale nějak musíte každý jednoduchý dotaz googlit, abyste našli správnou syntaxi.
A pak se začnou spojovat, agregovat, poddotazy a ukáže se, že je to úplně svinstvo. Něco jako toto:
SELECT členy.křestní jméno || " " || members.lastname AS "Celé jméno" Z výpůjček VNITŘNÍ JOIN členové ON members.memberid=výpůjčky.memberid VNITŘNÍ PŘIPOJENÍ knihy ON books.bookid=výpůjčky.bookid WHERE výpůjčky.bookid IN (SELECT bookid FROM books WHERE stock>(SELECT avg(stock) ) Z knih)) GROUP BY členové.křestní jméno, členové.příjmení;
Bue! To vyděsí každého nováčka nebo dokonce středně pokročilého vývojáře, pokud vidí SQL poprvé. Ale není to všechno špatné.
Je snadné si zapamatovat, co je intuitivní, a doufám, že pomocí této příručky snížím bariéru vstupu do SQL pro nováčky a nabídnem těm, kteří již mají zkušenosti, nový způsob pohledu na SQL.
Ačkoli je syntaxe SQL mezi různými databázemi téměř stejná, tento článek používá pro dotazy PostgreSQL. Některé příklady budou fungovat v MySQL a dalších databázích.
1. Tři kouzelná slova
V SQL je mnoho klíčových slov, ale SELECT, FROM a WHERE jsou přítomny téměř v každém dotazu. O něco později pochopíte, že tato tři slova představují nejzákladnější aspekty konstruování databázových dotazů a další, složitější dotazy jsou jen doplňky nad nimi.
2. Naše základna
Pojďme se podívat na databázi, kterou použijeme jako příklad v tomto článku:
Máme knihovnu a lidi. Nechybí ani speciální tabulka pro evidenci vydaných knih.
- V tabulce "knihy" jsou uloženy informace o názvu, autorovi, datu vydání a dostupnosti knihy. Je to jednoduché.
- V tabulce „členové“ - jména a příjmení všech lidí, kteří se zaregistrovali do knihovny.
- V tabulce „výpůjčky“ jsou uloženy informace o knihách převzatých z knihovny. Sloupec bookid odkazuje na ID knihy pořízené v tabulce „knihy“ a sloupec memberid odkazuje na odpovídající osobu z tabulky „členové“. Máme také datum vydání a datum, kdy je nutné knihu vrátit.
3. Jednoduchá žádost
Začněme jednoduchým požadavkem: potřebujeme jména A identifikátory(id) všech knih napsaných autorem „Dan Brown“
Žádost bude vypadat takto:
SELECT bookid AS "id", název FROM books WHERE author="Dan Brown";
A výsledek je takový:
id |
titul |
---|
2
|
Ztracený symbol |
4
|
Peklo |
Docela jednoduché. Podívejme se na žádost, abychom pochopili, co se děje.
3.1 FROM - odkud data získáváme
To se nyní může zdát zřejmé, ale FROM bude velmi důležité později, až se dostaneme ke spojením a poddotazům.
FROM ukazuje na tabulku k dotazu. Může to být existující tabulka (jako ve výše uvedeném příkladu) nebo tabulka vytvořená za běhu spojeními nebo poddotazy.
3.2 KDE - jaké údaje se zobrazují
WHERE se jednoduše chová jako filtr linky, který chceme vydat. V našem případě chceme vidět pouze řádky, kde je hodnota ve sloupci autor „Dan Brown“.
3.3 SELECT - jak zobrazit data
Nyní, když máme všechny potřebné sloupce z tabulky, které potřebujeme, musíme se rozhodnout, jak přesně tato data zobrazit. V našem případě potřebujeme pouze názvy a identifikátory knih, takže to máme my pojďme si vybrat pomocí SELECT. Zároveň můžete sloupec přejmenovat pomocí AS.
Celý dotaz lze vizualizovat pomocí jednoduchého diagramu:
4. Připojení (spojení)
Nyní chceme vidět názvy (ne nutně jedinečné) všech knih Dana Browna, které byly vypůjčeny z knihovny, a kdy je třeba tyto knihy vrátit:
SELECT books.title AS "Title", výpůjčky.returndate AS "Datum vrácení" FROM výpůjček PŘIPOJIT knihy NA výpůjčky.bookid=books.bookid WHERE books.author="Dan Brown";
Výsledek:
Titul |
Datum návratu |
---|
Ztracený symbol |
2016-03-23 00:00:00
|
Peklo |
2016-04-13 00:00:00
|
Ztracený symbol |
2016-04-19 00:00:00
|
Požadavek je z velké části podobný předchozímu kromě Z oddílů. To znamená, že dotazujeme se na data z jiné tabulky. Nemáme přístup ani k tabulce „knihy“, ani k tabulce „výpůjčky“. Místo toho se obracíme k nový stůl, který vznikl spojením těchto dvou tabulek.
výpůjčky JOIN books ON výpůjčky.bookid=books.bookid – považujte to za novou tabulku, která vznikla spojením všech záznamů z tabulek „knihy“ a „výpůjčky“, ve kterých jsou hodnoty bookid stejné. Výsledkem takového sloučení bude:
A pak se dotazujeme na tuto tabulku stejným způsobem jako v příkladu výše. To znamená, že při spojování stolů se musíte starat pouze o to, jak se připojit. A pak je žádost stejně jasná jako v případě „jednoduché žádosti“ z bodu 3.
Zkusme trochu složitější spojení se dvěma tabulkami.
Nyní chceme získat jména a příjmení lidí, kteří si z knihovny vzali knihy od autora „Dan Brown“.
Tentokrát půjdeme zdola nahoru:
Krok Krok 1- kde získáme data? Abychom získali výsledek, který potřebujeme, musíme spojit tabulky „člen“ a „knihy“ s tabulkou „výpůjčky“. Sekce JOIN bude vypadat takto:
výpůjčky PŘIPOJTE SE ke knihám ON výpůjčky.bookid=books.bookid PŘIPOJTE se ke členům ON members.memberid=výpůjčky.memberid
Výsledek spojení je vidět na odkazu.
Krok 2- jaké údaje zobrazujeme? Zajímají nás pouze údaje, kde je autorem knihy „Dan Brown“
WHERE books.author="Dan Brown"
Krok 3- jak zobrazujeme data? Nyní, když jsou data přijata, stačí zobrazit jména a příjmení těch, kteří si knihy vzali:
SELECT members.firstname AS "First Name", members.lastname AS "Last Name"
Super! Zbývá pouze zkombinovat tři komponenty a vytvořit požadavek, který potřebujeme:
SELECT members.firstname AS "First Name", members.lastname AS "Last Name" FROM výpůjčky JOIN books ON výpůjčky.bookid=books.bookid JOIN members ON members.memberid=borrowings.memberid WHERE books.author="Dan Brown";
Co nám dá:
Křestní jméno |
Příjmení |
---|
Mikrofon |
Willis |
Ellen |
Horton |
Ellen |
Horton |
Velký! Jména se ale opakují (nejsou jedinečná). Brzy to napravíme.
5. Agregace
Zhruba řečeno, Agregace jsou potřeba k převodu více řádků do jednoho. Zároveň se při agregaci používá různá logika pro různé sloupce.
Pokračujme v našem příkladu, kde se objevují duplicitní jména. Je jasné, že Ellen Horton si vzala víc než jednu knihu, ale tohle není nejvíc nejlepší způsob ukázat tyto informace. Můžete podat další požadavek:
SELECT members.firstname AS "First Name", members.lastname AS "Last Name", count(*) AS "Počet vypůjčených knih" FROM výpůjček PŘIPOJIT knihy ON výpůjčky.bookid=books.bookid PŘIPOJIT členy ON members.memberid=výpůjčky .memberid WHERE books.author="Dan Brown" GROUP BY members.firstname, members.lastname;
Což nám dá požadovaný výsledek:
Křestní jméno |
Příjmení |
Počet vypůjčených knih |
---|
Mikrofon |
Willis |
1
|
Ellen |
Horton |
2
|
Téměř všechny agregace přicházejí s klauzulí GROUP BY. Tato věc změní tabulku, kterou lze získat dotazem, na skupiny tabulek. Každá skupina odpovídá jedinečné hodnotě (nebo skupině hodnot) sloupce, který jsme zadali v GROUP BY . V našem příkladu převedeme výsledek z předchozího cvičení do skupiny řádků. Provádíme také agregaci s count , která převede více řádků na celočíselnou hodnotu (v našem případě na počet řádků). Tento význam je pak přiřazen každé skupině.
Každý řádek ve výsledku představuje výsledek agregace každé skupiny.
Lze dospět k logickému závěru, že všechna pole ve výsledku by měla být buď specifikována v GROUP BY , nebo by na nich měla být provedena agregace. Protože všechna ostatní pole se od sebe mohou lišit různé linie, a pokud je vyberete SELECT "ohm, pak není jasné, který z nich možné hodnoty potřeba to vzít.
V příkladu výše funkce počítání zpracovali všechny řádky (protože jsme počítali počet řádků). Další funkce jako proces sum nebo max zadané linky. Pokud chceme například zjistit počet knih napsaných jednotlivými autory, potřebujeme následující dotaz:
VYBERTE autora, součet(zásob) FROM knih GROUP BY autora;
Výsledek:
autor |
součet |
---|
Robin Sharma |
4
|
Dan Brown |
6
|
John Green |
3
|
Amish Tripathi |
2
|
Zde součtová funkce zpracovává pouze sloupec akcií a vypočítává součet všech hodnot v každé skupině.
6. Dílčí dotazy
Poddotazy jsou běžné SQL dotazy vložené do větších dotazů. Jsou rozděleny do tří typů podle typu vráceného výsledku.
6.1 Dvourozměrná tabulka
Existují dotazy, které vracejí více sloupců. Dobrý příklad Toto je dotaz z předchozího agregačního cvičení. Protože se jedná o poddotaz, jednoduše vrátí jinou tabulku, proti které lze provádět nové dotazy. V návaznosti na předchozí cvičení, pokud chceme znát počet knih napsaných autorem „Robinem Sharmou“, pak jedna z možné způsoby- použijte poddotazy:
SELECT * FROM (VYBRAT autora, součet (zásob) FROM knih GROUP BY autora) AS results WHERE author="Robin Sharma";
Výsledek:
Lze napsat jako: ["Robin Sharma", "Dan Brown"]
2. Nyní tento výsledek použijeme v novém dotazu:
SELECT titul, bookid FROM knih WHERE autor IN (SELECT autora FROM (SELECT autora, suma(sklad) FROM knih GROUP BY autora) AS results WHERE sum > 3);
Výsledek:
titul |
bookid |
---|
Ztracený symbol |
2
|
Kdo bude plakat, až zemřeš? |
3
|
Peklo |
4
|
Toto je stejné jako:
SELECT titul, bookid FROM books WHERE autor IN ("Robin Sharma", "Dan Brown"); 6.3 Individuální hodnoty
Existují dotazy, jejichž výsledkem je pouze jeden řádek a jeden sloupec. Lze s nimi zacházet jako s konstantními hodnotami a lze je použít kdekoli, kde se hodnoty používají, například v porovnávacích operátorech. Mohou být také použity jako dvourozměrné tabulky nebo jednoprvková pole.
Pojďme si například získat informace o všech knihách, jejichž počet v knihovně přesahuje současný průměr.
Průměr lze získat takto:
vybrat avg(stock) z knih;
Co nám dává:
7. Operace zápisu
Většina operací zápisu do databáze je ve srovnání se složitějšími operacemi čtení poměrně jednoduchá.
7.1 Aktualizace
Syntax Žádost o AKTUALIZACI sémanticky stejné jako požadavek na čtení. Jediný rozdíl je v tom, že místo výběru sloupců pomocí SELECT nastavujeme znalost pomocí SET.
Pokud se ztratí všechny knihy Dana Browna, musíte hodnotu množství resetovat. Dotaz na to by byl:
AKTUALIZACE SADA knih zásob=0 WHERE autor="Dan Brown";
WHERE dělá to samé jako předtím: vybírá řádky. Místo SELECT, který jsme používali při čtení, nyní používáme SET. Nyní je však potřeba zadat nejen název sloupce, ale také novou hodnotu pro tento sloupec ve vybraných řádcích.
7.2 Smazat
Dotaz DELETE je jednoduše dotaz SELECT nebo UPDATE bez názvů sloupců. Vážně. Stejně jako u SELECT a UPDATE zůstává blok WHERE stejný: vybírá řádky, které mají být smazány. Operace odstranění zničí celý řádek, takže nemá smysl specifikovat jednotlivé sloupce. Pokud se tedy rozhodneme neresetovat počet knih Dana Browna, ale vymazat všechny záznamy úplně, můžeme podat následující požadavek:
VYMAZAT Z knih WHERE autor="Dan Brown"; 7.3 Vložit
Snad jediná věc, která se liší od ostatních typů dotazů, je INSERT. Formát je:
INSERT INTO x (a,b,c) HODNOTY (x, y, z);
Kde a, b, c jsou názvy sloupců a x, y a z jsou hodnoty, které mají být vloženy do těchto sloupců, ve stejném pořadí. To je v podstatě vše.
Pojďme se na to podívat konkrétní příklad. Zde je dotaz INSERT, který vyplní celou tabulku „knihy“:
INSERT INTO books (bookid,title,author,published,stock) VALUES (1,"Scion of Ikshvaku","Amish Tripathi","06-22-2015",2), (2,"The Lost Symbol"," Dan Brown","07-22-2010",3), (3,"Kdo bude plakat, až zemřeš?","Robin Sharma","06-15-2006",4), (4,"Inferno" ,,Dan Brown","05-05-2014",3), (5,"The Fault in our Stars","John Green","01-03-2015",3); 8. Zkontrolujte
Došli jsme na konec, navrhuji malý test. Podívejte se na ten požadavek na samém začátku článku. Dokážete na to přijít? Zkuste to rozdělit do sekcí SELECT , FROM , WHERE , GROUP BY a zvažte jednotlivé komponenty poddotazy.
Tady je to v čitelnější podobě:
SELECT členy.křestní jméno || " " || members.lastname AS "Celé jméno" FROM výpůjček VNITŘNÍ JOIN členové ON members.memberid=výpůjčky.memberid INNER JOIN knihy ON books.bookid=výpůjčky.bookid WHERE výpůjčky.bookid IN (SELECT bookid FROM books WHERE stock> (SELECT avg(stock ) Z knih)) GROUP BY členové.křestní jméno, členové.příjmení;
Tento dotaz vrátí seznam lidí, kteří si rezervovali knihu z knihovny, jejíž celkový počet je nad průměrem.
Výsledek:
Doufám, že jste na to přišli bez problémů. Ale pokud ne, uvítám vaše komentáře a zpětnou vazbu, abych mohl tento příspěvek vylepšit.
Štítky: Přidat štítky
Norma jazyk SQL byl přijat v roce 1992 a používá se dodnes. Právě to se stalo pro mnohé standardem Samozřejmě, že někteří výrobci používají své vlastní výklady standardu. Ale každý systém má stále hlavní komponenty - příkazy SQL.
Zavedení
Pomocí příkazů SQL jsou spravovány hodnoty a tabulky a získávány pro další analýzu a zobrazení. Jedná se o sadu klíčových slov, pomocí kterých systém rozumí, co má s daty dělat.
Je definováno několik kategorií příkazů SQL:
- definování databázových objektů;
- manipulace s hodnotami;
- ochrana a kontrola;
- parametry relace;
- informace o databázi;
- statické SQL;
- dynamické SQL.
SQL příkazy pro manipulaci s daty
VLOŽIT. Vloží řádky do existující tabulky. Může být použit pro jednu hodnotu nebo několik, definovaných určitou podmínkou. Například:
název tabulky (název sloupce 1, název sloupce 2)
HODNOTY(hodnota 1, hodnota 2).
Chcete-li použít příkaz INSERT pro více hodnot, použijte následující syntaxi:
název tabulky 1 (název sloupce 1, název sloupce 2)
SELECT název sloupce 1, název sloupce 2
Z názvu tabulky 2
WHERE název tabulky 2.název sloupce 1>2
Tento dotaz vybere všechna data z tabulky 2, která jsou větší než 2 ve sloupci 1, a vloží je do prvního.
AKTUALIZOVAT. Jak název napovídá, tento operátor SQL dotaz aktualizuje data v existující tabulce na základě konkrétního kritéria.
AKTUALIZACE názvu tabulky 1
SET název sloupce 2 = "Vasily"
WHERE název tabulky 1. název sloupce 1 = 1
Tato konstrukce vyplní hodnotou Vasily všechny řádky, ve kterých narazí na číslo 1 v prvním sloupci.
Údaje z tabulky. Můžete zadat podmínku nebo odstranit všechny řádky.
DELETE FROM název tabulky
WHERE název tabulky. název sloupce 1 = 1
Výše uvedený dotaz odstraní z databáze všechna data s hodnotou jedna v prvním sloupci. Zde je návod, jak vymazat celou tabulku:
příkaz SELECT
Hlavním účelem SELECT je výběr dat podle určitých podmínek. Výsledek jeho práce je vždy nový stůl s vybranými údaji. Operátor MS může být použit v řadě různých dotazů. Proto spolu s tím můžete zvážit další související klíčová slova.
Chcete-li vybrat všechna data z konkrétní tabulky, použijte znak „*“.
Z názvu tabulky 1
Výsledek práce této žádosti vůle přesná kopie tabulka 1.
A zde se provede výběr pomocí podmínky WHERE, která načte z tabulky 1 všechny hodnoty větší než 2 ve sloupci 1.
Z názvu tabulky 1
WHERE název tabulky 1. název sloupce 1 > 2
Ve výběru můžete také určit, že jsou potřeba pouze určité sloupce.
SELECT název tabulky 1. název sloupce 1
Z názvu tabulky 1
Výsledkem tohoto dotazu budou všechny řádky s hodnotami ze sloupce 1. Pomocí operátorů MS SQL si můžete vytvořit vlastní tabulku, nahrazovat, počítat a nahrazovat určité hodnoty za běhu.
název tabulky 1. název sloupce 1
název tabulky 1. název sloupce 2
název tabulky 1. název sloupce 3
název tabulky 1. název sloupce 2 * název tabulky 1. název sloupce 3 AS SUMMA
Z názvu tabulky 1
Tento zdánlivě složitý dotaz načte všechny hodnoty z tabulky 1 a poté vytvoří nové sloupce EQ a SUMMA. První je vyplněna znaménkem „+“ a druhá je součinem dat ze sloupců 2 a 3. Výsledek lze prezentovat ve formě tabulky, abyste pochopili, jak to funguje:
Při použití příkazu SELECT můžete data okamžitě třídit podle libovolného kritéria. K tomu slouží slovo ORDER BY.
název tabulky 1. název sloupce 1
název tabulky 1. název sloupce 2
název tabulky 1. název sloupce 3
Z názvu tabulky 1
ŘADIT PODLE názvu sloupce 2
Výsledná tabulka bude vypadat takto:
To znamená, že všechny řádky byly nastaveny v takovém pořadí, aby hodnoty ve sloupci 2 byly ve vzestupném pořadí.
Data lze také získat z několika tabulek. Pro přehlednost si nejprve musíte představit, že v databázi jsou dva, něco takového:
Tabulka "Zaměstnanci"
Tabulka "Plat"
Nyní musíte tyto dvě tabulky nějak propojit, abyste získali obecné hodnoty. Pomocí základních příkazů SQL to můžete provést takto:
Zaměstnanci.Počet
Zaměstnanci.Jméno
Plat. Sazba
Plat. Časově rozlišené
OD Zaměstnanců, Plat
KDE Zaměstnanci.Číslo = Mzda.Číslo
Zde je výběr ze dvou různé tabulky hodnoty kombinované číslem. Výsledkem bude následující soubor dat:
Trochu více o SELECT. Použití agregačních funkcí
Jeden z hlavních operátorů může při načítání provádět některé výpočty. K tomu používá určité funkce a vzorce.
Chcete-li například získat počet záznamů z tabulky Zaměstnanci, musíte použít dotaz:
VYBERTE POČET (*) JAKO N
OD ZAMĚSTNANCŮ
Výsledkem je tabulka s jednou hodnotou a sloupcem.
Můžete spustit dotaz takto a zjistit, co se stane:
SUMA(Plat. Naběhlý) JAKO SUMA
MAX.(Plat. Časově rozlišený) JAKO MAX
MIN (Mzd. Časově rozlišený) JAKO MIN
AVG (Plat. Časově rozlišený) JAKO SRED
OD Mzd
Finálový stůl bude vypadat takto:
Takto můžete vybírat z databáze požadované hodnoty, provádění výpočtů různých funkcí za běhu.
Spojení, průnik a rozdíly
Kombinujte více dotazů v SQL
VYBERTE zaměstnance.Jméno
OD ZAMĚSTNANCŮ
KDE Zaměstnanci. Počet = 1
VYBERTE zaměstnance.Jméno
OD Zaměstnanců, Plat
KDE Mzda.Číslo = 1
Je třeba mít na paměti, že při takovém spojení musí být tabulky kompatibilní. To znamená mít stejný počet sloupců.
Syntaxe příkazu SELECT a pořadí zpracování
První věc, kterou SELECT udělá, je určit oblast, ze které bude brát data. K tomu slouží klíčové slovo FROM. Pokud není uvedeno, co přesně vybrat.
Pak může být přítomna klauzule SQL WHERE. S jeho pomocí SELECT projde všechny řádky tabulky a zkontroluje, zda data splňují podmínku.
Pokud dotaz obsahuje GROUP BY, pak jsou hodnoty seskupeny podle zadaných parametrů.
Operátory pro porovnávání dat
Existuje několik typů. V SQL příkazy srovnání lze ověřit různé typy hodnoty.
"="." Označuje, jak asi tušíte, rovnost dvou výrazů. Například již bylo použito v příkladech výše - WHERE Plat.Číslo = 1.
">". Více znamení. Pokud je hodnota levé strany výrazu větší, vrátí se logická TRUE a podmínka se považuje za splněnou.
«<». Знак меньше. Обратный предыдущему оператор.
Znamení"<=» и «>= = Od jednoduchých více a méně operátorů se liší tím, že pokud jsou operandy stejné, podmínka bude také pravdivá.
JAKO
Toto klíčové slovo lze přeložit jako „podobné“. Operátor LIKE v SQL se používá přibližně stejně – provádí dotaz na základě šablony. To znamená, že umožňuje rozšířit výběr dat z databáze pomocí regulárních výrazů.
Například byl stanoven následující úkol: z již známé databáze „Zaměstnanci“ získat všechny lidi, jejichž jméno končí na „I“. Poté lze dotaz napsat takto:
OD ZAMĚSTNANCŮ
WHERE Název LIKE `%i`
Znak procenta v tomto případě znamená masku, tedy libovolný znak a jeho počet. A podle písmene „I“ SQL určí, že poslední znak by měl být přesně takový.
VĚC
Tento příkaz SQL Server je implementací vícenásobného výběru. Připomíná konstrukci přepínače v mnoha programovacích jazycích. Příkaz CASE v SQL provede akci na základě několika podmínek.
Například musíte vybrat maximální a minimální hodnoty z tabulky „Plat“.
Potom lze dotaz napsat takto:
OD Mzd
V PŘÍPADĚ, KDYŽ VYBERTE MAX(Accrued) TAK Maximum
KDYŽ ZVOLÍTE MIN (Accrued), PAK MINIMUM
V této souvislosti systém hledá maximální a minimální hodnotu ve sloupci Accrued. Poté se pomocí END vytvoří pole „celkem“, do kterého se zadá „Maximum“ nebo „Minimum“ v závislosti na výsledku podmínky.
Mimochodem, SQL má i kompaktnější formu CASE - COALESCE.
Operátoři definice dat
Toto zobrazení umožňuje provádět různé úpravy tabulek – vytváření, mazání, úpravy a práci s indexy.
První, který stojí za zvážení, je CREATE TABLE. Nedělá nic jiného, než že vytváří tabulku. Pokud jednoduše zadáte dotaz CREATE TABLE, nic se nestane, protože ještě musíte zadat několik parametrů.
Chcete-li například vytvořit již známou tabulku „Zaměstnanci“, musíte použít příkazy:
VYTVOŘIT TABULKU Zaměstnanci
(Číslo (10) NOT NULL
Název varchar(50) NOT NULL
Příjmení varchar(50) NOT NULL)
V tomto dotazu jsou názvy polí a jejich typy okamžitě určeny v závorkách a také to, zda se může rovnat NULL.
DOP STŮL
Provede jeden jednoduchý úkol – shodí zadanou tabulku. Má další parametr IF EXISTS. Pokud tabulka, kterou hledáte, neexistuje, absorbuje chybu drop. Příklad použití:
DROP TABLE Zaměstnanci, POKUD EXISTUJE.
VYTVOŘIT INDEX
SQL má indexový systém, který umožňuje urychlit přístup k datům. Obecně se jedná o odkaz, který ukazuje na konkrétní sloupec. Můžete vytvořit index jednoduchá žádost:
CREATE INDEX index_name
ON název_tabulky(název_sloupce)
Tento operátor se používá v T-SQL, Oracle, PL SQL a mnoha dalších interpretačních technologiích.
ALTER TABULKA
Velmi funkční operátor s mnoha možnostmi. Obecně mění strukturu, definici a umístění tabulek. Používaný operátor v Oracle SQL, Postgres a mnoha dalších.
PŘIDAT. Přidá sloupec do tabulky. Jeho syntaxe je následující: ALTER TABLE název_tabulky ADD název_sloupce uložený_datový_typ. Může mít možnost IF NOT EXISTS pro potlačení chyby, pokud vytvářený sloupec již existuje;
POKLES. Odstraní sloupec. Má také klíč IF EXISTS, bez kterého bude vygenerována chyba indikující, že chybí požadovaný sloupec;
PŘEMĚNA. Slouží k přejmenování názvu pole na zadaný. Příklad použití: ALTER TABLE název_tabulky CHANGE staré_jméno nové_jméno;
UPRAVIT. Tento příkaz vám pomůže změnit typ a další atributy určitého sloupce. A používá se takto: ALTER TABLE název_tabulky MODIFY název_sloupce atributy_typu dat;
VYTVOŘIT ZOBRAZENÍ
V SQL existuje něco jako pohled. Ve zkratce jde o jakousi virtuální tabulku s daty. Je vytvořen jako výsledek výběru pomocí příkazu SQL SELECT. Pohledy mohou omezit přístup k databázi, skrýt je a nahradit skutečné názvy sloupců.
Proces vytváření probíhá pomocí jednoduchého požadavku:
CREATE VIEW view name AS SELECT FROM * table name
Vzorkování může probíhat buď z celé databáze, nebo na základě nějaké podmínky.
Něco málo o funkcích
SQL dotazy velmi často využívají různé vestavěné funkce, které umožňují interakci s daty a jejich transformaci za běhu. Stojí za to o nich uvažovat, protože tvoří nedílnou součást strukturovaného jazyka.
POČÍTAT. Počítá záznamy nebo řádky v konkrétní tabulce. Jako parametr můžete zadat název sloupce, pak se z něj budou brát data. VYBRAT POČET * OD zaměstnanců;
AVG. Platí pouze pro sloupce s číselnými údaji. Jeho výsledkem je stanovení aritmetického průměru všech hodnot;
MIN a MAX. Tyto funkce již byly použity v tomto článku. Určují maximální a minimální hodnoty ze zadaného sloupce;
SOUČET. Je to jednoduché – funkce vypočítá součet hodnot sloupců. Platí výhradně pro číselná data. Přidáním parametru DISTINCT do dotazu budou sečteny pouze jedinečné hodnoty;
KOLO. Funkce pro zaokrouhlování desetinných zlomků. Syntaxe používá název sloupce a počet desetinných míst;
LEN. Jednoduchá funkce, která vypočítá délku hodnot sloupce. Výsledkem bude nová tabulka udávající počet znaků;
TEĎ. Toto klíčové slovo se používá k výpočtu aktuálního data a času.
Další operátoři
Mnoho příkladů příkazů SQL má klíčová slova, která provádějí malé úkoly, ale stále výrazně zjednodušují vyhledávání nebo manipulaci s databází.
AS. Používá se, když potřebujete vizuálně zformátovat výsledek přiřazením zadaného názvu výsledné tabulce.
MEZI. Velmi pohodlný nástroj pro vzorkování. Určuje rozsah hodnot, mezi kterými mají být data načtena. Jako vstup bere parametr od a do jakého čísla se rozsah používá;.
NE. Operátor dává opak výrazu.
ZKRÁTIT. Odstraní data ze zadané části databáze. Od podobných operátorů se liší tím, že po použití nelze data obnovit. Stojí za zvážení, že implementace tohoto klíčového slova v různých interpretacích SQL se může lišit. Než se tedy pokusíte použít TRUNCATE, je lepší si přečíst informace nápovědy.
OMEZIT. Nastaví počet řádků na výstup. Zvláštností operátoru je, že je umístěn vždy na konci. Přijímá jeden požadovaný parametr a jeden volitelný. První určuje, kolik řádků vybraných dat se má zobrazit. A pokud je použit druhý, pak operátor pracuje jako pro rozsah hodnot.
UNIE. Velmi pohodlný operátor pro kombinování více dotazů. To již bylo nalezeno mezi příklady v tomto článku. Můžete zobrazit požadované řádky z několika tabulek jejich kombinací s UNION pro pohodlnější použití. Jeho syntaxe je následující: SELECT název_sloupce FROM název_tabulky UNION SELECT název_jiného_sloupce FROM název_jiné_tabulky. Výsledkem je kontingenční tabulka s kombinovanými dotazy.
PRIMÁRNÍ KLÍČ. Přeloženo jako „primární klíč“. Ve skutečnosti je to přesně terminologie používaná v referenčních materiálech. Znamená to jedinečný identifikátor řádku. Používá se zpravidla při vytváření tabulky k označení pole, které ji bude obsahovat.
VÝCHOZÍ. Stejně jako předchozí operátor se používá při provádění požadavku na vytvoření. Definuje výchozí hodnotu, kterou bude pole vyplněno při jeho vytvoření.
NULL. Začátečníci a nejen programátoři při psaní dotazů velmi často zapomínají na možnost získání hodnoty NULL. V důsledku toho se do kódu vloudí chyba, kterou je při ladění obtížné dohledat. Při vytváření tabulek, výběru nebo přepočítávání hodnot je tedy potřeba se zastavit a zamyslet se nad tím, zda se počítá s výskytem NULL v této části dotazu.
Paměť. Tento článek ukázal několik funkcí, které mohou provádět některé úkoly. Při vývoji shellu pro práci s databází můžete zadat výpočet jednoduchých výrazů systému správy databází. V některých případech to vede k výraznému zvýšení výkonu.
Omezení. Pokud potřebujete získat pouze dva řádky z databáze s tisíci řádky, měli byste použít operátory jako LIMIT nebo TOP. Není potřeba extrahovat data pomocí vývojového jazyka shellu.
Sloučenina. Po přijetí dat z několika tabulek je mnoho programátorů začne spojovat pomocí paměti shellu. Ale proč? Koneckonců, můžete vytvořit jednu žádost, ve které bude toto vše přítomno. Není třeba psát další kód a rezervovat další paměť v systému.
Řazení. Pokud je možné použít řazení v dotazu, tedy pomocí DBMS, musíte jej použít. To vám umožní výrazně ušetřit prostředky při spuštění programu nebo služby.
Spousta žádostí. Pokud musíte vkládat mnoho záznamů postupně, pak pro optimalizaci byste měli přemýšlet o dávkovém vkládání dat s jedním požadavkem. Tím se také zvýší výkon celého systému jako celku.
Promyšlené umístění dat. Před sestavením struktury databáze je třeba se zamyslet nad tím, zda je tolik tabulek a polí potřeba. Možná existuje způsob, jak je zkombinovat nebo některé vyřadit. Programátoři velmi často používají nadměrné množství dat, které nikdy nikde nevyužijí.
Typy. Chcete-li ušetřit místo a zdroje, musíte být citliví na typy dat, která používáte. Pokud je možné použít typ, který je méně „těžký“ na paměť, měli byste jej použít. Pokud například víte, že číselná hodnota v daném poli nepřesáhne 255, proč tedy používat 4bajtový INT, když existuje 1bajtový TINYINT.
Závěr
Na závěr je třeba poznamenat, že strukturovaný dotazovací jazyk SQL se dnes používá téměř všude – webové stránky, webové služby, PC programy, aplikace pro mobilní zařízení. Znalost SQL tedy pomůže všem odvětvím vývoje.
Úpravy původní jazykové normy se však někdy navzájem liší. Například příkazy PL SQL mohou mít jinou syntaxi než v SQL Server. Než se tedy pustíte do vývoje s touto technologií, vyplatí se přečíst si tutoriály o ní.
V budoucnu je nepravděpodobné, že by se objevily analogy, které by mohly překonat SQL ve funkčnosti a výkonu, takže tato oblast je poměrně slibným místem pro každého programátora.
Odeslání vaší dobré práce do znalostní báze je snadné. Použijte níže uvedený formulář
Studenti, postgraduální studenti, mladí vědci, kteří využívají znalostní základnu ve svém studiu a práci, vám budou velmi vděční.
Plán
Úvod……………………………………………………………………………………………………………… 3
Kapitola I. Teoretické informace o dotazovacím jazyce SQL………………………………..4
1.1. Koncept relační databáze………………………………..………………4
1.2. Koncepce jazyka SQL………………………………………………………………...10
1.3. Interaktivní a vnořené SQL………………………………………………….12
1.4. SQL pododdělení ……………………………………………………………………… 13
1.5. Datové typy………………………………………………………...….13
1.6. Nekonzistence SQL…………………………………………………………………...... 16
Kapitola II. Použití SQL k načtení informací………………18
2.1. Vytvoření požadavku………………………………………………………………... 18
2.2. Příkaz SELECT……………………………………………………………………….19
2.3. DISTINCT příkaz ………………………………………………………………………… 22
2.4. Návrhy týmů………………………………………………………….24
Závěr………………………………………………………………………...…..27
Seznam referencí………………………………………………………..…….28
Zavedení
Většina moderních DBMS je postavena na relačním datovém modelu. Pro získání informací z databázových vztahů (tabulek) se jako jazyk pro manipulaci s daty teoreticky používají tři abstraktní jazyky: jazyk relační algebry; jazyk relačního kalkulu na nicích; doménový relační kalkulový jazyk.
Jako praktický jazyk pro práci s daty vyvinula IBM v polovině 70. let strukturovaný dotazovací jazyk SQL, který se později stal de-facto standardem při práci s databázemi. Současný přechod na velké podnikové DBMS, jako jsou Oracle, Informix, Sybase, DB2, Progress, činí studium jazyka SQL relevantním jak z praktického hlediska, tak čistě teoreticky, protože prvky jazyka SQL jsou založeny na ustanoveních teorie vztahy, teorie množin a logika.
Cílem práce v kurzu je analyzovat možnosti jazyka SQL.
K dosažení tohoto cíle je nutné vyřešit následující úkoly:
· Studium literatury k tématu;
· Přezkoumat strukturu SQL;
· Definovat specifikaci jazyka a standardy;
· Naučte se používat SQL pro vyhledávání informací.
Kapitolajá.
Teorie dotazovacího jazykaSQL
1.1. Koncepce relační databáze
SQL (běžně vyslovované „Pokračování“) znamená Structured Query Language. Je to jazyk, který umožňuje pracovat v relačních databázích, což jsou kolekce souvisejících informací uložených v tabulkách.
Svět databází se stále více sjednocuje, což vedlo k potřebě vytvořit standardní jazyk, který lze použít pro fungování ve velkém množství různých typů počítačových prostředí. Standardní jazyk umožní uživatelům, kteří znají jednu sadu příkazů, používat je k vytváření, vyhledávání, úpravě a sdělování informací, ať už pracují na osobním počítači, síťové pracovní stanici nebo sálovém počítači.
V našem stále více propojeném počítačovém světě má uživatel vybavený takovým jazykem obrovskou výhodu v používání a shrnutí informací z celé řady zdrojů mnoha způsoby.
Jeho elegance a nezávislost na počítačové technologii, stejně jako jeho podpora od předních výrobců v technologii relačních databází, učinily SQL, a pravděpodobně v dohledné budoucnosti zůstane, dominantním standardním jazykem. Z tohoto důvodu každý, kdo chce pracovat s databázemi z 90. let, musí znát SQL.
Standard SQL je definován ANSI (American National Standards Institute) a v současné době je také přijat ISO (International Organization for Standardization). Většina komerčních databázových programů však rozšiřuje SQL bez upozornění ANSI a přidává do jazyka různé další funkce, o kterých se domnívají, že budou velmi užitečné. Někdy poněkud porušují standard jazyka, ačkoli dobré nápady mají tendenci se rozvíjet a brzy se samy o sobě stanou „tržními“ standardy kvůli své užitečnosti.
Relační databáze je soubor souvisejících informací uložených ve dvourozměrných tabulkách. Připomíná mi adresu nebo telefonní seznam. Kniha má velké množství záznamů, z nichž každý odpovídá určitému rysu. Pro každou takovou funkci může existovat několik nezávislých údajů, jako je jméno, telefonní číslo a adresa. Předpokládejme, že jste tento adresář naformátovali jako tabulku s řádky a sloupci. Každý řádek (nazývaný také záznam) bude odpovídat určitému prvku; každý sloupec bude obsahovat hodnotu pro každý typ dat – jméno, telefonní číslo a adresu zastoupené v každém řádku. Adresář může vypadat takto:
Výsledkem je základ relační databáze – konkrétně dvourozměrné (řádkové a sloupcové) tabulky informací. Relační databáze se však zřídka skládají z jediné tabulky. Taková tabulka je menší než souborový systém. Vytvořením více tabulek souvisejících informací můžete s daty provádět složitější a výkonnější operace. Síla databáze závisí na vztazích, které lze vytvořit mezi informacemi, nikoli na informacích jako takových.
Na příkladu adresáře můžeme začít diskutovat o databázi, kterou lze skutečně použít v obchodní situaci. Předpokládejme, že postavy v první tabulce (adresáři) jsou nemocniční pacienti. V jiné tabulce jsme si mohli vzpomenout na další informace o těchto pacientech. Sloupce druhé tabulky mohou být označeny jako Pacient, Lékař, Pojištění a Zůstatek.
Extrahováním informací z těchto tabulek podle specifikovaných parametrů lze provádět mnoho výkonných funkcí, zejména pokud tyto parametry obsahují části informací, které se vzájemně vztahují v různých tabulkách. Vezměme si například lékaře. Řekněme, že doktor Halben chtěl získat telefonní čísla všech svých pacientů. K získání těchto informací mohl propojit tabulku telefonních čísel pacientů (z adresáře) s tabulkou, která by ukazovala, který pacient je jeho. Ačkoli v tomto jednoduchém příkladu by to mohl mít na paměti a okamžitě získat telefonní čísla pacientů Grilleta a Brocka, tyto tabulky mohou být příliš velké a příliš složité. Relační databázové programy byly vyvinuty pro zpracování velkých a komplexních kolekcí tohoto typu dat, což je zjevně univerzálnější metoda v obchodním světě. I kdyby databáze nemocnice obsahovala stovky nebo tisíce jmen – jak je to v praxi pravděpodobné – jeden příkaz SQL by mohl poskytnout doktoru Halbenovi potřebné informace téměř okamžitě.
Aby byla zachována maximální flexibilita, řádky tabulky by podle definice neměly být v žádném konkrétním pořadí. Z tohoto pohledu se zde struktura databáze liší od našeho adresáře. Položky adresáře jsou obvykle uspořádány abecedně. V systémech relačních databází je jednou z výkonných funkcí pro uživatele schopnost organizovat informace tak, aby je mohli získat.
Podívejme se na druhou tabulku. Někdy je nutné vidět tyto informace uspořádané abecedně podle jména, někdy ve vzestupném nebo sestupném pořadí a někdy seskupené podle konkrétního lékaře. Vložení nastaveného pořadí do řádků naruší schopnost zákazníka jej změnit, takže řádky jsou vždy považovány za neuspořádané. Z tohoto důvodu nemůžete jednoduše říci: "Chceme se podívat na pátý řádek tabulky." Když zanedbáme pořadí, ve kterém byla data zadána, nebo jakékoli jiné kritérium, určíme nesprávný řádek, i když ano. být pátý. Řádky tabulky, které jsou zkoumány, nebudou v žádném konkrétním pořadí.
Z těchto a dalších důvodů musíte mít v tabulce sloupec, který jednoznačně identifikuje každý řádek. Tento sloupec obvykle obsahuje číslo – například číslo pacienta přiřazené každému pacientovi. Samozřejmě můžete použít jméno pacientů, ale je možné, že existuje několik Mary Smiths; a v tomto případě nebudete mít žádný jiný způsob, jak tyto pacienty od sebe odlišit.
Proto jsou čísla tak nezbytná. Takový jedinečný sloupec (nebo jedinečná skupina sloupců) používaný k identifikaci každého řádku a ukládání všech řádků odděleně se nazývá primární klíče tabulky.
Primární klíče tabulky jsou důležitým prvkem ve struktuře databáze. Jsou základem vašeho systému nahrávání souborů; a když chcete najít konkrétní řádek v tabulce, odkazujete na tento primární klíč. Primární klíče navíc zajišťují, že vaše data mají určitou integritu. Pokud je primární klíč správně používán a udržován, budete vědět, že v tabulce nejsou žádné prázdné řádky a že každý řádek se liší od všech ostatních.
Na rozdíl od řádků jsou sloupce tabulky (také nazývané pole) uspořádány a pojmenovány. V naší tabulce adresáře je tedy možné ukázat na „adresu sloupce“ nebo na „sloupec 3“. To samozřejmě znamená, že každý sloupec v dané tabulce musí mít jedinečný název, aby se předešlo nejednoznačnosti. Nejlepší je, když tyto názvy označují obsah pole.
Tabulky 1.1, 1.2 a 1.3 tvoří relační databázi, která je minimálně dostatečná pro snadné sledování a dostatečně obsáhlá, aby ilustrovala klíčové koncepty a postupy SQL.
První sloupec každé tabulky obsahuje čísla, jejichž hodnoty se pro každý řádek liší. Toto jsou primární klíče tabulek. Některá z těchto čísel jsou také uvedena ve sloupcích jiných tabulek. Na tom není nic špatného. Zobrazují vztah mezi řádky, které používají hodnotu z primárního klíče, a řádky, kde je tato hodnota použita v samotném primárním klíči.
Tabulka 1.1 - Prodejci
Tabulka 1.2 - Zákazníci
Tabulka 1.3 - Objednávky
Například pole snum v tabulce Zákazníci označuje prodejce, kterému je tento zákazník přiřazen. Číslo pole snum je spojeno s tabulkou Dodavatelé, která poskytuje informace o těchto dodavatelích. Je zřejmé, že dodavatel, kterému jsou přiřazeni zákazníci, již musí existovat – to znamená, že hodnota snum z tabulky Zákazníci musí být přítomna také v tabulce Dodavatelé. Pokud je tomu tak, pak se systém nazývá „ve stavu referenční integrity“
Podívejme se na tyto tři tabulky a jejich hodnoty polí.
Zde jsou uvedeny sloupce tabulky 1.1
Tabulka 1.2 obsahuje následující sloupce:
A v tabulce 1.3 jsou sloupce:
1.2.
KoncepceSQL-jazyk
SQL je jazyk navržený speciálně pro relační databáze. Odstraňuje spoustu práce, kterou byste museli dělat, pokud byste používali programovací jazyk pro obecné použití, jako je C. Chcete-li vytvořit relační databázi v C, musíte začít od začátku. Museli byste definovat objekt – nazvaný tabulka – který by mohl narůst tak, aby měl libovolný počet řádků, a poté vytvořit přírůstkové procedury pro vkládání hodnot a získávání hodnot z něj. Pokud byste chtěli najít nějaké konkrétní řetězce, budete muset postupovat krok za krokem, jako je tento:
Zvažte řádek tabulky.
Zkontrolujte, zda je tento řetězec jedním z řetězců, které potřebujete.
Pokud ano, uložte jej někam, dokud nebude zkontrolována celá tabulka.
Zkontrolujte, zda v tabulce nejsou další řádky.
Pokud existují, vraťte se ke kroku 1.
Pokud neexistují žádné další řádky, vytiskněte všechny hodnoty uložené v kroku 3.
(Samozřejmě se nejedná o skutečnou sadu příkazů C, ale pouze o logiku kroků, které by obsahoval skutečný program). SQL toto vše zachrání. Příkazy v SQL mohou pracovat se všemi skupinami tabulek jako jeden objekt a mohou zpracovávat jakékoli množství informací extrahovaných nebo odvozených z nich jako jeden modul.
Standard SQL je definován pomocí kódu ANSI (American National Standards Institute). SQL nebyl vynalezen ANSI. Je to v podstatě vynález IBM. Poté, co se na trhu objevila řada konkurenčních SQL programů, ANSI definovala standard, kterému by měly být přizpůsobeny (definování takových standardů je funkcí ANSI).
Po tomto se však objevily určité problémy. Vznikly v důsledku standardizace ANSI v podobě určitých omezení. Protože ANSI ne vždy určuje, co je nejužitečnější, programy se snaží vyhovět standardu ANSI, aniž by jim to umožnilo příliš je omezovat. To zase vede k náhodným nesrovnalostem. Databázové programy obvykle poskytují ANSI SQL další funkce a často uvolňují mnohá omezení většiny z nich.
SQL má určité speciální termíny, které se používají k jeho popisu. Mezi nimi jsou slova jako dotaz, klauzule a predikát, která jsou nejdůležitější pro popis a pochopení jazyka, ale pro SQL neznamenají nic nezávislého.
Příkazy nebo příkazy jsou instrukce, které používáme pro přístup k databázi SQL. Příkazy se skládají z jedné nebo více samostatných logických částí nazývaných klauzule. Věty začínají klíčovým slovem, pro které jsou pojmenovány, a skládají se z klíčových slov a argumentů. Příklady klauzulí, se kterými se můžeme setkat, jsou „FROM Salespeople“ a „WHERE city = „Londýn“.
Argumenty doplňují nebo mění význam věty. Ve výše uvedených příkladech je argument Prodejci a klíčové slovo FROM klauzule FROM.
Podobně, "city = "Londýn"" je argument klauzule WHERE. Objekty jsou struktury v databázi, které jsou pojmenovány a uloženy v paměti.
Patří mezi ně základní tabulky, pohledy (dva typy tabulek) a indexy.
1.3. Interaktivní a vnořenéSQL
Existují dva SQL: Interactive a Nested. Z velké části fungují obě formy stejně, ale používají se odlišně. Interaktivní SQL se používá ke spuštění přímo v databázi a vytváří výstup pro použití zákazníkem. V této formě SQL, když zadáte příkaz, bude okamžitě proveden a budete moci vidět výstup (pokud existuje) - okamžitě.
Vnořené SQL se skládá z příkazů SQL umístěných uvnitř programů, které jsou obvykle napsány v nějakém jiném jazyce (jako je COBOL nebo Pascal).
Díky tomu jsou tyto programy výkonnější a efektivnější. Povolení těchto jazyků však přichází se strukturou SQL a stylem správy dat, který vyžaduje některá rozšíření interaktivního SQL. Předávání příkazů SQL do vnořených příkazů SQL se „předává“ pro proměnné nebo parametry používané programem, ve kterém byly vnořeny.
1.4. PododděleníSQL
V interaktivní i vnořené formě SQL existuje mnoho částí nebo pododdělení.
Bohužel se tyto termíny nepoužívají univerzálně ve všech implementacích. Jsou zdůrazněny ANSI a jsou užitečné na koncepční úrovni, ale většina programů SQL je málo zpracovává odděleně, takže se v podstatě stávají funkčními kategoriemi příkazů SQL.
DDL (Data Definition Language) - tzv. Schema Description Language v ANSI, sestává z příkazů, které vytvářejí objekty (tabulky, indexy, pohledy atd.) v databázi.
DML (Data Manipulation Language) je sada příkazů, které určují, jaké hodnoty jsou v tabulkách v daném okamžiku reprezentovány.
DCD (Data Control Language) se skládá z nástrojů, které určují, zda povolit uživateli provádět určité akce nebo ne. Jsou součástí ANSI DDL. Nejedná se o různé jazyky, ale o části příkazů SQL seskupené podle jejich funkcí.
1.5. Typy dat
Ne všechny typy hodnot, které mohou obsadit pole tabulky, jsou logicky stejné. Nejviditelnější rozdíl je mezi čísly a textem. Nemůžete seřadit čísla v abecedním pořadí ani odečíst jedno jméno od druhého. Vzhledem k tomu, že relační databázové systémy jsou založeny na vztazích mezi částmi informací, musí být různé typy dat od sebe jasně odlišitelné, aby mezi nimi bylo možné provádět vhodné procesy a srovnání.
V SQL se to dělá tak, že každému poli je přiřazen datový typ, který označuje typ hodnoty, kterou může pole obsahovat.
Všechny hodnoty v tomto poli musí být stejného typu. V tabulce Zákazníci například cname a město obsahují řádky textu pro hodnocení, snum a cnum jsou již čísla. Z tohoto důvodu nemůžete zadat hodnotu Nejvyšší nebo Žádná do pole hodnocení, které má číselný datový typ. Toto omezení je dobré, protože ukládá vašim datům určitou strukturu. Často budete porovnávat některé nebo všechny hodnoty v daném poli, takže možná budete chtít provést akci pouze na určitých řádcích, nikoli na všech. To byste nemohli udělat, pokud byly hodnoty polí smíšeného datového typu.
Bohužel, definování těchto datových typů je hlavní oblastí, kde většina komerčních databázových programů a oficiální SQL standard ne vždy souhlasí. Standard ANSI SQL rozpoznává pouze textové a číselné typy, zatímco většina komerčních programů používá jiné speciální typy. Jako DATA a TIME jsou ve skutečnosti téměř standardní typy (ačkoli jejich přesný formát se liší). Některé balíčky také podporují typy jako MONEY a BINARY. (PENÍZE jsou speciální číselný systém používaný počítači. Veškeré informace v počítači jsou přenášeny v binárních číslech a následně převedeny do jiných systémů, abychom je mohli snadno používat a rozumět jim).
ANSI definuje několik různých typů číselných hodnot, rozdíly mezi nimi jsou velmi jemné a někdy matoucí.
Složitost numerických typů ANSI lze přičíst, alespoň částečně, snaze učinit vnořené SQL kompatibilní s řadou dalších jazyků.
Dva typy čísel ANSI, INTEGER a DECIMAL (které lze zkrátit jako INT a DEC, v tomto pořadí), budou adekvátní pro naše účely, stejně jako pro účely většiny praktických obchodních aplikací. Typ INTEGER lze přirozeně reprezentovat jako DESETINNÉ ČÍSLO, které napravo od desetinné čárky neobsahuje žádné číslice.
Typ textu je CHAR (nebo CHAR), který odkazuje na řetězec textu. Pole CHAR má specifickou délku, která je určena maximálním počtem znaků, které lze do pole zadat.
Většina implementací má také nestandardní typ nazývaný VARCHAR, což je textový řetězec, který může mít libovolnou délku až do maxima definovaného implementací (obvykle 254 znaků). Hodnoty CHARACTER a VARCHAR jsou uvedeny v jednoduchých uvozovkách jako „text“. Rozdíl mezi CHAR a VARCHAR je ten, že CHAR musí vyhradit dostatek paměti pro maximální délku řetězce, zatímco VARCHAR přiděluje paměť podle potřeby.
Typy znaků se skládají ze všech tisknutelných znaků, včetně čísel.
Číslo 1 však není totožné se znakem „1“. Znak "1" je jen další vytištěný text, který systém nezjistí jako s číselnou hodnotou 1.
Například 1 + 1 = 2, ale "1" + "1" se nerovná "2".
Hodnoty znaků jsou uloženy v počítači jako binární hodnoty, ale uživateli se zobrazují jako tištěný text. Převod se řídí formátem určeným systémem, který používáte. Tento převodní formát bude jedním ze dvou standardních typů (možná s rozšířeními) používaných v počítačových systémech: kód ASCII (používaný ve všech osobních a malých počítačích) a kód EBCDIC (používaný ve velkých počítačích). Určité operace, jako je abecední řazení hodnot polí, se změní s formátem.
1.6.
SQLnesrovnalosti
V rámci produktů světa SQL existují nezávislé nekonzistence. SQL se vynořil z komerčního databázového světa jako nástroj a později byl vyvinut do standardu ANSI. Bohužel ANSI ne vždy určuje největší přínos, takže programy se snaží vyhovět standardu ANSI, aniž by jim to umožnilo je příliš omezovat. ANSI je jakýmsi minimálním standardem – můžete dělat více, než vám umožňuje, ale musíte být schopni dosáhnout stejných výsledků jako při provádění stejného úkolu.
SQL se obvykle vyskytuje na počítačových systémech, které mají více než jednoho uživatele, a proto je třeba mezi nimi rozlišovat. Typicky má v takovém systému každý uživatel nějaký druh ověřovacího kódu práv, který ho identifikuje (terminologie se liší). Na začátku relace s počítačem se uživatel přihlásí (zaregistruje) tak, že počítači sdělí, kdo je uživatel, identifikován konkrétním ID. Libovolný počet lidí používajících stejné přístupové ID jsou samostatní uživatelé; a podobně může jedna osoba zastupovat velký počet uživatelů (v různých časech) pomocí různých dostupných identifikátorů.
SQL následuje. Akce ve většině prostředí SQL jsou přetypovány na speciální přístupný identifikátor, který přesně odpovídá konkrétnímu uživateli. Tabulku nebo jiný objekt vlastní uživatel, který nad ním má plnou kontrolu. Uživatel může nebo nemusí mít oprávnění k provedení akce s objektem.
Jako argument v příkazu lze použít speciální hodnotu USER. Označuje dostupné ID uživatele zadávajícího příkaz.
Závěry kapitoly
já:
První kapitola představila koncept relační databáze. Také jsme se naučili některé základní principy o tom, jak se vytvářejí tabulky – jak fungují řádky a sloupce, jak primární klíče navzájem rozlišují řádky a jak mohou sloupce odkazovat na hodnoty v jiných sloupcích. Definovali jsme, že záznam je synonymem pro řádek a pole je synonymem pro sloupec. Podívali jsme se na ukázkové tabulky. Krátké a jednoduché, jsou schopny ukázat většinu funkcí jazyka.
Byl také uveden koncept jazyka SQL, některé jeho konvence a termíny, byla zvážena jeho struktura, použití jazyka SQL, poskytování dat a jejich definice (a některé nesrovnalosti, které se v tomto případě objevují).
KapitolaII. Použití jazykaSQLextrahovat informace z tabulek
2.1.
Vytvořte žádost
SQL je zkratka pro Structured Query Language. Dotazy jsou pravděpodobně nejčastěji používaným aspektem SQL. Ve skutečnosti je pro kategorii uživatelů SQL nepravděpodobné, že by někdo jazyk používal k něčemu jinému. Z tohoto důvodu začneme diskusi o SQL diskuzí o dotazu a o tom, jak se v tomto jazyce provádí.
Dotaz je příkaz zadaný vašemu databázovému programu, který mu říká, aby zobrazil určité informace z tabulek do paměti. Tyto informace jsou obvykle odesílány přímo na obrazovku počítače nebo terminálu, i když ve většině případů mohou být také odeslány na tiskárnu, uloženy do souboru (jako objekt v paměti počítače) nebo poskytnuty jako vstup pro jiný příkaz nebo proces.
Dotazy jsou obecně považovány za součást jazyka DML. Protože však dotaz nemění informace v tabulkách, ale pouze je zobrazuje uživateli, budeme dotazy považovat za samostatnou kategorii mezi příkazy DML, které provádějí akci, spíše než pouze zobrazují obsah databáze.
Všechny SQL dotazy se skládají z jediného příkazu. Struktura tohoto příkazu je zdánlivě jednoduchá, protože jej musíte rozšířit, abyste mohli provádět vysoce komplexní vyhodnocení a manipulace s daty. Tento příkaz se nazývá SELECT.
2.2.
NAtýmVYBRAT
Ve své nejjednodušší podobě příkaz SELECT jednoduše přikáže databázi získat informace z tabulky. Můžete například zobrazit tabulku Dodavatelé zadáním následujícího:
SELECT snum, sname, sity, comm
OD Prodejců;
Výstup pro tento dotaz je uveden v tabulce 2.1.
Tabulka 2.1 - příkaz SELECT
|
Protokol provádění SQL
|
|
SELECT snum, sname, sity, comm FROM Salespeople;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Jinými slovy, tento příkaz jednoduše zobrazí všechna data z tabulky. Většina programů také poskytuje záhlaví sloupců, jak je uvedeno výše, a některé umožňují podrobné formátování výstupu, ale to je mimo standardní specifikace.
Pro každou část tohoto příkazu je vysvětlení:
SELECT je klíčové slovo, které říká databázi, že tento příkaz je dotaz. Všechny dotazy začínají tímto slovem, za kterým následuje mezera.
Snum, sname je seznam sloupců z tabulky, které jsou vybrány dotazem. Žádné sloupce, které zde nejsou uvedeny, nebudou zahrnuty do výstupu příkazu. To samozřejmě neznamená, že budou smazáni nebo jejich informace budou vymazány z tabulek, protože dotaz nemá vliv na informace v tabulkách; zobrazuje pouze data.
FROM FROM je klíčové slovo, jako SELECT, které musí prodejci uvést v každém dotazu. Za ním následuje mezera a poté název tabulky použité jako zdroj informací. V tomto případě je to tabulka Prodejci.
Středník se používá ve všech interaktivních příkazech SQL, aby řekl databázi, že příkaz je dokončen a připraven k provedení.
Na některých systémech zpětné lomítko (\) na řádku označuje konec příkazu.
Přirozeně, dotaz této povahy nemusí nutně seřadit výstup žádným specifikovaným způsobem. Stejný příkaz provedený se stejnými daty, ale v různých časech, nevytvoří stejné pořadí. Řádky se obvykle nacházejí v pořadí, v jakém se nacházejí v tabulce, protože, jak jsme zjistili v předchozí kapitole, je toto pořadí libovolné. Nemusí se nutně jednat o pořadí, ve kterém byla data zadána nebo uložena. Výstup příkazů SQL můžete zařadit přímo: pomocí speciální klauzule.
Použití návratu (klávesa ENTER) je volitelné. Musíte přesně určit, jak je pohodlnější sestavit dotaz na několik řádků nebo na jeden řádek, a to následovně:
SELECT snum, jméno, město, comm FROM Prodejci;
Protože SQL používá k označení konce příkazu středník, většina programů SQL považuje návraty (prostřednictvím stisknutí klávesy Return nebo klávesy ENTER) za mezeru. Je dobré používat zpětné sledování a zarovnání, aby byly vaše příkazy snáze čitelné a správnější.
Pro zobrazení kompletního seznamu sloupců lze použít hvězdičku (*):
OD Prodejců;
Výsledkem bude stejný výsledek jako předchozí příkaz.
Obecně platí, že příkaz SELECT začíná klíčovým slovem SELECT následovaným mezerou. Poté by měl následovat seznam názvů sloupců, které chcete zobrazit, oddělené čárkami. Chcete-li zobrazit všechny sloupce v tabulce, můžete tento seznam nahradit hvězdičkou (*). Následuje klíčové slovo FROM, za ním mezera a název tabulky, na kterou se dotaz provádí. Nakonec by se měl použít středník (;) k ukončení příkazu a označení, že příkaz je připraven k provedení.
Příkaz SELECT je schopen extrahovat přesně definované informace z tabulky. Nejprve můžete vidět pouze určité sloupce tabulky. To lze snadno provést jednoduchým vyloučením sloupců, které nejsou potřeba, z části SELECT příkazu. Například žádost
SELECT jméno, kom
OD Prodejců;
vytvoří výstup uvedený v tabulce 2.2:
Tabulka 2.2 - Výběr konkrétních sloupců
|
Protokol provádění SQL
|
|
SELECT snum, comm FROM Prodejci;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Můžete mít tabulky s velkým počtem sloupců obsahujících data, z nichž ne všechny jsou relevantní pro daný úkol. Proto lze nalézt způsob, jak vybrat a vybrat pouze užitečné sloupce.
I když jsou sloupce tabulky podle definice uspořádané, neznamená to, že budou obnoveny ve stejném pořadí. Hvězdička (*) samozřejmě zobrazí všechny sloupce v jejich přirozeném pořadí, ale pokud jsou uvedeny samostatně, můžeme je získat v požadovaném pořadí. Zvažte tabulku objednávky obsahující datum nákupu (odate), číslo prodejce (snum), číslo objednávky (onum) a částku nákupu (amt):
SELECT odate, snum, onum, amt
Výstup tohoto dotazu je uveden v tabulce 2.3.
Tabulka 2.3 - Rekonstrukce sloupů
|
Protokol provádění SQL
|
|
SELECT odate, snum, onum, amt FROM Objednávky;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Struktura informací v tabulkách je jednoduše základem pro aktivní restrukturalizaci v SQL.
2.3. TýmODLIŠNÝ
Příkaz DISTINCT je argument, který může odstranit duplicitní hodnoty z klauzule SELECT. Předpokládejme, že potřebujeme vědět, kteří prodejci mají aktuálně své objednávky v tabulce Objednávky. Objednávkou se rozumí záznam v tabulce Objednávky, který eviduje nákupy uskutečněné v určitý den určitým zákazníkem od určitého prodejce za určitou částku. Nepotřebujeme vědět, kolik objednávek každý má; potřebujeme pouze seznam čísel prodejců (snum). Proto můžete zadat:
abyste získali výstup uvedený v tabulce 2.4.
Tabulka 2.4 - VÝBĚR s duplicitními čísly prodejce
|
Protokol provádění SQL
|
|
SELECT snum FROM Objednávky;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chcete-li získat seznam bez duplikátů, pro čitelnost můžete zadat následující:
SELECT DISTINCT snum
Výstup pro tento dotaz je uveden v tabulce 2.5.
Jinými slovy, DISTINCT sleduje, jaké hodnoty tam byly předtím, aby se v seznamu neduplikovaly. Je to užitečný způsob, jak se vyhnout redundanci dat. Abyste předešli ztrátě některých dat, neměli byste DISTINCT používat bez rozmyslu, protože to může skrývat nějaký problém nebo některá důležitá data.
DISTINCT se v dané klauzuli SELECT může objevit pouze jednou. Pokud návrh vybere mnoho oblastí,
Tabulka 2.5 - VÝBĚR bez duplikace
|
Protokol provádění SQL
|
|
SELECT DISTINCT snum FROM Objednávky;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DISTINCT vynechá řádky, kde jsou všechna vybraná pole identická. Řádky, ve kterých jsou některé hodnoty stejné a některé odlišné, budou uloženy. DISTINCT ve skutečnosti způsobí, že se zobrazí celý řádek výstupu bez zadání jakýchkoli polí (kromě případů, kdy se použije uvnitř agregačních funkcí), takže nemá smysl to opakovat.
Místo DISTINCT můžete zadat - VŠECHNY. To bude mít opačný účinek, duplicitní výstupní řádky zůstanou. Protože se jedná o stejný případ, kdy není specifikováno ani DISTINCT, ani ALL, je ALL v podstatě spíše vysvětlujícím než operativním argumentem.
2.4.
Týmové návrhy
Tabulky mají tendenci být velmi velké, protože do nich postupem času přibývá více a více řádků. Protože obvykle jsou zajímavé pouze určité řádky, SQL vám umožňuje nastavit kritéria pro určení, které řádky jsou vybrány pro výstup.
WHERE je klauzule SELECT, která umožňuje nastavit predikáty, jejichž podmínka může být pravdivá nebo nepravdivá pro libovolný řádek v tabulce. Příkaz načte z tabulky pouze ty řádky, pro které je toto tvrzení pravdivé. Potřebujeme například vidět jména a provize všech prodejců v Londýně. Můžete zadat následující příkaz:
SELECT jméno, město
OD Prodejců;
WHERE město = "LONDÝN";
Když je uvedena klauzule WHERE, databázový program prohledá celou tabulku jeden řádek po druhém a prozkoumá každý řádek, aby určil, zda je daný příkaz pravdivý. U položky Peel se tedy program podívá na aktuální hodnotu sloupce města, určí, že se rovná "Londýn", a zahrne tento řetězec do výstupu. Záznam pro Serres nebude zahrnut a tak dále.
Výstup pro výše uvedený dotaz je uveden v tabulce 2.6.
Tabulka 2.6 - SELECT s klauzulí WHERE
|
Protokol provádění SQL
|
|
VYBERTE jméno, město FROM Prodejci WHERE město = "Londýn"
|
|
|
|
|
|
|
|
|
Zkusme příklad s číselným polem v klauzuli WHERE. Pole hodnocení v tabulce Zákazníci je určeno k rozdělení zákazníků do skupin na základě určitých kritérií, která lze nakonec získat prostřednictvím tohoto čísla. Možná je to forma hodnocení úvěru nebo ocenění na základě objemu předchozích akvizic. Takové číselné kódy mohou být užitečné v relačních databázích jako způsob shrnutí komplexních informací. Všechny zákazníky s hodnocením 100 můžete vybrat následovně:
hodnocení WHERE = 100;
Jednoduché uvozovky se zde nepoužívají, protože skóre je číselné pole. Výsledky dotazu jsou uvedeny v tabulce 2.7.
V příkazu SELECT, který používá WHERE, můžete použít čísla sloupců, odstranit duplicity nebo změnit pořadí sloupců. Pořadí sloupců pro názvy však můžete změnit pouze v klauzuli SELECT, nikoli v klauzuli WHERE.
Tabulka 2.7 - SELECT s číselným polem v predikátu
|
Protokol provádění SQL
|
|
SELECT * FROM Zákazníci WHERE hodnocení = 100;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Vzávěry kapitoly
II:
Nyní známe několik způsobů, jak vytvořit tabulku, která poskytne potřebné informace, a nejen vyhodit celý její obsah. Je možné změnit pořadí sloupců tabulky nebo některý z nich odstranit a také se rozhodnout, zda chcete zobrazit duplicitní hodnoty nebo ne.
Nejdůležitější je, že můžete nastavit podmínku zvanou predikát, která určuje, zda bude pro výstup vybrán určitý řádek tabulky z tisíců podobných řádků.
Závěr
Dokončením práce můžeme dojít k závěru, že SQL je vysokoúrovňový programovací jazyk určený pro práci s databázemi. Umožňuje upravovat data, sestavovat a spouštět dotazy a zobrazovat výsledky ve formě sestav. V současné době je to obecně uznávaný standard pro systémy správy relačních databází.
Jazyk SQL se obvykle používá ve spojení s univerzálními programovacími jazyky C, Pascal atd., případně s jazyky pro správu databází Fox, dBASE IV atd.
Seznampoužitýliteratura
1. F. Andon, V. Reznichenko SQL Query Language: Training Course. - Petrohrad: Petr, 2006.
2. K. Date Guide k relačnímu DBMS DB2. - M.: Finance a statistika, 1988. - 320 s.
3. V.V. Kirillov Základy navrhování relačních databází. Studijní příručka. - Petrohrad: ITMO, 1994. - 90 s.
4. M. Meyer Teorie relačních databází. - M.: Mir, 1987. - 608 s.
5. Distribuované DBMS. Informix. Část 1. Základy práce s databázemi. - Směrnice pro provádění laboratorních prací / V.M. Stasyshin - Novosibirsk: NSTU, 1995.
6. Databáze J. Ullmana v Pascalu. - M.: Strojírenství, 1990. - 386 s.
Podobné dokumenty
Obecné informace o hlavních operátorech jazyka SQL. Interaktivní režim provozu. Použijte jazyk SQL k výběru informací z tabulek, vkládání, úpravě a mazání dat v nich. Vztah mezi operacemi relační algebry a příkazy SQL.
abstrakt, přidáno 02.06.2015
Pojem a obecná charakteristika programovacího jazyka PHP, principy a fáze jeho práce, syntaxe a související pole. Zpracování výjimek v Javě. Práce s databázemi pomocí JDBC. Naučte se, jak vytvořit grafické rozhraní.
prezentace, přidáno 13.06.2014
Pojem relačního datového modelu, integrita jeho podstaty a vazeb. Hlavní fáze tvorby databáze, propojení tabulek v datovém diagramu. Návrh databáze pro katalog knih "Knihy" pomocí Microsoft Access DBMS a dotazovacího jazyka SQL.
práce v kurzu, přidáno 25.11.2010
Obecné informace o historii vzniku a standardech SQL: mezinárodní standard 1989, 1992 (SQL2), standard SQL: 1999 (SQL3). Interaktivní a vnořené SQL. SQL pododdělení. Strukturovaný dotazovací jazyk pro vytváření a úpravy tabulek.
abstrakt, přidáno 14.10.2011
Structured Query Language (SQL) a jeho místo v oblasti přístupu k informacím v relačních databázích. Struktura a základní datové typy jazyka. Syntaxe a sémantika hlavních SQL příkazů, nejnovější jazykové standardy.
abstrakt, přidáno 29.03.2012
Teoretické informace a základní pojmy databází. Systémy správy databází: složení, struktura, bezpečnost, provozní režimy, objekty. Práce s databázemi v OpenOffice.Org BASE: vytváření tabulek, vztahů, dotazů pomocí Průvodce dotazem.
práce v kurzu, přidáno 28.04.2011
Rozdíly mezi existujícími dialekty SQL. Standardizace jazyka SQL. Koncept databáze. Efektivita organizace dat. Struktura jazyka SQL. Přibližné číselné typy. Datový typ intervalu. Zpracování složitých strukturovaných informací.
práce v kurzu, přidáno 29.05.2014
Obecné informace o systémech správy databází MS Access. Použití jazyka QBE k vytvoření dotazů pro výběr dat. Parametrické a křížové dotazy. Dotazy s automatickou náhradou pro výběr duplikátů a záznamů, které nemají shodu.
práce v kurzu, přidáno 06.03.2015
Návrh relační databáze pomocí aplikačního softwaru MS ACCESS. Popisy funkcí použití dotazů k načtení, změně a odstranění informací z databáze. Charakteristika struktury uživatelského rozhraní.
práce v kurzu, přidáno 19.11.2012
Analýza předmětné oblasti pomocí modelů metodiky ARIS a vytvoření ER diagramu. Popis vstupních a výstupních informací pro návrh relační databáze. Vývoj řídicích dotazů a vztahů mezi nimi pomocí jazyka SQL.
Oblíbené v kategorii:
Jak sloučit vrstvy ve Photoshopu do jedné nebo je spojit do skupiny...
číst
Přenos kontaktů do nového telefonu Android
číst
Samsung Galaxy se sám restartuje – řešení Galaxy Note...
číst
Klíčové vlastnosti Kaspersky Rescue Disk
číst
Nahoru