Základní přehled SQL příkazů

Podobné dokumenty
Osnova je orientační pro FIT, u FEKTu se dá předpokládat, že budou zohledněny předchozí znalosti studentů, kde většina s databází nikdy přímo

U koly na procvic ení jazyka T-SQL

Úvod do databázových systémů

KIV/ZIS cvičení 5. Tomáš Potužák

Databázové systémy Cvičení 5.2

Databázové systémy. Cvičení 6: SQL

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

Databázové systémy I

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

KIV/ZIS cvičení 6. Tomáš Potužák

Informační systémy ve zdravotnictví. 10. cvičení

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

Úvod do databázových systémů

Úvod do databázových systémů

Databázové systémy Cvičení 5.3

XMW4 / IW4 Pokročilé SELECT dotazy. Štefan Pataky

Úvod do databází. Modelování v řízení. Ing. Petr Kalčev

Databázové systémy Cvičení 5

Databáze SQL SELECT. David Hoksza

6. blok část B Vnořené dotazy

Úvod do databázových systémů 3. cvičení

Co bude výsledkem mého SELECTu? RNDr. David Gešvindr MVP: Data Platform MCSE: Data Platform MCSD: Windows Store MCT

Databáze I. Přednáška 6

Databáze I. Přednáška 4

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

Návrh a tvorba WWW stránek 1/14. PHP a databáze

KIV/ZIS - SELECT, opakování

Informační systémy ve zdravotnictví. 8. cvičení

6. blok část C Množinové operátory

Jaký je rozdíl v definicicíh VARCHAR2(20 BYTE) a VARCHAR2(20 CHAR):

Databázové systémy I

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

Operátory ROLLUP a CUBE

Databáze. Velmi stručný a zjednodušený úvod do problematiky databází pro programátory v Pythonu. Bedřich Košata

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Úvod do databázových systémů

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav

MS Access Dotazy SQL

Stored Procedures & Database Triggers, Tiskové sestavy v Oracle Reports

KIV/ZIS - SQL dotazy. stáhnout soubor ZIS- 04_TestovaciDatabaze accdb. SQL dotazy. budeme probírat pouze SELECT

- sloupcové integritní omezení

Databázové systémy. Dotazovací jazyk SQL - II

PG 9.5 novinky ve vývoji aplikací

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

téma: Výběrové dotazy v MS Access

SQL v14. 4D Developer konference. 4D Developer conference 2015 Prague, CZ Celebrating 30 years

SQL SQL-SELECT. Informační a znalostní systémy. Informační a znalostní systémy SQL- SELECT

Text úlohy. Systémový katalog (DICTIONARY):

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

Základy relačních databází, jejich využití v programování webu

8.2 Používání a tvorba databází

Databázové systémy. Datová integrita + základy relační algebry. 4.přednáška

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Inovace a zkvalitnění výuky prostřednictvím ICT Databázové systémy MySQL základní pojmy, motivace Ing. Kotásek Jaroslav

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

Vzorové příklady SQL. Tabulka: Kniha CREATE TABLE kniha (id INTEGER, název VARCHAR(50), PRIMARY KEY (id))

Kapitola 6: Omezení integrity. Omezení domény

Kapitola 4: SQL. Základní struktura

Microsoft Access. Typy objektů databáze: Vytvoření a návrh nové tabulky. Vytvoření tabulky v návrhovém zobrazení

Ukládání a vyhledávání XML dat

TEORIE ZPRACOVÁNÍ DAT Cvičení 8

Databázové systémy a SQL

Západočeská univerzita v Plzni Katedra informatiky a výpočetní techniky. 9. června krovacek@students.zcu.cz

SQL. strukturovaný dotazovací jazyk. Structured Query Language (SQL)

SQL - trigger, Databázové modelování

Sada 1 - PHP. 15. Výběr dat z databáze. Příkaz SELECT

Databázové systémy a SQL

