MySQL数据库之union,limit和子查询详解
作者:世界尽头与你 发布时间:2024-01-16 08:15:29
1.where中的子查询
示例数据参见此文章
案例:查询比最低工资高的员工姓名和薪资
子查询,先查询子查询括号里的,再向上级进行查询
mysql> select ename,sal from emp where sal
-> >
-> (select min(sal) from emp);
+--------+---------+
| ename | sal |
+--------+---------+
| ALLEN | 1600.00 |
| WARD | 1250.00 |
| JONES | 2975.00 |
| MARTIN | 1250.00 |
| BLAKE | 2850.00 |
| CLARK | 2450.00 |
| SCOTT | 3000.00 |
| KING | 5000.00 |
| TURNER | 1500.00 |
| ADAMS | 1100.00 |
| JAMES | 950.00 |
| FORD | 3000.00 |
| MILLER | 1300.00 |
+--------+---------+
13 rows in set (0.02 sec)
2.from子句后的子查询
from后面的子查询,可以将子查询的查询结果当作一张临时表来看待
案例:找出每个岗位的平均薪资的薪资等级
mysql> select
-> t.*,s.grade
-> from
-> (select job,avg(sal) as avgsal from emp group by job) t
-> join salgrade s
-> on
-> t.avgsal between s.losal and s.hisal;
+-----------+-------------+-------+
| job | avgsal | grade |
+-----------+-------------+-------+
| CLERK | 1037.500000 | 1 |
| SALESMAN | 1400.000000 | 2 |
| MANAGER | 2758.333333 | 4 |
| ANALYST | 3000.000000 | 4 |
| PRESIDENT | 5000.000000 | 5 |
+-----------+-------------+-------+
5 rows in set (0.00 sec)
3.union
MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。
MySQL UNION 操作符语法格式:
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
参数
expression1, expression2, ... expression_n: 要检索的列。
tables: 要检索的数据表。
WHERE conditions: 可选, 检索条件。
DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT修饰符对结果没啥影响。
ALL: 可选,返回所有结果集,包含重复数据。
案例:查询工作岗位为MANAGER或者SALESMAN的员工信息(使用union)
mysql> select ename,job from emp where job = 'MANAGER'
-> union
-> select ename,job from emp where job = 'SALESMAN';
+--------+----------+
| ename | job |
+--------+----------+
| JONES | MANAGER |
| BLAKE | MANAGER |
| CLARK | MANAGER |
| ALLEN | SALESMAN |
| WARD | SALESMAN |
| MARTIN | SALESMAN |
| TURNER | SALESMAN |
+--------+----------+
7 rows in set (0.00 sec)
为什么使用union而不是or逻辑运算?因为union效率更高!
另外,对于表连接来说,如果有恰当的union语句可以操作与之相同的效果,优先使用union操作
union使用注意:
查询的两个结果集列数必须相同
在Mysql中列的数据类型可以存在差异,但是在Oracle中则不可以
4.limit查询
limit用于限制结果集的长度
后面可以存在一个参数或者两个参数(起始下标,取数据条数)
案例:按照薪资降序取出排名前5的员工信息
mysql> select ename,sal
-> from emp
-> order by sal desc
-> limit 0,5;
+-------+---------+
| ename | sal |
+-------+---------+
| KING | 5000.00 |
| FORD | 3000.00 |
| SCOTT | 3000.00 |
| JONES | 2975.00 |
| BLAKE | 2850.00 |
+-------+---------+
5 rows in set (0.00 sec)
limit在order by之后执行
5.分页
假设每页要访问y条数据,那么第x页的数据就是
limit((x-1)*y,y)
来源:https://blog.csdn.net/Gherbirthday0916/article/details/125959596


猜你喜欢
- 分享一下 在3est活动中学习的godlong的 代码如下:<% Set xPost = createObject("Mi
- python的注释方式和C语言、C++、java有所不同python语言中,使用‘#' 来进行注释,其次还有使用 三个引号来进行注释
- 前言在做数据报表时,需要对某一时间段分组,以1小时为时间间隔统计各项数据,如9点-10点,10点-11点…,但是现在有种情况,时间有可能不是
- 如何获取相邻数据因为项目,所以找到了一些资料并且总结了下关于获取相邻数据的方式。我只找到了以下的.../*获取id值与5相减绝对值最近的数据
- 安装pip install websocket-client先来看一下,长连接调用方式:ws = websocket.WebSocketAp
- 在实际开发中,无论是做PC端、WebApp端还是微信公众号等类型的项目的时候,或多或少都会涉及到微信相关的开发,最近公司项目要求实现微信网页
- 下面说说主要实现思路: 1、存取图片 (1)、将图片文件转换为二进制并直接存进sql server //UploadHelper.cs //
- Python单元测试unittest中提供了一下四种装饰器实现测试跳过和预期故障。(使用Python 2.7.13)请查考Python手册中
- 前言:Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。Python对SMTP支持有smtplib和ema
- function createobj() { if (window.ActiveXObject)&n
- 本文实例讲述了python处理二进制数据的方法。分享给大家供大家参考。具体如下:#!/usr/env/env python #-*- cod
- 使用VScode的用户代码片段功能,来生成自己习惯的代码模板,提升开发效率1.选择菜单里的 文件 > 首选项 > 用户代码片段2
- 应用场景:状态不是200的URL重试多次代码比较简单还有部分注释python2.7实现:# -*-coding:utf-8-*-"
- 1,file_put_contents()函数 2,使用PHP内置缓存机制实现页面静态化:output_bufferingphp中outpu
- Python语法基础01-Python快速入门U1-定义变量直接定义 不用指明变量类型e.g:a=10U2-判断语句#coding=utf-
- 前言:有读者可能会一脸懵?啥是索引潜水?你给起的名字的吗?有没有索引蛙泳?这个名字还真不是我起的,今天要讲的知识点就叫索引潜水(Index
- 目录需求描述步骤分析和前置知识代码实现写在最后需求描述手上现有若干份财务分析报告的Word文档,如下:每一份Word文档中的内容如下:为了方
- Golang 使用 Groutine 和 channels 实现了 CSP(Communicating Sequential Process
- 额。。。每个请求都有token值的传入,但是token非常易变,一旦变化,所有的接口用例都得改一遍token,工作量太大了。。。那么有没有一
- 目录抽象和复用串行分段串行,段中并行总结前言:JS 天然支持并行请求,但与此同时会带来一些问题,比如会造成目标服务器压力过大,所以本文引入“