-- CTE递归查询WITH RECURSIVE org_tree AS(SELECT id, name, manager_id
FROM employees
WHERE id =100UNIONALLSELECT e.id, e.name, e.manager_id
FROM employees e
INNERJOIN org_tree o ON o.id = e.manager_id
)SELECT*FROM org_tree;-- 窗口函数使用SELECT
name,
salary,
department_id,
RANK()OVER(PARTITIONBY department_id ORDERBY salary DESC)FROM employees;
四、事务控制
BEGIN;SAVEPOINT before_update;UPDATE accounts SET balance = balance -100WHERE id =1;UPDATE accounts SET balance = balance +100WHERE id =2;-- 模拟错误检测-- ROLLBACK TO before_update;COMMIT;
五、JSON操作
-- 创建JSON字段表CREATETABLE products (
id SERIALPRIMARYKEY,
details JSONB NOTNULL);-- JSON路径查询SELECT
details->>'name'AS product_name,
details->'specs'->'weight'AS weight
FROM products
WHERE details @>'{"category": "electronics"}';
-- 创建角色CREATE ROLE analyst WITH
LOGIN
PASSWORD 'secure123'
VALID UNTIL '2025-12-31';-- 授权表访问GRANTSELECT,INSERTON employees TO analyst;-- 查看权限
\dp employees