Jazyk SQL databáze SQLite. připravil ing. petr polách

5. blok Souhrnné a skupinové dotazy

Databázové systémy. Doc.Ing.Miloš Koch,CSc.

Úvod do databázových systémů

DJ2 rekurze v SQL. slajdy k přednášce NDBI001. Jaroslav Pokorný

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.

Zdokonalování gramotnosti v oblasti ICT. Kurz MS Excel kurz 3. Inovace a modernizace studijních oborů FSpS (IMPACT) CZ.1.07/2.2.00/28.

Popis ovládání. Po přihlášení do aplikace se objeví navigátor. Navigátor je stromově seřazen a slouží pro přístup ke všem oknům celé aplikace.

Databázové systémy, MS Access. Autor: Ing. Jan Nožička SOŠ a SOU Česká Lípa VY_32_INOVACE_1130_Databázové systémy, MS Access_PWP

Databáze 2011/2012 SQL DDL (CREATE/ALTER/DROP TABLE), DML (INSERT/UPDATE/DELETE) RNDr.David Hoksza, Ph.D.

Vkládání, aktualizace, mazání

Úvod do filtrace, Quick filtr

Internetová filmová databáze IFDB

Řešené příklady STUDENT(RČ, JMÉNO, SPECIALIZACE) PŘEDMĚT(KÓD, NÁZEV, SYLLABUS, GARANT) ZÁPIS(RČ, KÓD, SEMESTR, ZNÁMKA)

Informační systémy ve zdravotnictví. 6. cvičení

Databázové systémy a SQL

Jazyk SQL 1. Michal Valenta. Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c Michal Valenta, 2012 BI-DBS, ZS 2011/12

Dotazy tvorba nových polí (vypočítané pole)

Dotazování v relačním modelu a SQL

Databáze 2011/2012 SQL SELECT II. RNDr.David Hoksza, Ph.D.

6. SQL složitější dotazy, QBE

Databáze v Excelu EU peníze středním školám Didaktický učební materiál

Marian Kamenický. Syntea software group a.s. marian.kamenicky. MFFUK Praha 2012/13

Marketingová komunikace. 2. soustředění. Mgr. Pavel Vávra Kombinované studium Skupina N9KMK1aPH/N9KMK1bPH (um1a1ph/um1b1ph)

Tabulka fotbalové ligy

12. blok Pokročilé konstrukce SQL dotazů - část II

Základy informatiky. 08 Databázové systémy. Daniela Szturcová

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

Transkript:

Základní přehled SQL příkazů SELECT Základní použití Příkaz SELECT slouží k získání dat z tabulky nebo pohledu v požadované podobě. Získání všech řádků a sloupců z tabulky SELECT * FROM Person.Contact Vrací všechny všechny řádky a sloupce (*) z tabulky Person.Contact (Person je schéma do kterého tabulka Contact patří, je-li tabulka v jiném schématu než dbo, je třeba uvádět v jejím názvu toto schéma) Získání všech řádků a vybraných sloupců z tabulky SELECT FirstName, LastName FROM Person.Contact Vrací všechny řádky z tabulky, ale jen zvolné sloupce Aplikace filtru na vracené řádky SELECT * FROM Person.Contact WHERE Title = 'Mr.' Vrací pouze řádky, kde hodnota sloupce Title je rovna řetězci 'Mr.' Podmínky lze seskupovat logickými operátory (AND, OR, NOT) SELECT * FROM Person.Contact WHERE Title = 'Mr.' AND Suffix = 'Jr.' Práce s řetězci v podmínce Pokud potřebujeme použít zástupné symboly v řetězci, musíme použít klíčové slovo LIKE SELECT * FROM Person.Contact WHERE Title NOT LIKE 'M%' Dotaz vrací všechny řádky z dané tabulky, kde ve sloupci Title není (NOT) řetězec začínající písmenem M, které je následované 0-n libovolnými symboly. % - 0..n libolných symbolů _ - 1 libolný symbol [abc] - množina symbolů (aplikován 1x) [^abc] -všechny symboly, kromě určených (aplikován 1x) SELECT * FROM Person.Contact WHERE ContactID < 10 Vrací řádky, kde je ContactID < 10

