还不会使用MySQL的复合查询?一篇文章快速教会你

使用逻辑运算符

  • AND 用于同时满足多个条件。
  • OR 用于满足任一条件
mysql 复制代码
SELECT * FROM employees WHERE department = 'Sales' AND salary > 50000;
  • employees 表中选取所有在 "Sales" 部门工作且薪水高于50,000的员工记录。

子查询

子查询是在一个 SELECT 语句中嵌套另一个 SELECT 语句,用于从一个表中获取数据作为另一个查询的条件。

mysql 复制代码
SELECT * FROM employees 
WHERE department_id IN (SELECT id FROM departments WHERE location = 'New York');
  • employees 表中选取所有属于位于 "New York" 部门的员工记录。具体来说,它首先找到所有在 "New York" 的部门 ID,然后再找出这些部门中的员工信息。

JOIN操作

JOIN 操作允许你从多个表中结合相关的数据,常见的有 INNER JOIN、LEFT JOIN 等

mysql 复制代码
SELECT e.name, d.department_name 
FROM employees e 
INNER JOIN departments d ON e.department_id = d.id;
  • employees 表和 departments 表中选择所有员工的姓名及其对应部门名称。只有当员工的部门 ID 与相应部门的 ID 匹配时,相关记录才会被选中。

UNION

UNION 将两个或多个 SELECT 查询结果合并为一个结果集

mysql 复制代码
SELECT name FROM employees WHERE department = 'Sales'
UNION
SELECT name FROM contractors WHERE project = 'Project A';
  • employees 表中获取所有在 "Sales" 部门工作的员工姓名,
  • contractors 表中获取所有参与 "Project A" 项目的承包商姓名,
  • 最后,将这两个结果集合并成一个结果集,并去除重复项。

UNION ALL

UNION 默认去重,而 UNION ALL 则保留重复项。

mysql 复制代码
SELECT name FROM employees WHERE department = 'Sales'
UNION ALL
SELECT name FROM contractors WHERE project = 'Project A';
  • employees 表中获取所有在 "Sales" 部门工作的员工姓名,以及
  • contractors 表中获取所有参与 "Project A" 项目的承包商姓名,
  • 最后,将这两个结果集合并成一个结果集,并保留重复项(如果存在)。

CASE 语句

mysql 复制代码
SELECT name,
       CASE 
           WHEN salary > 70000 THEN 'High'
           WHEN salary BETWEEN 50000 AND 70000 THEN 'Medium'
           ELSE 'Low'
       END AS salary_category
FROM employees;
  • employees 表中获取所有员工的姓名和对应的薪资类别。
  • 根据每位员工的薪资,将其分为三类:高、中或低。

GROUP BY 与 HAVING

GROUP BY 用于对结果进行分组,HAVING 用于过滤分组后的结果集

mysql 复制代码
SELECT department, COUNT(*) as employee_count 
FROM employees 
GROUP BY department 
HAVING employee_count > 10;
  • 从一个名为employees的数据库表中统计每个部门的员工数量,并筛选出员工数量超过10人的部门
相关推荐
FreeBuf_1 分钟前
Apache组件遭大规模攻击:Tomcat与Camel高危RCE漏洞引发数千次利用尝试
java·tomcat·apache
无妄-202412 分钟前
软件架构升级中的“隐形地雷”:版本选型与依赖链风险
java·服务器·网络·经验分享
积跬步,慕至千里14 分钟前
clickhouse数据库表和doris数据库表迁移starrocks数据库时建表注意事项总结
数据库·clickhouse
qqxhb16 分钟前
零基础数据结构与算法——第四章:基础算法-排序(上)
java·数据结构·算法·冒泡·插入·选择
极限实验室41 分钟前
搭建持久化的 INFINI Console 与 Easysearch 容器环境
数据库
猴哥源码1 小时前
基于Java+SpringBoot的在线小说阅读平台
java·spring boot
lingRJ7771 小时前
从混沌到掌控:基于OpenTelemetry与Prometheus构建分布式调用链监控告警体系
java·springboot·prometheus·backend·opentelemetry·jaeger·microservices
星辰离彬1 小时前
Java 与 MySQL 性能优化:Java应用中MySQL慢SQL诊断与优化实战
java·后端·sql·mysql·性能优化
白仑色1 小时前
Oracle PL/SQL 编程基础详解(从块结构到游标操作)
数据库·oracle·数据库开发·存储过程·plsql编程
程序猿小D3 小时前
[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的个人财务管理系统,推荐!
java·数据库·mysql·spring·毕业论文·ssm框架·个人财务管理系统