diff --git a/site/demo.html b/site/demo.html index 2efe777..343218c 100644 --- a/site/demo.html +++ b/site/demo.html @@ -113,6 +113,10 @@ SELECT COUNT(*) as total_users, AVG(age) as avg_age FROM users; + + + + @@ -385,7 +389,81 @@ SELECT name, age FROM users WHERE id IN ( SELECT user_id FROM orders WHERE amount = (SELECT MAX(amount) FROM orders) -);` +);`, + tx: `-- 事务:插入用户及其订单(全部成功才提交) +-- 使用 db.transaction() API(这里有演示限制) + +-- 模拟事务场景:先查余额,再插入订单 +SELECT * FROM users WHERE id = '1'; + +INSERT INTO orders VALUES ('o99', '1', 'Headphones', 199, 1); + +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 → 单行结果 +SELECT COUNT(*) as total_users, AVG(age) as avg_age FROM users; + +-- 年龄大于平均值的用户(标量子查询) +SELECT name, age FROM users +WHERE age > (SELECT AVG(age) FROM users); + +-- 消费超过平均值的用户 +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; + +CREATE TABLE orders ( + id STRING PRIMARY KEY, + user_id STRING REFERENCES users(id) ON DELETE CASCADE, + product STRING, + amount NUMBER, + 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 → 其订单自动级联删除 +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 +SELECT * FROM users +WHERE age BETWEEN 20 AND 30 AND name != 'Bob' +ORDER BY age DESC; + +-- DISTINCT 去重 +SELECT DISTINCT age FROM users ORDER BY age; + +-- 多表 JOIN + 过滤 + 排序 + 分页 +SELECT u.name, o.product, o.amount +FROM users u +INNER JOIN orders o ON u.id = o.user_id +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;` }; function loadPreset(name) {