TEORIE ZPRACOVÁNÍ DAT Cvičení 8 Cvičení je zaměřené na práci v SQL, zejména dtazvání. Zadání je rzdělen d typvých úlh. Jedna úlha bsahuje základní dtaz a něklik alternativních dtazů ke stejné prblematice. Studentům je dpručen vypracvat všechny úlhy samstatně, aby byli schpni sestavit dtazy při zápčtvém testu. Custmer CustmerAddrress Address PrductCategry Prduct SalesOrderHeader SalesOrderDetail Pkud si chcete data nakpírvat d své databáze, pstupujte níže uvedeným způsbem. V pačném případě se v Micrsft SQL Management studiu přihlaste pd účtem studenttzd a s heslem studenttzd splečná databáze pak je tzd. (Pzr ve splečné databázi TZD jsu i jiné tabulky!) Imprtvání dat d vlastní databáze prveďte skrze nabídku: Prgramy Micrsft SQL Server 2008 Imprt and Exprt Data (32 r 64 bit). P spuštění prgramu: 1. Vyberete data surce Micrsft Excel a z disku vyberete subr se zdrjvými daty (shp_data.xls) 2. Jak Destinatin zvlíte, SQL Server Native Klient 10.0, přihlašvací údaje jsu stejné jak při práci s managementem studiem (win-edu.cs.vsb.cz\mssqlwinedu, pak váš lgin a hesl) následně v zálžce Database vyberete vaši databázi 3. Ptm si imprtujete jedntlivé listy Excel subru jak tabulky Neb máte mžnst si stáhnut subr shp.mdf a ten připjit d vaší databáze na lkálním serveru. 1. Nalgujte se d vlastní databáze v MS SQL Server Management Studi 2008 a klikněte pravým tlačítkem na slžce Databases. 2. V dané nabídce zvlte mžnst Attach, zde pmcí tlačítka Add vyberte subr shp.mdf a následně ptvrďte tlačítkem OK 3. Vytvří se databáze Shp se strukturu tabulek a datama
Mějme jednduchu databázi shpu, kde máme sedm tabulek: Custmer - tabulka se zákazníky atributy: CustmerID id zákazníka Title infrmace phlaví zákazníka FirstName jmén zákazníka MiddleName prstřední jmén zákazníka LastName příjmení zákazníka Suffix přípna za jménem CmpanyName jmén splečnsti SalesPersn značení prdejce EmailAddress emailvá adresa zákazníka Phne telefn zákazníka PasswrdHash zahashvané hesl zákazníka PasswrdSalt šifrvání hesla rwguid vygenervané čísl pr daný řádek v databázi MdifiedDate datum editace Address tabulka adres zákazníků AddressID id adresy AddressLine1 adresa ulice AddressLine2 ddatek k adrese ulice (např. čísl bytu atd.) City měst StatePrvince blast státu CuntryRegin stát PstalCde směrvací čísl rwguid vygenervané čísl pr daný řádek v databázi MdifiedDate datum editace CustmerAddress tabulka pr přiřazení adres zákazníkům CustmerID id zákazníka AddressID id adresy AddressType typ adresy (fakturační a pštvní) rwguid vygenervané čísl pr daný řádek v databázi MdifiedDate datum editace Prduct tabulka pr infrmace prduktech PrductID id prduktu Name název prduktu PrductNumber katalgvé čísl prduktu Clr barva prduktu StandardCst standardní cena ListPrice katalgvá cena Size velikst Wight váha PrductCategryID id kategrie prduktu SellStartDate datum začátku prdeje SellEndData datum uknčení prdeje rwguid vygenervané čísl pr daný řádek v databázi MdifiedDate datum editace PrductCategry tabulka pr kategrie PrductCategryID id kategrie prduktu ParentPrductCategryID id nadřízené kategrie prduktu
Name název kategrie rwguid vygenervané čísl pr daný řádek v databázi MdifiedDate datum editace SalesOrderHeader tabulka pr bjednávky SalesOrderID id bjednávky OrderData datum vytvření bjednávky DueDate datum zaplacení bejdnávky ShipDate datum pslání bjednávky Status status vyřízené bjednávky SalesOrderNumber čísl bjednávky PurchaseOrderNumber čísl zaplacení bjednávky AccuntNumber čísl účtu ShipTAddressId id adresy pr druční bjednávky BillTAddressID id adresy pr fakturu ShipMethd způsb deslání bjednávky SubTtal cena za bjednané zbží TaxAmt daň za bjednané zbží Freight cena pštvnéh TtalDue celkvá cena za bjednávku (= SubTtal + TaxAmt + Freight) Cmment kmentář rwguid vygenervané čísl pr daný řádek v databázi MdifiedDate datum editace SalesOrderDetail tabulka pr plžky v bjednávkce SalesOrderID id bjednávky SalesOrderDetailID id plžky OrderQty pčet danéh prduktu PrductID id prduktu UnitPrice cena za jedntku prduktu UnitPriceDiscunt sleva v prcentech LineTtal knečná cena za plžku (= UnitPrice * OrderQty * (1 - UnitPriceDiscunt) ) rwguid vygenervané čísl pr daný řádek v databázi MdifiedDate datum editace
Zadání úlh k řešení: 1. Vypište infrmace zákaznících s příjmením "Miller" [5 z.] SELECT * FROM Custmer WHERE LastName = 'Miller'; 2. Vypište infrmace zákaznících setřízený sestupně pdle příjmení [440 z.] SELECT * FROM Custmer ORDER BY LastName DESC; 3. Vypište jména hlavích kategrií velkými písmeny [4 z.] SELECT UPPER([Name]) FROM PrductCategry WHERE ParentPrductCategryID IS NULL; 4. Vypište seznam prduktů, jejichž barva je červená ("RED") a váha je větší než 1000 g [34 z.] SELECT * FROM Prduct WHERE Clr = 'Red' AND Weight > '1000'; 5. Vypište seznam adres, kde blast (StatePrvince) bsahuje řetězec "COL" [30 z.] SELECT * FROM Address WHERE StatePrvince LIKE '%cl%'; 6. Vypište celkvu částku zakruhlenu na celá čísla, maximánlní a minimální cenu za pštvné, průměrnu cenu za daň bjednanéh zbží [1 z.] SELECT ROUND(SUM(SubTtal),-0), MAX(Freight), MIN(Freight), AVG(TaxAmt) FROM SalesOrderHeader; 7. Vypište příjmení a pčet zákazníků s daným příjmením [398 z.] SELECT LastName, COUNT(*) AS Cunt FROM Custmer GROUP BY lastname; 8. Vypište státy (CuntryRegin), které mají více než 5 blastí [2 z.] SELECT CuntryRegin FROM Address GROUP BY CuntryRegin HAVING COUNT(DISTINCT StatePrvince) > 5; 9. Vypište všechny infrmace prduktech a k nim název kategrie, d které spadají [295 z.] SELECT P.*, PC.Name FROM Prduct AS P INNER JOIN PrductCategry AS PC ON P.PrductCategryID=PC.PrductCategryID; 10. Vypište mìst, blast a stát pr zakázky, jejichž celkvá cena (TtalDue) je v rzmezí 50 000 a 100 000 [6 z.] SELECT City, StatePrvince, CuntryRegin FROM Address AS A INNER JOIN SalesOrderHeader AS S ON A.addressID=S.ShipTAddressID WHERE TtalDue BETWEEN 50000 AND 100000; 11. Vypište příjmení, prefix emailvé adresy (řetězec před @) a délku celé emailvé adresy pr zákazníky, kteří nežijí v USA (United Stats) neb Kanadě (Canada) [39 z.] SELECT LastName, LEFT(EmailAddress,CHARINDEX('@',EmailAddress)-1) AS EmailPrefix, LEN(AddressLine1) AS LenghtStreet FROM Custmer AS C INNER JOIN CustmerAddress AS CA ON C.CustmerID=CA.CustmerID INNER JOIN Address AS A ON A.AddressID=CA.AddressID WHERE CuntryRegin NOT IN ('United States', 'Canada'); 12. Vypište názvy státù tak, aby míst United States byl vypsáni USA a pčet blastí těcht státù [3 z.]
SELECT REPLACE([CuntryRegin],'United States', 'USA') AS 'CuntryRegin', COUNT(StatePrvince) AS 'Cunt' FROM Address GROUP BY CuntryRegin; 13. Vypište příjmení zákazníkù, kteří mají evidvanu adresu pr fakturu a zárven pštvní [10 z.] SELECT LastName FROM Custmer AS C INNER JOIN CustmerAddress AS CA ON C.CustmerID=CA.CustmerID GROUP BY C.CustmerID, LastName HAVING COUNT(AddressType) > 1; 14. Vypište příjmení zákazníkù, kteří nemají uvedenu adresu (pmcí vnřenéh dtazu) [6 z.] SELECT LastName FROM Custmer WHERE CustmerID NOT IN (SELECT CustmerID FROM CustmerAddress); 15. Vypište infrmace zákaznicích, kteří měli minimálně jednu bjednávku (pmcí spjení tabulek) [408 z.] SELECT C.* FROM Custmer AS C LEFT JOIN SalesOrderHeader AS SOH ON C.CustmerID=SOH.CustmerID WHERE SOH.CustmerID IS NULL; 16. Vypište infrmace zákaznicích, kteří mìli minimálně jednu bjednávku s pčtem plžek větší než 10 [13 z.] SELECT C.* FROM Custmer AS C INNER JOIN SalesOrderHeader AS SOH ON C.CustmerID=SOH.CustmerID WHERE SOH.SalesOrderID IN (SELECT SalesOrderID FROM SalesOrderDetail GROUP BY SalesOrderID HAVING COUNT(SalesOrderDetailID) > 10); 17. Vypište zákazníky s nejkratším a nejdelším příjmením [4 z.] SELECT * FROM Custmer WHERE LEN(LastName) IN (SELECT MIN(LEN(LastName)) FROM Custmer UNION ALL SELECT MAX(LEN(LastName)) FROM Custmer);