feat: 演示页新增事务/标量子查询/外键级联/高级条件 4组预设
This commit is contained in:
+79
-1
@@ -113,6 +113,10 @@ SELECT COUNT(*) as total_users, AVG(age) as avg_age FROM users;</textarea>
|
|||||||
<button class="btn btn-preset" onclick="loadPreset('ddl')">🏗 DDL</button>
|
<button class="btn btn-preset" onclick="loadPreset('ddl')">🏗 DDL</button>
|
||||||
<button class="btn btn-preset" onclick="loadPreset('crud')">✏️ CRUD</button>
|
<button class="btn btn-preset" onclick="loadPreset('crud')">✏️ CRUD</button>
|
||||||
<button class="btn btn-preset" onclick="loadPreset('subquery')">🔍 子查询</button>
|
<button class="btn btn-preset" onclick="loadPreset('subquery')">🔍 子查询</button>
|
||||||
|
<button class="btn btn-preset" onclick="loadPreset('tx')">🔒 事务</button>
|
||||||
|
<button class="btn btn-preset" onclick="loadPreset('scalar')">🎯 标量子查询</button>
|
||||||
|
<button class="btn btn-preset" onclick="loadPreset('cascade')">🔗 级联</button>
|
||||||
|
<button class="btn btn-preset" onclick="loadPreset('adv')">🧪 高级</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -385,7 +389,81 @@ SELECT name, age FROM users
|
|||||||
WHERE id IN (
|
WHERE id IN (
|
||||||
SELECT user_id FROM orders
|
SELECT user_id FROM orders
|
||||||
WHERE amount = (SELECT MAX(amount) 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) {
|
function loadPreset(name) {
|
||||||
|
|||||||
Reference in New Issue
Block a user