目录
更新多个列:你也可以同时更新多个列。例如,更新员工的薪资和部门:
[AND 用法](#AND 用法)
[OR 用法](#OR 用法)
[使用 LIMIT 的简化方式](#使用 LIMIT 的简化方式)
[使用 DISTINCT 关键字](#使用 DISTINCT 关键字)
[2. 借助 GROUP BY 去重](#2. 借助 GROUP BY 去重)
UPDATE:
在 MySQL 中,UPDATE
语句用于修改已有记录的值。你可以指定要更新的表、要更新的列以及新的值,并使用 WHERE
子句来限制更新的记录范围。
基本语法
sql
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
用法示例
-
更新单个列 :
假设我们有一个
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
列。以下是一些模糊查询的示例:
- 查找以 '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;