当前位置: 首页 > ai >正文

MySQL基础关键_006_DQL(五)

目  录

一、子查询

1.说明

2.where 后嵌套

(1)查询高于平均薪资的员工姓名、薪资

3.from 后嵌套

(1)查询每个部门平均薪资对应的等级 

4.select 后嵌套

(1)查询每个员工的姓名和部门名称

5.exists/not exists

(1)说明

(2)实例初始化 

(3)查询下单用户

(4)in 和 exists 的区别

二、合并 union/union all

1.说明

2.查询职位是“MANAGER”和“SALESMAN”的员工信息

 三、limit

1.说明

2.查询薪资前三名的员工信息 

3.分页 SQL 语句 


一、子查询

1.说明

  1. 子查询就是在 select 语句中嵌套 select语句;
  2. select 语句可以嵌套在 from、where、select 后。

2.where 后嵌套

(1)查询高于平均薪资的员工姓名、薪资

select emp_name, salary from employees where salary > (select avg(salary) from employees);


3.from 后嵌套

        from 后的子查询可以看作一张临时表。 

(1)查询每个部门平均薪资对应的等级 

select a.*, s.grade from (select dept_no, avg(salary) as average_salary from employees group by dept_no) a join salary_grades s on a.average_salary between s.min_salary and s.max_salary;


4.select 后嵌套

(1)查询每个员工的姓名和部门名称

select e.emp_name, (select d.dept_name from departments d where e.dept_no = d.dept_no) as dept_name from employees e;


5.exists/not exists

(1)说明

  1. 在 MySQL 中,EXISTS 用于检查子查询的查询结果行数是否大于 0 。若存在,则 EXISTS 的条件为真;
  2. 应用场景:
    1. 用于检验条件子句中的表达式是否存在;
    2. 用于子查询条件过滤;
    3.  可以与 SELECT、UPDATE、DELETE 搭配使用,检查另一个查询是否有返回。

(2)实例初始化 

        执行下方 sql 脚本。

DROP TABLE IF EXISTS customers;
DROP TABLE IF EXISTS orders;CREATE TABLE customers (id INT PRIMARY KEY,name VARCHAR(32)
);CREATE TABLE orders (id INT PRIMARY KEY,price DECIMAL(5,1),customer_id INT REFERENCES customers(id)
);INSERT INTO customers (id, name) VALUES (1, 'XiaoMing');
INSERT INTO customers (id, name) VALUES (2, 'XiaoHong');
INSERT INTO customers (id, name) VALUES (3, 'XiaoGang');INSERT INTO orders (id, price, customer_id) VALUES (10, 1000.0, 1);
INSERT INTO orders (id, price, customer_id) VALUES (20, 2000.0, 1);
INSERT INTO orders (id, price, customer_id) VALUES (30, 3000.0, 2);
INSERT INTO orders (id, price, customer_id) VALUES (40, 4000.0, 2);COMMIT;

(3)查询下单用户

select * from customers c where exists (select * from orders o where c.id = o.customer_id);


(4)in 和 exists 的区别

  1. in 是根据指定列表中的值判断是否满足条件,而 exists 是根据子查询结果是否有返回来判断;

  2. exists 通常效率更高,因为 exists 只需要判断是否有符合条件的记录,而 in 需要对比整个列表;

  3. 但是 in 可以匹配多个值,而 exists 只能匹配一组条件。


二、合并 union/union all

1.说明

  1. union 和 union all 都是将两个查询结果集合并
  2. 两个结果集合并时,列数要相同;
  3. union 会对合并后的数据集进行去重
  4. union all 不会对合并后的数据集去重
  5. union all 由于不需要去重,所以效率更高

2.查询职位是“MANAGER”和“SALESMAN”的员工信息

# union all
select * from employees where job_title = 'MANAGER' union all select * from employees where job_title = 'SALESMAN';# union
select * from employees where job_title = 'MANAGER' union select * from employees where job_title = 'SALESMAN';


 三、limit

1.说明

  1. 查询从哪一条开始到哪一条的记录。通常是因为表中数据量庞大,需要分页展示;
  2. 语法格式:【limit 开始下标, 长度;】;
  3. 不写开始下标,则默认从第一行开始。

2.查询薪资前三名的员工信息 

select * from employees order by salary desc limit 0, 3;-- 可以省略不写开始下标,默认从第一行数据开始
select * from employees order by salary desc limit 3;


3.分页 SQL 语句 

# 假设要求每页展示10条数据,当前是第1页
int pageNo = 1;
int pageSize = 10;# 第一页
limit 0, 10;# 第2页
limit 10, 10;# 第3页
limit 20, 10;# 第pageNo页
limit (pageNo - 1) * pageSize, pageSize;
http://www.xdnf.cn/news/3591.html

相关文章:

  • 数智图书馆的信息组织革命:AI变革下的新秩序
  • Spring 事务的底层原理常见陷阱
  • Fabrice Bellard(个人网站:‌bellard.org‌)介绍
  • ad 多通道设计中出现的相关问题
  • AWS上构建基于自然语言和LINDO API的线性规划与非线性规划的优化计算系统
  • MCP 探索:MCP 集成的相关网站 Smithery、PulseMCP 等
  • Java面试趣事:从死循环到分段锁
  • Lua 基础 API与 辅助库函数 中关于创建的方法用法
  • 基于STM32的智能摇头风扇设计(WIFI+语音控制)
  • CGAL:最小包围圆
  • 共铸价值:RWA 联合曲线价值模型,撬动现实资产生态
  • 基于机器学习的心脏病数据分析与可视化(百度智能云千帆AI+DeepSeek人工智能+机器学习)健康预测、风险评估与数据可视化 健康管理平台 数据分析与处理
  • k8s 探针
  • 基于ArduinoIDE的任意型号单片机 + GPS北斗BDS卫星定位
  • 基于「骑手外卖系统」串联7大设计原则
  • 【Hot 100】 146. LRU 缓存
  • Three.js在vue中的使用(二)-加载、控制
  • 【ICMP协议深度解析】从网络诊断到安全实践
  • Mysql常用语句汇总
  • centos7.0无法安装php8.2/8.3
  • ROS2学习笔记|创建工作空间并打印文件内容
  • 视频编解码学习二之颜色科学
  • UDP / TCP 协议
  • 使用DeepSeek协助恢复历史数据
  • GoFrame 奉孝学习笔记
  • ElasticSearch深入解析(十):字段膨胀(Mapping 爆炸)问题的解决思路
  • leetcode0096. 不同的二叉搜索树-medium
  • 从零开发一个B站视频数据统计Chrome插件
  • Android Compose 层叠布局(ZStack、Surface)源码深度剖析(14)
  • AI Agent开发第48课-DIFY中利用AI动态判断下一步流程-DIFY调用API、REDIS、LLM