Rozšíření hledání v tabulkách

6.7.6. Opakování tvorby tabulky

1 Stáhněte si přes FTP z fileserveru pomocí účtu anonym soubor db05.zip a extrahujte jej tak, aby rozbalené soubory byly ve složce c:\temp\db05 FileZilla
2 Otevřte v textovém editoru soubor thesaurus.sql a zjistěte jaké jsou sloupce tabulky PSPad
3 Spusťte příkazový řádek a přejděte v něm do složky db05 cmd, cd
4 Vytvořte ve složce db05 novou databázi db05.sqlite spuštěním:
c:\programy\sqlite\sqlite3 db05.sqlite
cmd
5 Vytvořte v db05 novou tabulku thesaurus s odpovídajícími sloupci create table
6 Načtěte data ze souboru thesaurus.sql .read

6.7.7. Transakce, zamykání databáze

7 Přerušte načítání dat do databáze sqlite3
8 Otevřte znovu v textovém editoru soubor thesaurus.sql a doplňte začátek a konec transakce
BEGIN TRANSACTION;
...
COMMIT;
PSPad
9 Najděte a opravte chybu v názvu sloupce (viz chybové hlášení při .read), uložte soubor a zavřete PSPad PSPad
10 Smažte v db05.sqlite tabulku thesaurus a poté ji znova nadefinujte drop table, create table
11 Načtěte data ze souboru thesaurus.sql a porovnejte rychlost načtení, ověřte počet řádků v tabulce pomocí select count() ... .read
12 Ověřte nastavení journalu příkazem pragma journal_mode;  
13 Ověřte režim zamykání příkazem pragma locking_mode; sqlite3
14 Zamkněte databázi nastavením výhradního režimu pragma locking_mode=exclusive;  
15 Smažte první řádek tabulky thesaurus příkazem delete from ? where id=?;  
16 Otevřte další instanci příkazového řádku, spusťte v něm také sqlite3 s otevřením databáze db05.sqlite cmd
17 V této druhé instanci zkuste smazat řádek tabulky thesaurus s id=2 sqlite3
18 Zavřete cmd okno, kde je hlášení o zamknuté databázi  

6.7.8. Opakování hledání

19 Najděte v tabulce thesaurus synonyma pro slovo 'machine' uspořádaná abecedně:
select
? from ? where ? order by ?;
sqlite3
20 Vypište slovní druhy (podst.jm., sloveso, ...) obsažené ve slovníku (každý druh může být uveden jen jednou)  
21 Vypište prvních 10 synonym (podle abecedy) a zapamatujte si rychlost výpisu  
22 Vypište synonymum s OFFSETEM 100000 a zapamatujte si rychlost výpisu  

6.7.9. Tvorba indexů - zrychlení hledání

23 Vytvořte index pro sloupec word_eng:
create index index_word_eng on thesaurus (word_eng);
sqlite3
24 Podobně vytvořte index_synonym pro synonyma  
25 Ověřte indexy ve schématu tabulky thesaurus .schema
26 Ověřit indexy lze i příkazem .indices tabulka .indices
27 Znovu vypište prvních 10 synonym (podle abecedy) a porovnejte rychlost  
28 Také vypište synonymum s OFFSETEM 100000 a porovnejte rychlost  

6.7.10. Vnořené dotazy

6.7.11. Logické operace s více tabulkami

Operátory:

29 Vytvořte v db05.sqlite novou tabulku pratele se sloupci id, jmeno, mesto, team (můžete použít vzor.sql) včetně indexu pro sloupec jmeno PSPad, sqlite3
30 Vložte do tabulky min. 3 řádky s různými daty  
31 Podobně vytvořte novou tabulku nepratele se stejnymi sloupci jako u tabulky pratele + jedním novým sloupcem alias, tabulku vyplňte min. 3 řádky s jinými daty než v tabulce pratele (pozor na jméno indexu - musí být jiné než existující)  
32 Vypište najednou všechny existující týmy z obou tabulek:
select team from pratele union select team from nepratele;
 
33 Předchozí příkaz upravte pro výpis seřazený podle abecedy:
... order by ...
 
34 Vypište města, kde máte přátele a zároveň nepřátele (operátor intersect)  
35 Poslední 3 příkazy vypište do souboru union.txt do složky db05 (.output union.txt) včetně použitého SQL příkazu (.echo on), názvu sloupce (.header on)  
36 Celou složku db05 zabalte jako db05.zip a uložte na fileserver Filezilla