当前位置: 首页 > article >正文

【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的主要功能

  1. 查询数据:通过 SQL,你可以从数据库中检索(查询)特定的数据。查询操作通常使用 SELECT 语句。
  2. 插入数据:SQL 允许你向数据库表中插入新记录,使用 INSERT INTO 语句。
  3. 更新数据:你可以使用 SQL 来更新现有的数据,使用 UPDATE 语句。
  4. 删除数据:SQL 还支持删除数据,使用 DELETE 语句。
  5. 创建、修改和删除数据库结构:你可以通过 SQL 创建、修改、删除数据库、表格和其他数据库对象,使用 CREATE、ALTER 和 DROP 语句。
  6. 数据控制: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'age30department'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;

如果 id1 的员工已经存在,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 更新为 55000age 更新为 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,如果员工年龄大于 30salary 增加 10%,否则保持原值。

UPDATE employees
SET salary = CASE 
                WHEN age > 30 THEN salary * 1.1
                ELSE salary
             END;

这条语句会检查每个员工的年龄:

  • 如果员工的年龄大于 30,salary 增加 10%
  • 如果员工的年龄不大于 30salary 不变。

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_id1 的员工记录。

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 条件
你可以通过 ANDOR 运算符结合多个条件,删除符合多个条件的数据。

示例:

删除年龄大于 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 操作删除多个表中的相关记录。例如,假设有两个表:employeesdepartments,并且你想删除所有属于某个部门的员工记录:

DELETE employees
FROM employees
JOIN departments ON employees.department_id = departments.department_id
WHERE departments.name = 'HR';

这条语句会删除所有在 HR 部门的员工记录。JOIN 操作帮助识别出符合条件的记录,并删除它们。

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于MySQL的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!  


http://www.kler.cn/a/502053.html

相关文章:

  • 基于单片机的智能花卉浇水系统的设计与实现
  • 非PHP开源内容管理系统(CMS)一览
  • python 寻找数据拐点
  • nginx-lua模块处理流程
  • ThreadLocal 的使用场景
  • Centos9 + Docker 安装 MySQL8.4.0 + 定时备份数据库到本地
  • leetcode(hot100)10、11、12
  • 【HTML+CSS+JS+VUE】web前端教程-29-清除浮动
  • Spring Data Elasticsearch简介
  • 鸿蒙UI开发——颜色选择器
  • 【Ubuntu与Linux操作系统:七、系统高级管理】
  • 【论文速读】| 利用大语言模型在灰盒模糊测试中生成初始种子
  • Django Admin 中为自定义操作添加权限控制
  • Folder Icons v2.0.2 文件/文件夹图标美化 支持M、Intel芯片
  • 【南京工业大学主办 | JPCS独立出版 | 高届数、会议历史好 | 投稿领域广泛】第八届智能制造与自动化国际学术会议(IMA 2025)
  • Rank-Analysis——LOL 排位战绩查询分析器
  • 【LeetCode: 763. 划分字母区间 + 贪心】
  • Bash语言的语法糖
  • 对React中类组件和函数组件的理解?有什么区别?
  • ansible 检查目录大小
  • 【C++】size_t究竟是什么?全面解析与深入拓展
  • CSS3的aria-hidden学习
  • 每日一题(三):压缩字符串(行程长度编码)
  • vue城市道路交通流量预测可视化系统
  • 《变形金刚-游戏》V1.0官方学习版
  • Redis 为什么要引入 Pipeline机制?