Podmínka na test hodnoty NULL SELECT * FROM Sales.SalesOrderHeader WHERE CreditCardID IS NULL Na hodnotu NULL se v podmínce musíme dotazovat klíčovým slovem IS Poddotazy Existenční poddotaz SELECT * FROM SalesLT.Customer C WHERE EXISTS (SELECT * FROM SalesLT.CustomerAddress CA WHERE CA.CustomerID = C.CustomerID AND CA.AddressType = 'Shipping') Vrací ty řádky z tabulky Customer, pro které se povedlo najít záznam v CustomerAddress vyhovující podmínce poddotazu (Zákazník má definovanou Shipping adresu). Pro každý řádek z Customer je zavolán a vyhodnocen poddotaz, pokud je podmínka splněna, je tento řádek zhrnut do výsledku, jinak ne Práce s více tabulkami - JOIN INNER JOIN SELECT SOH.SalesOrderNumber, CC.CardType FROM Sales.SalesOrderHeader SOH INNER JOIN Sales.CreditCard CC ON SOH.CreditCardID = CC.CreditCardID WHERE CC.CardType = 'Vista' Za příkazem FROM a tabulkou následují příkaz INNER JOIN, který do našeho dotazu zahrne data i z další tabulky Sales.CreditCard. Pokud bychom nespecifikovali které sloupce chceme vybrat, tak by došlo k tomu, že za sloupce z tabulky SalesOrderHeader by byly přidány sloupce z tabulky CreditCard. Řádky jsou spojeny přes stejnou hodnotu vybraného sloupce (CreditCardID). Protože se jedná o INNER JOIN, výsledkem budou jen ty záznamy které se povedlo spojit (nebudou uvedeny záznamy z tabulky SalesOrderHeader, ke kterým se nepovedlo najít kreditní kartu). LEFT JOIN SELECT SOH.SalesOrderNumber, CC.CardType FROM Sales.SalesOrderHeader SOH LEFT JOIN Sales.CreditCard CC ON SOH.CreditCardID = CC.CreditCardID Výskedkem tohoto dotazu budou všechny záznamy z tabulky SalesOrderHeader ikdyž nebude nalezena pro ně platební karta (rozdíl oproti INNER). V tom případě budou mít sloupce z připojené tabulky hodnotu null. Aliasy SELECT * FROM SalesLT.Customer C WHERE EXISTS (SELECT * FROM SalesLT.CustomerAddress CA WHERE CA.CustomerID = C.CustomerID AND CA.AddressType = 'Shipping') U tohoto dotazu byla tabulka SalesLT.Customer pojmenována dočasně jako C a CustomerAddress jako CA. U poddotazů a při použití JOIN by mohlo dojít k následujícímu problému: Pracujeme se sloupcem, který se vyskytuje v obou tabulkách (CustomerID zmanená CustomerID z Customer nebo z CustomerAddress? Chyba.) a proto je třeba uvádět kromě názvu sloupce i tabulku. Abychom nemuseli uvádět celý název tabulky, můžeme jí pomocí přiřadit nejaký kratší název.

