【MySQL】基础语法详解:SELECT, INSERT, UPDATE, DELETE轻松上手
🐇明明跟你说过:个人主页
🏅个人专栏:《MySQL技术精粹》🏅
🔖行路有良友,便是天堂🔖
目录
一、引言
1、什么是SQL
2、SQL的主要功能
3、什么是MySQL
二、MySQL基础语法
1、数据查询(SELECT)
2、数据插入(INSERT )
3、数据更新(UPDATE)
4、数据删除(DELETE)
一、引言
1、什么是SQL
SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库管理系统(RDBMS)的编程语言。SQL 主要用于对数据库中的数据进行查询、插入、更新、删除和管理等操作。
2、SQL的主要功能
- 查询数据:通过 SQL,你可以从数据库中检索(查询)特定的数据。查询操作通常使用 SELECT 语句。
- 插入数据:SQL 允许你向数据库表中插入新记录,使用 INSERT INTO 语句。
- 更新数据:你可以使用 SQL 来更新现有的数据,使用 UPDATE 语句。
- 删除数据:SQL 还支持删除数据,使用 DELETE 语句。
- 创建、修改和删除数据库结构:你可以通过 SQL 创建、修改、删除数据库、表格和其他数据库对象,使用 CREATE、ALTER 和 DROP 语句。
- 数据控制:SQL 允许管理用户权限,控制谁可以访问和操作数据,使用 GRANT、REVOKE 等语句。
3、什么是MySQL
MySQL 是一个开源的关系型数据库管理系统(RDBMS),它基于 SQL(结构化查询语言)来管理数据库中的数据。MySQL 是最流行的数据库之一,广泛应用于 Web 开发、数据存储、企业级应用等领域。它是 Oracle Corporation 公司的一部分,但仍然保持开源和广泛使用。
二、MySQL基础语法
1、数据查询(SELECT)
在 MySQL 中,数据查询是最常用的操作之一,而 SELECT 语句是用来从数据库中检索数据的基础语法。通过 SELECT 语句,我们可以根据需要提取特定表格中的数据,并进行排序、过滤、分组、联接等操作。
1. 基础查询
最简单的 SELECT 查询语句用于检索表中的所有列:
SELECT * FROM table_name;
- * 表示选择所有列。
- table_name 是你要查询的表的名称。
2. 选择特定列
如果你只需要查询某些列的数据,可以在 SELECT 后面指定列名:
SELECT column1, column2 FROM table_name;
例如,查询 employees 表中 name 和 age 两列的数据:
SELECT name, age FROM employees;
3. 查询并排序数据(ORDER BY)
ORDER BY 子句用于对查询结果进行排序。默认是按升序(ASC)排序,也可以指定降序(DESC)排序。
SELECT column1, column2 FROM table_name ORDER BY column1 ASC;
例如,按 age 排序:
SELECT name, age FROM employees ORDER BY age DESC;
4. 限制返回结果(LIMIT)
LIMIT 子句用于限制查询返回的行数,常用于分页或获取前几条记录。
SELECT column1, column2 FROM table_name LIMIT 10;
例如,查询 employees 表中的前 5 行记录:
SELECT name, age FROM employees LIMIT 5;
5. 条件查询(WHERE)
WHERE 子句用于指定查询条件,只有符合条件的行才会被返回。
SELECT column1, column2 FROM table_name WHERE condition;
例如,查询 employees 表中年龄大于 30 的员工:
SELECT name, age FROM employees WHERE age > 30;
条件可以包括比较操作符(如 =, !=, >, <, >=, <=),逻辑操作符(如 AND, OR, NOT),以及其它特殊操作符。
6. 多个条件(AND / OR)
可以通过 AND 或 OR 来组合多个查询条件:
SELECT name, age FROM employees WHERE age > 30 AND department = 'HR';
查询年龄大于 30 且部门是 'HR' 的员工。
SELECT name, age FROM employees WHERE age > 30 OR department = 'HR';
查询年龄大于 30 或者部门是 'HR' 的员工。
7. 模糊查询(LIKE)
LIKE 操作符用于进行模糊匹配查询,常用于查找部分匹配的字符串。
SELECT column1, column2 FROM table_name WHERE column1 LIKE 'pattern';
- %:代表零个或多个字符。
- _:代表单个字符。
例如,查询 employees 表中名字以 'J' 开头的员工:
SELECT name, age FROM employees WHERE name LIKE 'J%';
查询名字中包含 "John" 的员工:
SELECT name, age FROM employees WHERE name LIKE '%John%';
8. 查询范围(BETWEEN)
BETWEEN 用于查询一个范围内的数据,通常与数值、日期等数据类型结合使用。
SELECT column1, column2 FROM table_name WHERE column1 BETWEEN value1 AND value2;
例如,查询 employees 表中年龄在 25 到 40 之间的员工:
SELECT name, age FROM employees WHERE age BETWEEN 25 AND 40;
9. 空值查询(IS NULL / IS NOT NULL)
IS NULL 用于查询字段值为空(NULL)的记录,而 IS NOT NULL 用于查询非空值记录。
SELECT column1, column2 FROM table_name WHERE column1 IS NULL;
例如,查询 employees 表中没有指定部门的员工:
SELECT name, department FROM employees WHERE department IS NULL;
10. 去重查询(DISTINCT)
DISTINCT 用于去除查询结果中的重复行,只返回不同的记录。
SELECT DISTINCT column1 FROM table_name;
例如,查询 employees 表中不同的部门:
SELECT DISTINCT department FROM employees;
2、数据插入(INSERT )
在 MySQL 中,INSERT 语句用于向表中插入新记录。它可以插入一行数据,也可以一次插入多行数据。
1. 插入单行数据
最基本的 INSERT 语法,用于向表中插入单行数据。
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
- table_name:你要插入数据的表名。
- column1, column2, column3, ...:要插入数据的列名。
- value1, value2, value3, ...:每个列的值,值的顺序需要与列名的顺序一致。
示例:
向 employees 表插入一条新记录:
INSERT INTO employees (name, age, department, salary)
VALUES ('Alice', 30, 'HR', 50000);
这条语句会向 employees 表中插入一行数据,name 为 'Alice',age 为 30,department 为 'HR',salary 为 50000。
2. 插入多行数据
INSERT 语句可以一次插入多行数据,通过将多组值放在 VALUES 子句中。
INSERT INTO table_name (column1, column2, column3, ...)
VALUES
(value1_1, value2_1, value3_1, ...),
(value1_2, value2_2, value3_2, ...),
(value1_3, value2_3, value3_3, ...);
示例:
向 employees 表一次性插入三条记录:
INSERT INTO employees (name, age, department, salary)
VALUES
('Bob', 25, 'IT', 60000),
('Charlie', 28, 'Finance', 55000),
('David', 35, 'HR', 50000);
这条语句会一次性插入三行数据。
3. 插入数据并自动生成列值
如果某些列具有 默认值 或者是 自动增长(例如,主键 AUTO_INCREMENT 列),你可以在 INSERT 语句中省略这些列。在插入数据时,数据库会自动为这些列生成默认值。
示例:
假设 employees 表中 id 列是 AUTO_INCREMENT,且你不想手动插入 id,只插入其他列的值:
INSERT INTO employees (name, age, department, salary)
VALUES ('Eva', 32, 'Marketing', 70000);
在这种情况下,id 列会自动生成一个唯一的值。
4. 插入数据(从另一个表中)
可以将一个查询的结果插入到另一个表中。通常使用 SELECT 子句来从一个表中选择数据,然后将这些数据插入到另一个表中。
INSERT INTO table_name (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM another_table
WHERE condition;
示例:
将 employees 表中的所有 HR 部门的员工数据插入到 hr_employees 表中:
INSERT INTO hr_employees (name, age, salary)
SELECT name, age, salary
FROM employees
WHERE department = 'HR';
这条语句会将 employees 表中所有部门为 'HR' 的员工数据插入到 hr_employees 表中。
5. 使用默认值插入数据
如果某个列在表中定义了 默认值,你可以使用 DEFAULT 关键字插入该默认值。
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, DEFAULT, value3, ...);
示例:
假设 employees 表的 hire_date 列有默认值,如果你不想插入 hire_date,而是使用默认值,可以这样写:
INSERT INTO employees (name, age, department, salary, hire_date)
VALUES ('John', 40, 'IT', 80000, DEFAULT);
6. 插入数据时忽略错误(INSERT IGNORE)
INSERT IGNORE 用于在插入数据时忽略错误,例如插入重复的主键或唯一索引值时不会产生错误。如果数据已经存在,不会插入,且不会返回错误。
INSERT IGNORE INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
示例:
如果要插入一条记录,但如果该记录已经存在时不报错,可以使用 INSERT IGNORE:
INSERT IGNORE INTO employees (name, age, department, salary)
VALUES ('John', 40, 'IT', 80000);
7. 插入数据并更新(ON DUPLICATE KEY UPDATE)
ON DUPLICATE KEY UPDATE 允许在插入数据时,如果遇到重复的主键或唯一键,则执行更新操作。
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...)
ON DUPLICATE KEY UPDATE column1 = value1, column2 = value2;
示例:
假设 employees 表的 id 是主键,如果尝试插入一个已经存在的 id,则更新该员工的 salary。
INSERT INTO employees (id, name, age, salary)
VALUES (1, 'Alice', 30, 55000)
ON DUPLICATE KEY UPDATE salary = 55000;
如果 id 为 1 的员工已经存在,salary 会被更新为 55000;如果不存在,会插入一条新记录。
3、数据更新(UPDATE)
在 MySQL 中,UPDATE 语句用于修改表中现有的记录。通过 UPDATE 语句,可以更新表中一行或多行的一个或多个列的值。更新操作需要指定 目标表 和 更新条件,以确保只修改符合条件的记录。
1. 基本更新语法
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
- table_name:需要更新数据的表名。
- column1, column2, ...:需要更新的列名。
- value1, value2, ...:更新后的新值。
- condition:用于指定更新哪些行。如果不指定 WHERE 条件,将会更新表中的所有行。
示例:
假设有一个 employees 表,我们要将 employee_id 为 1 的员工的 salary 更新为 55000。
UPDATE employees
SET salary = 55000
WHERE employee_id = 1;
这条语句将会更新 employee_id 为 1 的员工的 salary 字段为 55000。
2. 更新多个列
我们可以同时更新多列的值。只需在 SET 子句中列出多个列和值,使用逗号分隔。
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
示例:
将 employee_id 为 1 的员工的 salary 更新为 55000,age 更新为 40:
UPDATE employees
SET salary = 55000, age = 40
WHERE employee_id = 1;
3. 没有 WHERE 子句的更新
如果不指定 WHERE 子句,UPDATE 语句将会更新表中的 所有 行,这通常是危险的操作,除非你确实想更新每一行数据。
UPDATE employees
SET salary = 55000;
这条语句会将 employees 表中 所有员工 的 salary 更新为 55000。由于没有 WHERE 子句,这种操作会影响每一行数据,因此使用时需小心。
4. 基于其他列的值更新
你可以使用其他列的值来更新目标列。这使得更新操作更加灵活。
示例:
假设我们要根据 age 列的值来调整 salary,例如,如果 age 大于 30 的员工,salary 增加 10%。
UPDATE employees
SET salary = salary * 1.1
WHERE age > 30;
这条语句将会把 age 大于 30 的员工的 salary 增加 10%。
5. 更新时使用子查询
在某些情况下,你可能需要根据子查询的结果来更新某些列。可以在 SET 子句中使用子查询。
示例:
假设有两个表:employees 表和 departments 表。如果你想更新 employees 表中的 department 列,使得所有员工的部门设置为 departments 表中 name 为 'IT' 的部门 id。
UPDATE employees
SET department_id = (SELECT department_id FROM departments WHERE name = 'IT')
WHERE department_id IS NULL;
这条语句会将所有 department_id 为 NULL 的员工更新为 departments 表中 name 为 'IT' 的部门的 department_id。
6. 条件更新(CASE 语句)
如果需要基于不同的条件更新不同的列,可以使用 CASE 表达式在 SET 子句中进行条件判断。
示例:
根据 age 更新 salary,如果员工年龄大于 30,salary 增加 10%,否则保持原值。
UPDATE employees
SET salary = CASE
WHEN age > 30 THEN salary * 1.1
ELSE salary
END;
这条语句会检查每个员工的年龄:
- 如果员工的年龄大于 30,salary 增加 10%。
- 如果员工的年龄不大于 30,salary 不变。
7. 更新多个表
MySQL 本身不直接支持在一个 UPDATE 语句中更新多个表,但你可以使用 JOIN 语句结合多个表进行更新。
示例:
假设有两个表:employees 和 departments,如果要根据部门名称来更新员工的 salary,可以使用 JOIN 语句:
UPDATE employees e
JOIN departments d ON e.department_id = d.department_id
SET e.salary = e.salary * 1.1
WHERE d.name = 'IT';
这条语句会将所有在 IT 部门的员工的 salary 增加 10%。
8. 更新并避免重复
你可以使用 INSERT ... ON DUPLICATE KEY UPDATE 语法来执行插入操作,如果插入的记录已经存在,则执行更新操作。这个语法通常用于插入或更新的数据操作。
示例:
如果想要插入一条员工数据,如果该员工已存在(通过 employee_id 唯一标识),则更新该员工的 salary。
INSERT INTO employees (employee_id, name, age, salary)
VALUES (1, 'John', 30, 60000)
ON DUPLICATE KEY UPDATE salary = 60000;
如果 employee_id = 1 的员工已经存在,则只会更新该员工的 salary。
9. 批量更新多个行
通过 WHERE 子句结合多个条件,可以批量更新多行数据。
示例:
将 employees 表中所有在 'HR' 部门的员工 salary 增加 10%,所有在 'IT' 部门的员工 salary 增加 15%。
UPDATE employees
SET salary = CASE
WHEN department = 'HR' THEN salary * 1.1
WHEN department = 'IT' THEN salary * 1.15
END
WHERE department IN ('HR', 'IT');
这条语句使用 CASE 表达式按不同条件更新多个行。
4、数据删除(DELETE)
在 MySQL 中,DELETE 语句用于删除表中的一行或多行数据。与 UPDATE 不同,DELETE 语句会永久删除数据,因此执行时需要特别小心,避免误删除数据。DELETE 操作通常会带有 WHERE 子句,以限制删除的范围。如果没有 WHERE 条件,整个表中的数据都会被删除。
1. 基本删除语法
DELETE FROM table_name
WHERE condition;
- table_name:你要删除数据的表名。
- condition:删除数据的条件。如果没有 WHERE 条件,表中的所有记录都会被删除。
示例:
假设有一个 employees 表,如果要删除 employee_id 为 1 的员工:
DELETE FROM employees
WHERE employee_id = 1;
这条语句会删除 employee_id 为 1 的员工记录。
2. 没有 WHERE 条件的删除
如果没有 WHERE 子句,DELETE 语句将会删除 所有 行数据,但不会删除表结构。务必小心使用:
DELETE FROM table_name;
示例:
删除 employees 表中的所有记录(但不删除表本身):
DELETE FROM employees;
这条语句会删除表中所有的数据,注意:表结构和表本身不会受到影响,只是数据被删除。
3. 删除多个符合条件的记录
可以使用 WHERE 子句删除多个符合条件的记录。例如,删除所有 age 大于 50 的员工:
DELETE FROM employees
WHERE age > 50;
这条语句会删除所有 age 大于 50 的员工记录。
4. 删除时使用 AND / OR 条件
你可以通过 AND 或 OR 运算符结合多个条件,删除符合多个条件的数据。
示例:
删除年龄大于 30 且部门为 'HR' 的员工:
DELETE FROM employees
WHERE age > 30 AND department = 'HR';
示例:
删除年龄小于 25 或部门为 'IT' 的员工:
DELETE FROM employees
WHERE age < 25 OR department = 'IT';
5. 删除重复记录
有时我们可能会遇到重复记录。使用 DELETE 可以删除其中一部分或全部重复记录。删除重复记录的关键是通过某个唯一标识(如主键或唯一索引)来确定哪些记录应该保留。
示例:
假设 employees 表有多条 name 字段值相同的记录,但你希望保留每个名字的第一条记录,删除重复的。
可以使用子查询结合 DELETE 来完成:
DELETE FROM employees
WHERE employee_id NOT IN (
SELECT MIN(employee_id)
FROM employees
GROUP BY name
);
这条语句会删除 name 相同的重复记录,只保留每个 name 最小 employee_id 的那条记录。
6. 删除通过联接查询的记录(使用 JOIN)
你可以通过 JOIN 操作删除多个表中的相关记录。例如,假设有两个表:employees 和 departments,并且你想删除所有属于某个部门的员工记录:
DELETE employees
FROM employees
JOIN departments ON employees.department_id = departments.department_id
WHERE departments.name = 'HR';
这条语句会删除所有在 HR 部门的员工记录。JOIN 操作帮助识别出符合条件的记录,并删除它们。
💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于MySQL的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺
🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!