【SQL】深入理解SQL:从基础概念到常用命令-3. DML 命令

时间:2024-10-07 09:46:34

数据操作语言(DML) 用于对数据库中的数据进行操作。

命令 描述
SELECT 查询数据
INSERT 插入新数据
UPDATE 更新现有数据
DELETE 删除数据

3.1 SELECT语句

SELECT语句是SQL中最常用的命令,用于从数据库中查询数据。

基本语法

SELECT column1, column2 
FROM table_name 
WHERE condition;
  • SELECT:指定要查询的列。
  • FROM:指定要查询的表。
  • WHERE:可选,设置查询条件,以过滤结果。

示例:查询员工表中所有员工的姓名和工资

SELECT name, salary 
FROM employees 
WHERE salary > 50000;

在这个示例中,查询条件是“工资大于50000”,结果只返回符合该条件的员工姓名和工资。

进阶用法

  • 查询所有列:使用星号(*)可以查询表中的所有列

    SELECT * FROM employees;
    
  • 排序结果:使用ORDER BY对结果进行排序

    SELECT name, salary 
    FROM employees 
    WHERE salary > 50000 
    ORDER BY salary DESC;
    
  • 限制结果数量:使用LIMIT关键字限制返回的行数

    SELECT name, salary 
    FROM employees 
    WHERE salary > 50000 
    LIMIT 10;
    

3.2 INSERT语句

INSERT语句用于向表中插入新数据。

基本语法

INSERT INTO table_name (column1, column2) 
VALUES (value1, value2);
  • INSERT INTO:指定要插入数据的表。
  • VALUES:提供要插入的具体值。

示例:向员工表中插入新员工的信息

INSERT INTO employees (name, salary) 
VALUES ('John Doe', 60000);

在这里,向employees表插入了一名新员工John Doe及其工资。

进阶用法

  • 批量插入:可以一次性插入多条记录

    INSERT INTO employees (name, salary) 
    VALUES 
    ('Jane Smith', 70000),
    ('Michael Brown', 80000);
    
  • 插入从查询结果:可以通过子查询插入数据

    INSERT INTO high_salary_employees (name, salary)
    SELECT name, salary 
    FROM employees 
    WHERE salary > 70000;
    

3.3 UPDATE语句

UPDATE语句用于修改已存在的记录。

基本语法

UPDATE table_name 
SET column1 = value1 
WHERE condition;
  • UPDATE:指定要更新的表。
  • SET:定义要修改的列及其新值。
  • WHERE:确定哪些记录需要更新。

示例:更新某员工的工资

UPDATE employees 
SET salary = 65000 
WHERE name = 'John Doe';

这条语句将John Doe的工资更新为65000。

进阶用法

  • 更新多列:同时更新多个列的值

    UPDATE employees 
    SET salary = 70000, department = 'Marketing' 
    WHERE name = 'Jane Smith';
    
  • 条件更新:基于特定条件更新多条记录

    UPDATE employees 
    SET salary = salary * 1.1 
    WHERE department = 'Sales';
    

3.4 DELETE语句

DELETE语句用于从表中删除记录。

基本语法

DELETE FROM table_name 
WHERE condition;
  • DELETE FROM:指定要删除记录的表。
  • WHERE:确定哪些记录需要删除。

示例:删除一名员工的记录

DELETE FROM employees 
WHERE name = 'John Doe';

这条语句将删除名为John Doe的员工记录。

注意事项

  1. 没有WHERE子句:如果省略WHERE子句,所有行都会被删除,操作不可逆。例如:

    DELETE FROM employees; 
    

    此命令会删除employees表中的所有数据。

  2. 使用事务:建议在进行DELETE操作时使用事务,这样在出现问题时可以回滚。例如:

    BEGIN;
    DELETE FROM employees WHERE name = 'John Doe';
    COMMIT;
    
  3. 外键约束:如果要删除的记录在其他表中被外键引用,可能会导致删除失败。在这种情况下,需要先处理相关的外键记录。

  4. 性能影响:在大数据量的表上执行DELETE可能会导致性能问题,可以考虑批量删除或使用TRUNCATE命令(注意TRUNCATE会删除所有记录并且速度更快)。

示例:基于条件删除多条记录

DELETE FROM employees 
WHERE department = 'Sales' AND hire_date < '2020-01-01';

这条语句将删除所有在销售部门且入职日期早于2020年1月1日的员工记录。

示例:删除记录后检查受影响的行数

DELETE FROM employees 
WHERE department = 'HR';
SELECT ROW_COUNT();

这段代码首先删除所有人力资源部门的员工,然后查询受影响的行数。