Jazyk SQL (databáze SQLite) Připravil ing. petr polách
SQL - úvod Structured Query Language http://demo-1.sql-vyuka.cz (strukturovaný dotazovací jazyk – 70. léta min. století - IBM) Standardizovaný dotazovací jazyk používaný pro práci s daty v relačních databázích. Pozn.1: Deklarativní programovací jazyk Pozn.2: Jazyk SQL byl navržen tak, aby se maximálně blížil přirozené angličtině: SELECT jmeno,prijmeni,dat_nar FROM studenti WHERE prijmeni = 'Novák' ORDER BY cislo DESC; http://demo-1.sql-vyuka.cz http://owebu.bloger.cz/stitek_?s=SQLite
SQL databáze MySQL (PHP) Microsoft SQL Server SQLite PostgreSQL Oracle Firebird … a další.
SQL příkazy - přehled Do jazyka SQL patří: DML – Data Manipulation Language příkazy pro manipulaci se záznamy: SELECT (výběr záznamů) INSERT (vytváření záznamů) UPDATE (úprava záznamů) DELETE (mazání záznamů) DDL – Data Definition Language definice db objektů – tabulek a dalších objektů: CREATE (vytvoření objektu) ALTER (změna -"-) DROP (odstranění -"-) Práce s transakcemi: COMMIT, ROLLBACK… Příkazy pro nastavování přístupových práv: GRANT, REVOKE.
SQLite - poznámky SQLite nerozlišuje datové typy. Primární klíč je pole jednoznačně identifikující záznamy v tabulce. Nesmí zůstat prázdné. INTEGER PRIMARY KEY (Primární klíč) musí být vždy jednoznačné celé číslo. Př.: rodné číslo u osob, katalogové číslo u výrobků, identifikační číslo v seznamu podniků apod. Každá tabulka má mít definovaný právě jeden primární klíč. Primární klíč má základní vlastnosti: • jedinečnost v rámci tabulky • ne-NULL-ovou hodnotu (musí být vyplněn) • neměl by se nikdy měnit. Pozn.: Pokud neexistuje žádný přirozený primární klíč (např. RČ), používá se obvykle jako primární klíč číslo, které záznamu přidělí automaticky sama databáze - pořadové číslo záznamu (ID).
SqLite 1 Úkol: Zkopírujte si na Plochu adresář P:\Zadani\Polach_P\sqlite\SqLite3 a pojmenujte jej např. takto: 4E1_Bocian Obsahuje soubory: skola.db – cvičná databáze sqlite3.exe – databázový program start_skola.db.bat – spouštění cvičení settings – počáteční nastavení
SqLite 2 Tečkové příkazy × (Příkazy SQL) .quit – ukončení programu (dot commands) - ovládání programu sqlite3 Začínají tečkou, nepíše se za nimi středník! .quit – ukončení programu Pozn.: Příkazový řádek Windows: - opakování příkazů (kurzorové šipky nahoru a dolů), - práce se schránkou (systémový bod) .help - nápověda .databases – otevřená (připojená) databáze .tables – datové tabulky v připojené databázi .schema jménotabulky – struktura tabulky – datové položky a typy (SQL příkaz pro vytvoření tabulky) .read — načte prikaz(y) ze souboru .read settings .mode columns – výpis výsledku do sloupců .header on – zapne zobrazení názvů sloupců ve výpisu výsledku _____________________________________________________ .output jménosouboru – začne posílat výsledky (SQL) příkazů do souboru .output stdout – začne posílat výsledky výsledek zase na monitor ______________________________________ .echo off (.echo on) – vypne (zapne) vypisování příkazů
SQL příkazy SQL příkazy nedělá se před nimi tečka, za nimi se dělá středník. SELECT * FROM zaci; SELECT jmeno, prijmeni, prospech FROM zaci; SELECT jmeno, prijmeni, prospech FROM zaci WHERE bydliste="Hodonín"; relační operátory: =, <>, >, <, >=, <= logické operátory: AND, OR, NOT, závorky SELECT jmeno,prijmeni,bydliste, prospech FROM zaci WHERE NOT(bydliste="Hodonín") AND prospech<=1.5; SELECT jmeno,prijmeni,bydliste FROM zaci WHERE prijmeni >= "R"; (Pozn.: sqlite nepodporuje české třídění ) SELECT jmeno,prijmeni,bydliste FROM zaci WHERE prijmeni >= "R" ORDER BY bydliste DESC; (ASC) SELECT jmeno,prijmeni,bydliste FROM zaci ORDER BY bydliste DESC, prijmeni ASC; (Pozn.: vzestupně ASC, sestupně DESC) Pořadí: SELECT sloupce FROM tabulka WHERE podmínky ORDER BY řazení;
Další možnosti příkazu SELECT SELECT "Pracovní za poslední měsíc"; lze vypsat i text; SELECT 1.5+1.6; desetinná tečka! SELECT ((1.5+10)*2)-1; závorky SELECT 11/2; celočíselné dělení; SELECT 11.0/2; dělení SELECT 11%2; % zbytek po celočíselném dělení SELECT round(27.56789,2); zaokrouhlení SELECT date(); SELECT time(); SELECT datetime(); aktuální datum (date, time) Výpočet ve výpisu, změna záhlaví výpisu: SELECT prijmeni AS "Člověk", sourozencu*100 AS "Příspěvek","Kč" FROM zaci WHERE bydliste= "Hodonín" ;
SELECT - agregační funkce SELECT SUM(sourozencu) FROM zaci WHERE bydliste="Hodonín"; SELECT COUNT(prijmeni) FROM zaci; SELECT COUNT(prijmeni) AS "Počet žáků" FROM zaci WHERE bydliste="Hodonín"; SELECT "Prospěch: ", MIN(prospech), " až ", MAX(prospech) FROM zaci WHERE bydliste="Hodonín"; SELECT AVG(prospech) AS "Průměrný prospěch dívek" FROM zaci WHERE pohlavi="ž";
VIEW (dotazy) Vytvoření view: Často opakované složité příkazy můžeme pojmenovat a uložit jako views. Vytvoření view: CREATE VIEW v_cvicny AS SELECT prijmeni, jmeno, prospech FROM zaci… nějaký příkaz; Volání view: SELECT * FROM v_cvicny; SELECT prijmeni, prospech FROM v_cvicny ORDER BY prospech; SELECT COUNT(prijmeni) FROM v_cvicny; Fungují v příkazech na místě datové tabulky za FROM (data ve view ale samozřejmě nelze aktualizovat). Příkazem .tables se view se vypíšou společně s dat.tabulkami. Je dobré je odlišit jménem – např.: v_cvicny .schema v_cvicny - vypíše obsah view
SQL příkazy – SELECT – GROUP BY SELECT bydliste, COUNT(prijmeni) FROM zaci GROUP BY bydliste; SELECT rocnik,trida,COUNT(prijmeni) FROM zaci GROUP BY rocnik,trida ORDER BY rocnik,trida; bydliste počet žáku v obci ---------- ----------------- Bukovany 4 Bzenec 7 Dambořice 14 Dolní Boja 11 Dubňany 6 Hodonín 26 Kyjov 14 Lužice 7 Mikulčice 8 Milotice 3 Mutěnice 5 Petrov 4 Ratíškovic 7 Starý Podv 2 Svatobořic 4 Vnorovy 11 Čejkovice 6 Čejč 8 Čeložnice 13
Další příkazy DML – SELECT, INSERT, UPDATE, DELETE INSERT INSERT INTO zaci(jmeno, prijmeni, bydliste,prospech) VALUES ("Pavel", "Polách", "Hodonín",1.15) ; Cv.: Do tabulky zaci vložte svůj záznam s nesprávným křestním jménem a zkontrolujte, že byl vložen. UPDATE UPDATE zaci SET jmeno= "Petr", pohlavi="m", sourozencu=1,prospech=1.00 WHERE prijmeni="Polách"; Cv.: Opravte svůj záznam na správné křestní jméno a přidejte další údaje. DELETE DELETE FROM zaci WHERE prijmeni="Polách"; Cv.: Odstraňte svůj záznam z tabulky zaci .
Příkazy DDL– Návrh a administrace databáze (data definition language) CREATE DATABASE cv_db; vytvoření databáze (sqlite nepodporuje!) (SQLite - pokud volaná db neexistuje, vytvoří při spuštění db programu – viz bat) CREATE TABLE kamaradi ( id integer PRIMARY KEY AUTOINCREMENT, jmeno varchar(30), prijmeni varchar(40) NOT NULL, roknar integer ); U existující tabulky vypíšeme příkazem .schema jménotabulky sqlite – datové typy nejsou nutné ALTER TABLE kamaradi ADD COLUMN adresa CHAR(100); změna tabulky po jejím vytvoření (sqlite nepodporuje plně!) DROP TABLE kamaradi; odstranění tabulky DROP DATABASE cv_db; odstranění databáze CREATE TABLE kamaradi ( id integer PRIMARY KEY AUTOINCREMENT, jmeno, prijmeni NOT NULL, roknar ); CREATE TABLE kamaradi ( id integer PRIMARY KEY AUTOINCREMENT, jmeno, prijmeni NOT NULL, roknar);