数据库-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;
相关推荐
剩下了什么11 小时前
MySQL JSON_SET() 函数
数据库·mysql·json
山峰哥11 小时前
数据库工程与SQL调优——从索引策略到查询优化的深度实践
数据库·sql·性能优化·编辑器
较劲男子汉12 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
java搬砖工-苤-初心不变12 小时前
MySQL 主从复制配置完全指南:从原理到实践
数据库·mysql
山岚的运维笔记14 小时前
SQL Server笔记 -- 第18章:Views
数据库·笔记·sql·microsoft·sqlserver
roman_日积跬步-终至千里14 小时前
【LangGraph4j】LangGraph4j 核心概念与图编排原理
java·服务器·数据库
汇智信科14 小时前
打破信息孤岛,重构企业效率:汇智信科企业信息系统一体化运营平台
数据库·重构
野犬寒鸦15 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
晚霞的不甘16 小时前
揭秘 CANN 内存管理:如何让大模型在小设备上“轻装上阵”?
前端·数据库·经验分享·flutter·3d
市场部需要一个软件开发岗位16 小时前
JAVA开发常见安全问题:纵向越权
java·数据库·安全