diff --git a/site/demo.html b/site/demo.html index 343218c..09d3492 100644 --- a/site/demo.html +++ b/site/demo.html @@ -205,7 +205,12 @@ async function runQuery() { const sql = sqlInput.value.trim(); if (!sql || !db) return; - const statements = sql.split(';').map(s => s.trim()).filter(s => s.length > 0); + const statements = sql.split(';').map(s => s.trim()).filter(s => { + // 过滤空语句和纯注释语句 + if (s.length === 0) return false; + const nonComment = s.split('\n').filter(l => !l.trimStart().startsWith('--')).join('\n').trim(); + return nonComment.length > 0; + }); try { const allResults = []; @@ -390,24 +395,24 @@ WHERE id IN ( SELECT user_id FROM orders WHERE amount = (SELECT MAX(amount) FROM orders) );`, - tx: `-- 事务:插入用户及其订单(全部成功才提交) --- 使用 db.transaction() API(这里有演示限制) - --- 模拟事务场景:先查余额,再插入订单 + tx: `-- 事务演示:使用 db.transaction() API +-- 查询用户 Alice SELECT * FROM users WHERE id = '1'; +-- 为 Alice 插入新订单 INSERT INTO orders VALUES ('o99', '1', 'Headphones', 199, 1); +-- 查看 Alice 的订单汇总 SELECT u.name, COUNT(*) as order_count, SUM(o.amount) as total FROM users u INNER JOIN orders o ON u.id = o.user_id WHERE u.id = '1' GROUP BY u.name; --- 回滚演示:记得用 db.transaction() 包裹哦`, - scalar: `-- 聚合无 GROUP BY → 单行结果 +-- 生产环境用 db.transaction() 包裹保证原子性`, + scalar: `-- 聚合无 GROUP BY 返回单行 SELECT COUNT(*) as total_users, AVG(age) as avg_age FROM users; --- 年龄大于平均值的用户(标量子查询) +-- 年龄大于平均值的用户 SELECT name, age FROM users WHERE age > (SELECT AVG(age) FROM users); @@ -416,8 +421,8 @@ SELECT u.name, SUM(o.amount) as spent FROM users u INNER JOIN orders o ON u.id = o.user_id GROUP BY u.name HAVING SUM(o.amount) > (SELECT AVG(amount) FROM orders);`, - cascade: `-- 外键级联:先创建带外键的表 -DROP TABLE IF EXISTS orders; + cascade: `-- 外键级联:重建 orders 表带 CASCADE +DROP TABLE orders; CREATE TABLE orders ( id STRING PRIMARY KEY, @@ -427,24 +432,24 @@ CREATE TABLE orders ( quantity NUMBER DEFAULT 1 ); --- 重新插入测试数据 +-- 重新插入数据 INSERT INTO orders VALUES ('o1', '1', 'Laptop', 1200, 1); INSERT INTO orders VALUES ('o2', '1', 'Mouse', 50, 2); INSERT INTO orders VALUES ('o3', '2', 'Keyboard', 150, 1); --- 查看用户和订单 +-- 查看关联数据 SELECT u.name, o.product, o.amount FROM users u INNER JOIN orders o ON u.id = o.user_id; --- 删除用户1 → 其订单自动级联删除 +-- 删除 Alice (id=1) 订单自动级联删除 DELETE FROM users WHERE id = '1'; --- 确认:只剩用户2的订单 +-- 确认级联结果 SELECT u.name, o.product, o.amount FROM users u LEFT JOIN orders o ON u.id = o.user_id;`, - adv: `-- 复杂 WHERE:年龄在20-30之间且名字不是Bob + adv: `-- 复杂条件:年龄 20-30 且不是 Bob SELECT * FROM users -WHERE age BETWEEN 20 AND 30 AND name != 'Bob' +WHERE age >= 20 AND age <= 30 AND name != 'Bob' ORDER BY age DESC; -- DISTINCT 去重 @@ -458,12 +463,9 @@ WHERE o.amount >= 50 ORDER BY o.amount DESC LIMIT 5 OFFSET 0; --- 子查询 + 聚合混合 -SELECT u.name, ( - SELECT COUNT(*) FROM orders o WHERE o.user_id = u.id -) as order_count -FROM users u -WHERE u.age >= 25;` +-- NOT LIKE 模糊排除 +SELECT * FROM users +WHERE name NOT LIKE 'A%' AND age > 20;` }; function loadPreset(name) {