{"id":2729,"date":"2026-06-06T03:37:35","date_gmt":"2026-06-06T03:37:35","guid":{"rendered":"https:\/\/tucumandevelopers.com\/index.php\/2026\/06\/06\/i-built-a-free-sql-practice-game-where-you-work-at-a-fictional-singapore-bank\/"},"modified":"2026-06-06T03:37:35","modified_gmt":"2026-06-06T03:37:35","slug":"i-built-a-free-sql-practice-game-where-you-work-at-a-fictional-singapore-bank","status":"publish","type":"post","link":"https:\/\/tucumandevelopers.com\/index.php\/2026\/06\/06\/i-built-a-free-sql-practice-game-where-you-work-at-a-fictional-singapore-bank\/","title":{"rendered":"I built a free SQL practice game where you work at a fictional Singapore bank"},"content":{"rendered":"<div>\n<div><\/header>\n<div data-article-id=\"3831856\" id=\"article-body\">\n<p>I&#8217;ve been frustrated with SQL learning resources for a while. Most are either:<\/p>\n<ul>\n<li>Dry reference docs<\/li>\n<li>Toy exercises with no context (&#8220;SELECT * FROM employees&#8221;)<\/li>\n<li>Paid platforms with paywalls after level 3<\/li>\n<\/ul>\n<p>So I built <strong><a href=\"https:\/\/sqlwak.vercel.app\/\" target=\"_blank\" rel=\"noopener noreferrer\">SQLwak<\/a><\/strong> \u2014 a free, browser-based SQL game where you&#8217;re hired as a Graduate Analyst at <strong>Lion City Bank<\/strong>, a fictional Singapore bank.<\/p>\n<h2> <a name=\"how-it-works\" href=\"#how-it-works\"> <\/a> How it works <\/h2>\n<p>Instead of abstract exercises, every challenge is a real business request from a colleague:<\/p>\n<blockquote>\n<p><em>&#8220;The Operations team needs all Central region branches for an upcoming audit.&#8221;<\/em><\/p>\n<p><em>&#8220;Risk wants customers with credit scores below 600 who have active loans.&#8221;<\/em><\/p>\n<p><em>&#8220;Finance needs vessels ranked by cargo revenue \u2014 use window functions.&#8221;<\/em><\/p>\n<\/blockquote>\n<p>You write actual SQL against a realistic 9-table banking database and get immediate feedback.<\/p>\n<h2> <a name=\"57-levels-across-4-tiers\" href=\"#57-levels-across-4-tiers\"> <\/a> 57 levels across 4 tiers <\/h2>\n<div>\n<table>\n<thead>\n<tr>\n<th>Tier<\/th>\n<th>Skills<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\ud83d\udfe2 Foundational<\/td>\n<td>SELECT, WHERE, ORDER BY, LIMIT<\/td>\n<\/tr>\n<tr>\n<td>\ud83d\udfe1 Intermediate<\/td>\n<td>JOINs, GROUP BY, HAVING, subqueries<\/td>\n<\/tr>\n<tr>\n<td>\ud83d\udd34 Advanced<\/td>\n<td>CTEs, multi-table aggregations<\/td>\n<\/tr>\n<tr>\n<td>\u26ab Expert<\/td>\n<td>Window functions (RANK\/DENSE_RANK OVER PARTITION BY), UNION ALL, compound CTEs<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h2> <a name=\"the-database-schema\" href=\"#the-database-schema\"> <\/a> The database schema <\/h2>\n<p>Lion City Bank has two divisions:<\/p>\n<p><strong>Retail Banking:<\/strong> customers, accounts, transactions, loans, branches, products<\/p>\n<p><strong>Maritime Trade Finance<\/strong> (Advanced\/Expert levels): vessels, cargo_shipments, trade_finance_facilities \u2014 covering voyages between Singapore, Port Klang, Bangkok, Jakarta, and Ho Chi Minh City.<\/p>\n<p>The maritime division exists because Singapore is a major trade hub. It makes the Expert levels genuinely interesting \u2014 you&#8217;re ranking vessels by cargo revenue and analyzing trade finance utilisation rates, not just counting rows.<\/p>\n<h2> <a name=\"technical-details\" href=\"#technical-details\"> <\/a> Technical details <\/h2>\n<ul>\n<li> <strong>Next.js 15<\/strong> + TypeScript + Tailwind CSS<\/li>\n<li> <strong>SQLite via WebAssembly<\/strong> \u2014 all query execution is client-side, no backend needed<\/li>\n<li>Deployed on <strong>Vercel<\/strong> <\/li>\n<li>Fully open source: <a href=\"https:\/\/github.com\/martinl5\/sqlwak\" target=\"_blank\" rel=\"noopener noreferrer\">github.com\/martinl5\/sqlwak<\/a> <\/li>\n<\/ul>\n<h2> <a name=\"no-signup-no-download-just-sql\" href=\"#no-signup-no-download-just-sql\"> <\/a> No signup. No download. Just SQL. <\/h2>\n<p>Open the link and start writing queries: <strong><a href=\"https:\/\/sqlwak.vercel.app\/\" target=\"_blank\" rel=\"noopener noreferrer\">sqlwak.vercel.app<\/a><\/strong><\/p>\n<p>Would love feedback on difficulty progression, new level ideas, or schema additions. What SQL concepts do you wish you&#8217;d practiced more before your first data job?<\/p>\n<\/p><\/div>\n<\/article>\n<p> <!-- Bottom content skipped via SKIP_BOTTOM_CONTENT config --> <\/div>\n<p> <\/main> <\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>Fuente: <a href=\"https:\/\/dev.to\/martinl5\/i-built-a-free-sql-practice-game-where-you-work-at-a-fictional-singapore-bank-4728\">Art\u00edculo original<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;ve been frustrated with SQL learning resources for a while. Most are either: Dry reference docs Toy exercises with no context (&#8220;SELECT * FROM employees&#8221;) Paid platforms with paywalls after level 3 So I built SQLwak \u2014 a free, browser-based SQL game where you&#8217;re hired as a Graduate Analyst at Lion City Bank, a fictional [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2728,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[41],"tags":[],"class_list":["post-2729","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devto"],"jetpack_publicize_connections":[],"_links":{"self":[{"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/posts\/2729","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/comments?post=2729"}],"version-history":[{"count":0,"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/posts\/2729\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/media\/2728"}],"wp:attachment":[{"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/media?parent=2729"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/categories?post=2729"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tucumandevelopers.com\/index.php\/wp-json\/wp\/v2\/tags?post=2729"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}