数据库-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;
相关推荐
zzb15807 小时前
RAG from Scratch-优化-query
java·数据库·人工智能·后端·spring·mybatis
一只鹿鹿鹿8 小时前
信息安全等级保护安全建设防护解决方案(总体资料)
运维·开发语言·数据库·面试·职场和发展
堕2748 小时前
MySQL数据库《基础篇--数据库索引(2)》
数据库·mysql
wei_shuo8 小时前
数据库优化器进化论:金仓如何用智能下推把查询时间从秒级打到毫秒级
数据库·kingbase·金仓
雷工笔记8 小时前
Navicat Premium 17 软件安装记录
数据库
wenlonglanying8 小时前
Ubuntu 系统下安装 Nginx
数据库·nginx·ubuntu
数据库小组9 小时前
10 分钟搞定!Docker 一键部署 NineData 社区版
数据库·docker·容器·database·数据库管理工具·ninedata·迁移工具
爬山算法9 小时前
MongoDB(38)如何使用聚合进行投影?
数据库·mongodb
l1t9 小时前
Deep Seek总结的APSW 和 SQLite 的关系
数据库·sqlite
Pocker_Spades_A10 小时前
基于代价模型的连接条件下推:复杂SQL查询的性能优化实践
数据库·sql·性能优化