用 ANSI SQL(即标准 SQL)写查询,核心是使用 SQL 标准语法,而不是某个数据库(如 MySQL、Oracle、SQL Server)的私有语法。下面从基础到进阶,给你一个清晰的说明和示例。
SELECT column1, column2
FROM table_name;
示例:
SELECT first_name, last_name
FROM employees;
SELECT *
FROM table_name
WHERE condition;
示例:
SELECT *
FROM employees
WHERE salary > 5000;
常见条件:
=, >, <, >=, <=AND, OR, NOTIN (...)BETWEEN ... AND ...IS NULL / IS NOT NULLSELECT *
FROM table_name
ORDER BY column1 [ASC | DESC];
示例:
SELECT *
FROM employees
ORDER BY hire_date DESC;
SELECT column, aggregate_function(column)
FROM table_name
GROUP BY column
HAVING condition;
示例:
SELECT department_id, COUNT(*) AS emp_count
FROM employees
GROUP BY department_id
HAVING COUNT(*) > 10;
常见聚合函数:
COUNT()SUM()AVG()MAX()MIN()✅ ANSI SQL 标准 JOIN 写法(推荐)
SELECT e.first_name, d.department_name
FROM employees e
JOIN departments d
ON e.department_id = d.department_id;
其他 JOIN 类型:
INNER JOIN(默认)LEFT JOINRIGHT JOINFULL JOIN示例(左连接):
SELECT e.first_name, d.department_name
FROM employees e
LEFT JOIN departments d
ON e.department_id = d.department_id;
⚠️ 不推荐旧式写法(虽然很多数据库仍支持):
-- 不推荐
SELECT *
FROM employees, departments
WHERE employees.department_id = departments.department_id;
SELECT *
FROM employees
WHERE salary > (
SELECT AVG(salary)
FROM employees
);
子查询可以出现在:
WHEREFROMSELECTSELECT column FROM table1
UNION
SELECT column FROM table2;
UNION:去重UNION ALL:不去重INTERSECT:交集EXCEPT:差集(有些数据库用 MINUS)✅ ANSI SQL 标准(部分数据库支持):
SELECT *
FROM employees
ORDER BY employee_id
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;
⚠️ 注意:
LIMITOFFSET FETCHROWNUM 或 FETCHJOIN ... ONAS(别名)LIMIT(非 ANSI)'abc'SELECT
d.department_name,
COUNT(e.employee_id) AS employee_count
FROM departments d
LEFT JOIN employees e
ON d.department_id = e.department_id
WHERE d.location_id IS NOT NULL
GROUP BY d.department_name
HAVING COUNT(e.employee_id) > 5
ORDER BY employee_count DESC;
如果你愿意,可以告诉我:
我可以帮你把查询 严格按 ANSI SQL 写,并解释每一部分。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。