数据库-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 表,包含员工的 idsalary 列,我们要将 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' 的学生记录。

组合使用

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

示例:

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

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

注意事项

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

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

模糊查询:

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 中,统计通常涉及使用聚合函数来计算数据的汇总信息。常用的聚合函数包括 COUNTSUMAVGMAXMIN。这些函数可以与 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;
相关推荐
我要见SA姐12 小时前
告别 Copilot?Codex 本地化部署指南
运维·数据库·机器学习·oracle·回归
xcLeigh3 小时前
聊聊国产化替换:好用数据迁移工具KDMS怎么帮咱们搞定评估难
数据库·sql·数据迁移·kes·kdms
Elastic 中国社区官方博客3 小时前
列式存储并不等同于列式数据库。Columnar 模式为 Elasticsearch 带来了什么
大数据·运维·数据库·elasticsearch·搜索引擎
我要见SA姐14 小时前
用 Claude Code 重构遗留系统:从评估到落地的完整实践指南
数据库·ide·vscode·oracle·编辑器
Nturmoils5 小时前
一份 KDMS 评估报告,怎样排出迁移先后顺序
数据库
这个DBA有点耶5 小时前
异构数据集成怎么做?5 种同步方案对比 + 金融级 CDC 实战解析
数据库·oracle·架构
独泪了无痕5 小时前
SQL函数实战:GREATEST与LEAST的技巧
数据库·sql·mysql
码少女6 小时前
Linux--多路转接之select
java·服务器·数据库
梁辰兴6 小时前
软件工程:软件维护的副作用
数据库·软件工程·梁辰兴·控制方法·软件维护的副作用·副作用类型·副作用原因
这个DBA有点耶6 小时前
MySQL 8.0.20移除了Block Nested Loop,之前学的JOIN优化知识还适用吗?
数据库·mysql·架构