Příkaz můžeme použít i k přejmenování sloupce ve výsledku dotazu SELECT FirstName [Jméno], LastName [Příjmení] FROM Person.Contact Seskupování záznamů a agregační funkce Při zpracování záznamů můžeme chtít je seskupit do skupin podle hodnot ve vybraných sloupcích. Toho docílíme použitím GROUP BY Tento dotaz vybere záznamy z tabulky CreditCard a provede jejich seskupení podle hodnot ve sloupci CardType. Tím docílíme toho, že se vrátí pouze např. 4 řádky reprezentující každý typ karty a přidáním sloupce COUNT(*) získáme počet řádků v dané skupině (počet karet daného typu). Ve výsledcích se mohou objevit jen ty sloupce z tabulky CreditCard, podle kterých byla data seskupena, jinak dojde k chybě. Další agregační funkce: SUM(název sloupce) - sečte hodnoty v daném slupci pro každou skupinu MIN(název slupce) - vrací minimální hodnotu MAX(název slupce) - vrací maximální hodnotu AVG(název slupce) - vrací vypočítanou průměrnou hodnotu v daném sloupci pro danou skupinu záznamů Filtrování seskupených záznamů Pro filtrování seskupených záznamů slouží klíčové slovo HAVING HAVING COUNT(*) > 4800 Dotaz provede výpočet počtu karet podle jednotlivých typů a následně vrátí jen ty řádky, kde je počet karet větší než 4800. Rozdíl mezi HAVING a WHERE: WHERE se aplikuje na řádky před seskupováním HAVING se aplikuje na seskupené záznamy Řazení výsledků HAVING COUNT(*) > 4800 ORDER BY CardType Dotaz vrátí výsledky seřazené vzestupně podle hodnot ve sloupci CardType. Je možno definovat více sloupců:

SELECT * FROM Person.Contact ORDER BY FirstName, LastName DESC Dále je možno za sloupcem specifikovat, jestli budeme řadit vzestupně nebo sestupně (defaultně vzestupně). Fulltextové dotazy Aby fungovalo fulltextové vyhledávání, je třeba vytvořit Fulltextový katalog a Fulltextový index nad danými sloupci. FREETEXT WHERE FREETEXT (DocumentSummary, change payment ) CONTAINS WHERE CONTAINS (DocumentSummary, replacing or pedals ) Hledání podle blízkosti slov: WHERE CONTAINS (DocumentSummary, replacing NEAR pedals ) Vyhledávání s rankovanými výsledky (vyšší rank = vyšší relevance): SELECT f.rank, DocumentID, DocumentSummary d INNER JOIN FREETEXTTABLE(Production.Document, DocumentSummary, bicycle seat ) f ON d.documentid = [KEY] ORDER BY RANK DESC Modifikace dat Vkládání dat INSERT INTO Sales.CreditCard VALUES ('Maestro','5464654654',12,2009) Do specifikované tabulky vložíme hodnoty uvedené za VALUES. Pořadí se bere ze schématu tabulky a jsou vynechány vypočítané sloupce a sloupce s IDENTITY. INSERT INTO Sales.CreditCard (CardType, CardNumber) VALUES ('Maestro','5464654654') Možnost specifikovat pořadí sloupců a případně možnost některé vynechat. Modifikace dat UPDATE Sales.CreditCard SET CardNumber = '45646546' WHERE CardNumber = '45646547' Ve vybrané tabulce aktualizujeme záznamy splňující podmínku (pokud není podmínka, aktualizace se provede nad všemi záznamy!)

Odstranění dat DELETE FROM Sales.CreditCard WHERE CardNumber = '45646547' Odstraníme záznamy splňující podmínku (není-li podmínka, vymažou se všechny záznamy) Programátorské objekty Pohledy CREATE VIEW Sales.vCreditCardUsage Vytvoří pohled s názvem Sales.vCreditCardUsage, který bude vracet záznamy jako dotaz specifikovaný za slovem Uložené procedury CREATE PROCEDURE Sales.uspCreditCardUsage BEGIN END Vytvoří uloženou proceduru, která po spuštění vykoná daný kód (dotaz) mezi BEGIN a END CREATE PROCEDURE Sales.uspCreditCardUsageForCardType @CardType nvarchar(50) BEGIN HAVING CardType = @CardType END Ukázka vytvoření parametrizované uložené procedury