数据操作语言(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
的员工记录。
注意事项:
-
没有WHERE子句:如果省略
WHERE
子句,所有行都会被删除,操作不可逆。例如:DELETE FROM employees;
此命令会删除
employees
表中的所有数据。 -
使用事务:建议在进行DELETE操作时使用事务,这样在出现问题时可以回滚。例如:
BEGIN; DELETE FROM employees WHERE name = 'John Doe'; COMMIT;
-
外键约束:如果要删除的记录在其他表中被外键引用,可能会导致删除失败。在这种情况下,需要先处理相关的外键记录。
-
性能影响:在大数据量的表上执行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();
这段代码首先删除所有人力资源部门的员工,然后查询受影响的行数。