SQL(Structured Query Language)是用于管理关系型数据库的标准编程语言,主要包含以下几类操作:
SELECT column1, column2 FROM table_name WHERE condition;
-- 内连接
SELECT a.column1, b.column2
FROM table1 a INNER JOIN table2 b ON a.id = b.id;
-- 左外连接
SELECT a.column1, b.column2
FROM table1 a LEFT JOIN table2 b ON a.id = b.id;
SELECT COUNT(*), AVG(price), MAX(date) FROM products;
SELECT department, COUNT(*)
FROM employees
GROUP BY department
HAVING COUNT(*) > 5;
SELECT name FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
-- 插入数据
INSERT INTO table_name (column1, column2) VALUES (value1, value2);
-- 更新数据
UPDATE table_name SET column1 = value1 WHERE condition;
-- 删除数据
DELETE FROM table_name WHERE condition;
问题:执行SQL时报语法错误
原因:
解决方案:
问题:查询执行缓慢
原因:
解决方案:
-- 添加索引
CREATE INDEX idx_name ON table_name(column_name);
-- 优化查询
EXPLAIN SELECT * FROM table_name WHERE condition; -- 查看执行计划
问题:NULL值导致意外结果
原因:NULL与任何值的比较结果都是NULL而非TRUE/FALSE
解决方案:
-- 使用IS NULL/IS NOT NULL
SELECT * FROM table_name WHERE column_name IS NULL;
-- 使用COALESCE函数
SELECT COALESCE(column_name, 'default') FROM table_name;
问题:数据不一致
原因:未正确使用事务
解决方案:
BEGIN TRANSACTION;
-- 执行多个SQL语句
COMMIT; -- 或 ROLLBACK 在出错时
SELECT name, salary,
RANK() OVER (ORDER BY salary DESC) as rank
FROM employees;
WITH dept_stats AS (
SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department
)
SELECT * FROM dept_stats WHERE avg_salary > 5000;
SELECT json_column->>'key' FROM table_name;
WITH RECURSIVE org_tree AS (
SELECT id, name, parent_id FROM org WHERE id = 1
UNION ALL
SELECT o.id, o.name, o.parent_id
FROM org o JOIN org_tree ot ON o.parent_id = ot.id
)
SELECT * FROM org_tree;
没有搜到相关的文章