一、SQL语句分类

  1. 数据查询语言 (DQL)
    核心命令:SELECT
    示例:

    SELECT name, salary FROM employees WHERE department = 'IT';
    

  2. 数据操作语言 (DML)
    包含:

    • INSERT(插入数据)
      INSERT INTO employees (id, name, department) VALUES (101, '张三', 'HR');
      

    • UPDATE(更新数据)
      UPDATE employees SET salary = 8000 WHERE id = 101;
      

    • DELETE(删除数据)
      DELETE FROM employees WHERE id = 101;
      

  3. 数据定义语言 (DDL)
    包含:

    • CREATE(创建表)
      CREATE TABLE employees (
          id INT PRIMARY KEY,
          name VARCHAR(50),
          salary DECIMAL(10,2)
      );
      

    • ALTER(修改表结构)
      ALTER TABLE employees ADD COLUMN department VARCHAR(20);
      

    • DROP(删除表)
      DROP TABLE employees;
      

  4. 数据控制语言 (DCL)
    包含:

    • GRANT(授权)
      GRANT SELECT ON employees TO user1;
      

    • REVOKE(撤销权限)
      REVOKE DELETE ON employees FROM user2;
      


二、核心操作详解

1. 数据查询 (SELECT)
SELECT 
    department, 
    AVG(salary) AS avg_salary  -- 聚合函数
FROM employees
WHERE hire_date > '2020-01-01'  -- 条件过滤
GROUP BY department              -- 分组
HAVING avg_salary > 7000         -- 分组后过滤
ORDER BY avg_salary DESC;        -- 排序

2. 多表连接
SELECT 
    e.name, 
    d.department_name 
FROM employees e
INNER JOIN departments d 
    ON e.department_id = d.id;  -- 内连接

3. 子查询
SELECT name 
FROM employees
WHERE salary > (
    SELECT AVG(salary) FROM employees  -- 嵌套查询
);


三、实用技巧

  1. 索引优化
    加速查询的常见方法:

    CREATE INDEX idx_name ON employees (name);
    

  2. 事务控制
    保证数据一致性:

    BEGIN TRANSACTION;
    UPDATE accounts SET balance = balance - 100 WHERE id = 1;
    UPDATE accounts SET balance = balance + 100 WHERE id = 2;
    COMMIT;  -- 或 ROLLBACK 回滚
    

  3. 常用函数

    • 字符串:CONCAT(), SUBSTRING()
    • 数值:ROUND(), ABS()
    • 日期:NOW(), DATE_ADD()

四、注意事项

  1. 不同数据库(MySQL, PostgreSQL, SQL Server)存在语法差异

    -- MySQL 自增ID
    CREATE TABLE t (id INT AUTO_INCREMENT PRIMARY KEY);
    
    -- PostgreSQL 自增ID
    CREATE TABLE t (id SERIAL PRIMARY KEY);
    

  2. 防止SQL注入
    使用参数化查询而非字符串拼接:

    # Python示例
    cursor.execute("SELECT * FROM users WHERE name = %s", (user_input,))
    

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