SQL 小抄表(带中文说明 + 示例)

1. 基础命令

  • SELECT:选择要查询的列

    SELECT name, salary FROM employees;
    
  • WHERE:筛选符合条件的记录

    SELECT * FROM employees WHERE age > 30;
    
  • FROM:指定数据表

    SELECT * FROM employees FROM employees;
    
  • AS (别名):给列或表取临时名字

    SELECT name AS employee_name FROM employees;
    
  • DISTINCT:去除重复值

    SELECT DISTINCT age FROM employees;
    

2. 数据聚合

  • COUNT:统计行数

    SELECT COUNT(*) FROM employees;
    
  • SUM:求和

    SELECT SUM(salary) FROM employees;
    
  • AVG:平均值

    SELECT AVG(salary) FROM employees;
    
  • MIN / MAX:最小值、最大值

    SELECT MIN(age), MAX(age) FROM employees;
    
  • GROUP BY:分组聚合

    SELECT age, COUNT(*) FROM employees GROUP BY age;
    
  • HAVING:对分组结果进行过滤

    SELECT age, COUNT(*) FROM employees GROUP BY age HAVING COUNT(*) > 2;
    

3. 数据修改

  • INSERT:插入数据

    INSERT INTO employees (name, age, salary) VALUES ('Tom', 28, 5000);
    
  • UPDATE:更新数据

    UPDATE employees SET salary = 6000 WHERE name = 'Tom';
    
  • DELETE:删除数据

    DELETE FROM employees WHERE age < 25;
    
  • TRUNCATE:清空表数据(不可回滚)

    TRUNCATE TABLE employees;
    

4. 数据过滤

  • BETWEEN:范围筛选

    SELECT * FROM employees WHERE age BETWEEN 25 AND 35;
    
  • LIKE:模糊匹配

    SELECT * FROM employees WHERE name LIKE 'A%';
    
  • IN:多值匹配

    SELECT * FROM employees WHERE age IN (25, 30, 35);
    
  • AND / OR / NOT:逻辑条件

    SELECT * FROM employees WHERE age > 30 AND salary > 5000;
    

5. 排序与限制

  • ORDER BY:排序

    SELECT * FROM employees ORDER BY salary DESC;
    
  • LIMIT:限制返回行数

    SELECT * FROM employees LIMIT 5;
    
  • OFFSET:跳过前几行

    SELECT * FROM employees LIMIT 5 OFFSET 10;
    

6. 集合操作

  • UNION:合并去重

    SELECT name FROM employees WHERE age < 30
    UNION
    SELECT name FROM employees WHERE salary > 7000;
    
  • UNION ALL:合并不去重

    SELECT name FROM employees WHERE age < 30
    UNION ALL
    SELECT name FROM employees WHERE salary > 7000;
    
  • INTERSECT:取交集

    SELECT name FROM employees WHERE age < 30
    INTERSECT
    SELECT name FROM employees WHERE salary > 7000;
    
  • EXCEPT / MINUS:取差集

    SELECT name FROM employees WHERE age < 30
    EXCEPT
    SELECT name FROM employees WHERE salary > 7000;
    

7. 表连接

  • INNER JOIN:取两表交集部分

    SELECT e.name, d.department_name
    FROM employees e
    INNER JOIN departments d ON e.dept_id = d.id;
    
  • LEFT JOIN:保留左表所有数据

    SELECT e.name, d.department_name
    FROM employees e
    LEFT JOIN departments d ON e.dept_id = d.id;
    
  • RIGHT JOIN:保留右表所有数据

    SELECT e.name, d.department_name
    FROM employees e
    RIGHT JOIN departments d ON e.dept_id = d.id;
    
  • FULL JOIN:并集,左右表都保留

    SELECT e.name, d.department_name
    FROM employees e
    FULL JOIN departments d ON e.dept_id = d.id;
    

8. 索引

  • CREATE INDEX:创建索引,加快查询

    CREATE INDEX idx_age ON employees(age);
    
  • DROP INDEX:删除索引

    DROP INDEX idx_age;
    
  • Unique Index:唯一索引(不允许重复值)

    CREATE UNIQUE INDEX idx_name ON employees(name);
    

9. 转换函数

  • CAST:类型转换

    SELECT CAST(salary AS CHAR) FROM employees;
    
  • COALESCE:返回第一个非空值

    SELECT COALESCE(middle_name, 'N/A') FROM employees;
    

10. 字符串函数

  • CONCAT:拼接字符串

    SELECT CONCAT(name, ' - ', age) FROM employees;
    
  • SUBSTRING:截取子串

    SELECT SUBSTRING(name, 1, 3) FROM employees;
    
  • UPPER / LOWER:大小写转换

    SELECT UPPER(name) FROM employees;
    
  • TRIM:去除空格

    SELECT TRIM('   Tom   ');
    
  • REPLACE:替换字符

    SELECT REPLACE(name, 'a', 'A') FROM employees;
    

11. 空值处理

  • ISNULL / IFNULL / NVL:替换空值

    SELECT ISNULL(middle_name, 'None') FROM employees;
    

12. 条件函数

  • CASE:条件判断

    SELECT name,
           CASE WHEN salary > 7000 THEN 'High'
                ELSE 'Normal'
           END AS salary_level
    FROM employees;
    
  • IIF:简写条件

    SELECT IIF(salary > 7000, 'High', 'Normal') FROM employees;
    

13. 日期与时间函数

  • CURRENT_DATE:当前日期

    SELECT CURRENT_DATE;
    
  • NOW / SYSDATE:当前时间戳

    SELECT NOW();
    
  • DATEADD / ADD_MONTHS:增加时间

    SELECT DATEADD(MONTH, 3, hire_date) FROM employees;
    
  • DATEDIFF:计算日期差

    SELECT DATEDIFF(CURRENT_DATE, hire_date) FROM employees;
    
  • EXTRACT:提取年/月/日

    SELECT EXTRACT(YEAR FROM hire_date) FROM employees;
    

14. 子查询

  • EXISTS:判断子查询结果是否存在

    SELECT * FROM employees e
    WHERE EXISTS (SELECT 1 FROM departments d WHERE e.dept_id = d.id);
    
  • 标量子查询:返回单个值

    SELECT name, (SELECT AVG(salary) FROM employees) AS avg_salary FROM employees;
    

15. 窗口函数

  • ROW_NUMBER:行号(连续编号)

    SELECT name, ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num
    FROM employees;
    
  • RANK:排名(跳号)

    SELECT name, RANK() OVER (ORDER BY salary DESC) AS rank_num
    FROM employees;
    
  • DENSE_RANK:排名(不跳号)

    SELECT name, DENSE_RANK() OVER (ORDER BY salary DESC) AS rank_num
    FROM employees;
    
  • NTILE:分桶

    SELECT name, NTILE(4) OVER (ORDER BY salary DESC) AS quartile
    FROM employees;
    

总结
这份小抄表涵盖了 SQL 查询、过滤、聚合、修改、索引、函数、子查询、窗口函数 等常用操作,每个功能都带有一句中文说明 + 一个最小示例,拿来就能用。