数据库-mysql

目录

UPDATE:

更新多个列:你也可以同时更新多个列。例如,更新员工的薪资和部门:

[AND 用法](#AND 用法)

[OR 用法](#OR 用法)

组合使用

注意事项

模糊查询:

注意事项

结果排序

LIMIT:

分页操作:

[使用 LIMIT 的简化方式](#使用 LIMIT 的简化方式)

统计:

去重:

[使用 DISTINCT 关键字](#使用 DISTINCT 关键字)

查询不重复的姓名和城市组合

[2. 借助 GROUP BY 去重](#2. 借助 GROUP BY 去重)

示例

3.去重与排序


UPDATE:

在 MySQL 中,UPDATE 语句用于修改已有记录的值。你可以指定要更新的表、要更新的列以及新的值,并使用 WHERE 子句来限制更新的记录范围。

基本语法

sql 复制代码
UPDATE table_name  
SET column1 = value1, column2 = value2, ...  
WHERE condition;

用法示例

  1. 更新单个列 :

    假设我们有一个 employees 表,包含员工的 id 和 salary 列,我们要将 id 为 1 的员工的薪资更新为 5000;

sql 复制代码
UPDATE employees  
SET salary = 5000  
WHERE id = 1;

更新多个列 :

你也可以同时更新多个列。例如,更新员工的薪资和部门:

sql 复制代码
UPDATE employees  
SET salary = 5500, department_id = 2  
WHERE id = 1;

AND 用法

AND 运算符用于连接多个条件,只有当所有条件都为真时,整个表达式才为真。

sql 复制代码
SELECT * FROM students  
WHERE age > 18 AND grade = 'A';

在这个查询中,将返回年龄大于 18 岁并且成绩为 'A' 的所有学生记录。

OR 用法

OR 运算符用于连接多个条件,只要其中一个条件为真,整个表达式就为真。

sql 复制代码
SELECT * FROM students  
WHERE age < 18 OR grade = 'A';
or 1='1'//永远成立

在这个查询中,将返回年龄小于 18 岁的学生,或者成绩为 'A' 的学生记录。

组合使用

你可以同时使用 AND 和 OR 通过括号来明确优先级。

示例:

sql 复制代码
SELECT * FROM students  
WHERE (age > 18 AND grade = 'A') OR (age < 15 AND grade = 'B');

在这个查询中,将返回年龄大于 18 岁且成绩为 'A' 的学生,或者年龄小于 15 岁且成绩为 'B' 的学生。

注意事项

  • 在使用 AND 和 OR 的时候,通常建议使用括号来明确逻辑组合,避免不必要的混淆。
  • 运算符的优先级是 AND 高于 OR,所以如果没有使用括号,AND 的条件会先被评估。

通过合理使用 AND 和 OR,可以精确控制查询的结果。

模糊查询:

MySQL 中进行模糊查询,通常使用 LIKE 运算符。LIKE 可以与通配符一起使用,来匹配字符串的特定模式。

以下是 LIKE 运算符中常用的通配符:

  • %:表示零个或多个字符。
  • _:表示一个字符。

假设有一个名为 users 的表,其中有一个 name 列。以下是一些模糊查询的示例:

  1. 查找以 'A' 开头的名字:
sql 复制代码
SELECT * FROM users WHERE name LIKE 'A%';

2.查找以 'son' 结尾的名字:

sql 复制代码
SELECT * FROM users WHERE name LIKE '%son';

查找名字中包含 'ar' 的记录:

sql 复制代码
SELECT * FROM users WHERE name LIKE '%ar%';

查找名字的第二个字符是 'a' 的记录:

sql 复制代码
SELECT * FROM users WHERE name LIKE '_a%';

注意事项

  • 模糊查询可能会影响性能,尤其是在大型数据集上执行时,因此在设计数据库和执行查询时要考虑性能优化。
  • 在使用 LIKE 查询时,通常需要注意字符集的设置,以防止因大小写不敏感而导致的匹配结果不同。

结果排序

SELECT * 表名 WHERE 条件 ORDER BY 字段 DESC/(ASC)默认升序

sql 复制代码
SELECT * FROM emp_tab ORDER BY emp_sal;
SELECT * FROM emp_tab ORDER BY emp_sal DESC;
  • 这条查询从 emp_tab 表中选择所有列,并按 emp_sal 列进行升序排列(从最低薪资到最高薪资)。
  • 这条查询同样从 emp_tab 表中选择所有列,但按照 emp_sal 列进行降序排列(从最高薪资到最低薪资)。

LIMIT:

在 MySQL 中,LIMIT 子句用于限制查询返回的记录数。可以使用 LIMIT 来控制查询结果的行数,或者指定从哪个记录开始返回结果

返回从第 M 条记录开始的 N 条记录:

sql 复制代码
SELECT * FROM table_name LIMIT M, N;

这里,M 是偏移量,N 是要返回的记录数。注意,偏移量是从 0 开始计数。

分页操作:

sql 复制代码
SELECT * FROM table_name  
ORDER BY column_name  
LIMIT page_size OFFSET offset;

这里:

  • page_size 是每页要显示的记录数量。
  • offset 是从结果集中跳过的记录数量,通常是 (current_page - 1) * page_size。

使用 LIMIT 的简化方式

MySQL 允许直接在 LIMIT 中提供两个参数,而无需明确声明 OFFSET,例如:

sql 复制代码
SELECT * FROM products  
ORDER BY product_id  
LIMIT 10, 10;

统计:

在 MySQL 中,统计通常涉及使用聚合函数来计算数据的汇总信息。常用的聚合函数包括 COUNT、SUM、AVG、MAX 和 MIN。这些函数可以与 GROUP BY 子句和 HAVING 子句配合使用,以便对分组的数据进行统计分析。

MAX:获取某列的最大值

sql 复制代码
SELECT MAX(column_name) FROM table_name;  -- 获取指定列的最大值

COUNT:计算行数或某列中的非空值数量

sql 复制代码
SELECT COUNT(*) FROM table_name;  -- 计算所有行  
SELECT COUNT(column_name) FROM table_name;  -- 计算指定列的非空值

去重:

使用 DISTINCT 关键字

DISTINCT 关键字用于返回不重复的记录。可以应用于一个或多个列。

查询不重复的姓名和城市组合

如果我们想要获取不重复的姓名和城市组合:

sql 复制代码
SELECT DISTINCT name, city FROM customers;

2. 借助 GROUP BY 去重

在某些情况下,使用 GROUP BY 也可以实现去重,尤其当我们需要对数据进行聚合时。尽管 GROUP BY 的主要目的是分组聚合,但在某些情况下也可以防止重复行的出现。

示例

如果我们想统计每个城市的顾客人数,可以使用如下查询:

sql 复制代码
SELECT city, COUNT(*) AS customer_count  
FROM customers  
GROUP BY city;

3.去重与排序

在使用去重的同时,如果希望结果有序,可以结合 ORDER BY 使用。

sql 复制代码
SELECT city, COUNT(*) AS customer_count  
FROM customers  
GROUP BY city;
相关推荐
数据库小学妹7 分钟前
存算分离到底分离了什么?四条架构变化与选型判断
数据库·数据库架构·云原生数据库·缓存一致性·存算分离
FPGA小徐12 分钟前
【一生一芯 / PA】异常响应机制:RISC-V 中 ecall → mtvec → mret 的完整代
开发语言·数据库·c#
m0_6464299741 分钟前
MySQL 初始化 SQL 中文乱码问题总结
数据库·sql·mysql
实战派K8S&DB1 小时前
TDSQL 核心模块与进程体系
运维·数据库·分布式·sql·mysql
FfHUCisI1 小时前
Go 性能分析工具 pprof:CPU、Heap 与 Goroutine 实战
数据库·golang
仍然.1 小时前
Redis---分布式锁
数据库·redis·分布式
ly76891 小时前
MongoDB 副本集选举风暴排查:从心跳超时到 Journal 刷盘阻塞
数据库·mongodb·php·mongodb 副本集·选举风暴·journal 刷盘·writeconcern
刘天远1 小时前
Agent成本核算实现:事件表、状态分布与Python归集
前端·数据库·人工智能·python
hey you~1 小时前
通话记录与工单关联数据库设计:ER图、中间表、索引优化与分库分表(2026版)
数据库·分库分表·客服系统·数据一致性·后端开发·通话记录·跨系统查询
java_logo2 小时前
Docker 部署 OpenViking:轻松搭建 AI Agent 上下文数据库平台
数据库·人工智能·docker·agent·火山引擎·openviking·轩辕镜像