数据库-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;
相关推荐
Yz98764 分钟前
hive的存储格式
大数据·数据库·数据仓库·hive·hadoop·数据库开发
苏-言16 分钟前
Spring IOC实战指南:从零到一的构建过程
java·数据库·spring
Ljw...22 分钟前
索引(MySQL)
数据库·mysql·索引
菠萝咕噜肉i36 分钟前
超详细:Redis分布式锁
数据库·redis·分布式·缓存·分布式锁
长风清留扬38 分钟前
一篇文章了解何为 “大数据治理“ 理论与实践
大数据·数据库·面试·数据治理
Mephisto.java39 分钟前
【大数据学习 | Spark】Spark的改变分区的算子
大数据·elasticsearch·oracle·spark·kafka·memcache
OpsEye1 小时前
MySQL 8.0.40版本自动升级异常的预警提示
数据库·mysql·数据库升级
Ljw...1 小时前
表的增删改查(MySQL)
数据库·后端·mysql·表的增删查改
远歌已逝4 小时前
维护在线重做日志(二)
数据库·oracle
qq_433099405 小时前
Ubuntu20.04从零安装IsaacSim/IsaacLab
数据库