Skip to content

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EDU-SQL · SQL Playground

🇮🇹 Italiano · 🇬🇧 English

▶ Provalo online: https://manzolo.github.io/SqlSimulator/?lang=it

Un percorso didattico interattivo, in stile learngitbranching.js.org, per capire come viene eseguita davvero una query SQL. Scrivi una query; un motore scritto a mano — niente SQLite, niente sql.js, nessuna dipendenza — la esegue su un database giocattolo in memoria e anima ogni passo: le tabelle si illuminano mentre le righe vengono scansionate, le righe che passano il WHERE si accendono e quelle scartate si spengono, i JOIN disegnano archi tra le righe accoppiate, il GROUP BY colora i gruppi, ORDER BY/LIMIT riordinano e tagliano — e una pipeline delle fasi si illumina nell'ordine logico reale di SQL, la cosa più fraintesa del linguaggio.

È il quarto gemello della collana EDU-*, insieme a EDU-16 ASM Playground, EDU-NET e EDU-REGEX.

Perché un motore scritto a mano

Possedere il motore è tutto il punto: l'esecutore emette un flusso di eventi neutri rispetto alla lingua (source-row, row-eval, join-pair, group-form, aggregate-step, result-row, …) a cui la UI si sottoscrive. Una libreria nasconderebbe proprio l'esecuzione riga-per-riga e fase-per-fase che vogliamo insegnare. Il motore è una vera pipeline: tokenizer → parser → AST → planner → esecutore a fasi.

L'ordine logico di esecuzione è l'elemento firma: FROM → JOIN → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY → LIMIT. Ecco perché il WHERE non vede gli aggregati (non esistono ancora) e l'ORDER BY può usare un alias del SELECT (viene dopo).

Sottoinsieme supportato: SELECT [DISTINCT], FROM, INNER/LEFT JOIN … ON, WHERE (= <> < <= > >= AND OR NOT IN LIKE IS [NOT] NULL BETWEEN), GROUP BY, HAVING, aggregati (COUNT/SUM/AVG/MIN/MAX, incl. COUNT(*)), ORDER BY (multi-chiave, ASC/DESC), LIMIT/OFFSET, e sottoquery scalari e IN (anche correlate). Logica dei NULL a tre valori completa. Niente DDL/DML.

Curriculum

Non serve alcun prerequisito: alla prima visita si apre una guida introduttiva ("Basi") che spiega da zero — con analogie e un esempio pratico — cos'è un database, una tabella (righe e colonne), una query (SELECT / FROM / WHERE) e l'ordine logico di esecuzione, più un piccolo glossario. Resta sempre raggiungibile dal bottone in alto.

14 livelli guidati + una sandbox libera: SELECT · WHERE · AND/OR/NOT · ORDER BY/LIMIT · DISTINCT · funzioni aggregate · GROUP BY · HAVING · INNER JOIN · LEFT JOIN e NULL · sottoquery · l'ordine logico di esecuzione · indici vs. scansione completa · un report reale multi-tabella (capstone).

Ogni livello verifica il tuo risultato su più dataset — alcuni mostrati, altri nascosti e popolati diversamente — così una query con valori cablati sulle righe visibili fallisce (anti-trucco).

Avvio

Sito statico puro, moduli ES, zero build, zero dipendenze. Servi la cartella con un qualsiasi server statico (i moduli ES non funzionano via file://):

npm run serve        # python3 -m http.server 8000
# apri http://localhost:8000

Deploy su GitHub Pages da main/root così com'è (.nojekyll, percorsi relativi).

Sviluppo / test

npm test             # node --test — parser, motore, event-stream, tutti i 14 livelli
npm run e2e          # smoke test headless su Chrome (avvia la UI, esegue e verifica un livello)

Il core (js/core/) è completamente DOM-free e deterministico, quindi testabile headless: lo stesso motore anima l'esecuzione e corregge la tua risposta.

Licenza

MIT © Andrea Manzi (manzolo)

About

EDU-SQL — interactive SQL simulator: a hand-written engine executes your query on a toy in-memory DB and animates it row-by-row and phase-by-phase. Guided levels + sandbox. Zero deps, zero build.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages