MySQL 查询语句

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/

截止目前, 星球 内专栏累计输出 66w+ 字,讲解图 2896+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2300+ 小伙伴加入学习 ,欢迎点击围观

MySQL 的查询语句是数据库操作中最常用的一部分。通过 SELECT 语句,我们可以从表中提取数据,并使用各种条件和函数进行过滤、排序、分组等操作。本节将介绍 MySQL 中常见的查询语句及其用法。

1. 基本查询

基本语法

SELECT 列名1, 列名2, ... FROM 表名;

示例

假设有一个名为 t_employee 的表,查询表中所有员工的姓名和职位:

SELECT name, position FROM t_employee;

2. 查询所有列

如果要查询表中的所有列,可以使用 * 来代替列名:

SELECT * FROM t_employee;

该语句将返回 t_employee 表中的所有列和记录。

3. 使用 WHERE 子句筛选数据

WHERE 子句用于指定查询条件,只返回满足条件的记录。

示例

查询 t_employee 表中职位为 “manager” 的员工:

SELECT * FROM t_employee WHERE position = 'manager';

多条件查询

可以使用 ANDOR 组合多个条件:

SELECT * FROM t_employee WHERE position = 'manager' AND salary > 6000;

4. 排序查询结果

可以使用 ORDER BY 子句对查询结果排序。默认是升序 (ASC),降序排序则需使用 DESC

示例

按工资从高到低排序:

SELECT * FROM t_employee ORDER BY salary DESC;

5. 限制查询返回的行数

可以使用 LIMIT 子句限制返回的记录数量。

示例

查询前两条记录:

SELECT * FROM t_employee LIMIT 2;

查询第二到第四条记录(偏移量为 1):

SELECT * FROM t_employee LIMIT 1, 3;

6. 使用聚合函数

MySQL 提供了多种聚合函数,例如 COUNT()SUM()AVG()MAX()MIN(),用于对数据进行汇总。

示例

计算员工的总数:

SELECT COUNT(*) FROM t_employee;

查询职位为 “manager” 的员工平均工资:

SELECT AVG(salary) FROM t_employee WHERE position = 'manager';

7. 分组查询 (GROUP BY)

GROUP BY 子句用于根据某一列对数据进行分组,并结合聚合函数进行统计。

示例

按职位分组,统计每个职位的员工数量:

SELECT position, COUNT(*) AS employee_count FROM t_employee GROUP BY position;

8. 使用 HAVING 过滤分组后的数据

HAVING 子句用于过滤 GROUP BY 之后的分组结果。WHERE 用于过滤记录,而 HAVING 用于过滤分组。

示例

查询员工人数大于 1 的职位:

SELECT position, COUNT(*) AS employee_count FROM t_employee GROUP BY position HAVING employee_count > 1;

9. 使用别名 (AS)

可以使用 AS 为列名或表名指定别名,方便结果的阅读或后续的计算。

示例

查询员工姓名,并将 position 列重命名为 job_title

SELECT name, position AS job_title FROM t_employee;

10. 连接查询

在实际数据库设计中,数据通常存储在多个表中。可以使用 JOIN 操作将多个表的数据关联起来查询。

示例

假设还有一个 departments 表,记录了员工所属部门:

CREATE TABLE departments (
    department_id INT PRIMARY KEY,
    department_name VARCHAR(50),
    employee_id INT,
    FOREIGN KEY (employee_id) REFERENCES t_employee(employee_id)
);

查询员工姓名及其所在部门:

SELECT t_employee.name, departments.department_name
FROM t_employee
JOIN departments ON t_employee.employee_id = departments.employee_id;

11. 子查询

子查询指的是嵌套在另一个查询中的查询,可以用于复杂查询场景。

示例

查询工资高于 t_employee 表平均工资的员工:

SELECT name, salary FROM t_employee WHERE salary > (SELECT AVG(salary) FROM t_employee);

12. 小结

MySQL 查询语句为我们提供了丰富的操作数据的方式。从简单的 SELECT 查询,到使用 JOIN 关联表数据、聚合和分组数据、以及使用子查询和条件筛选数据。熟练掌握这些操作是数据库管理的关键。