走进MySQL(6)

本文详细介绍了MySQL中的子查询用法,包括在where、from子句中的应用,以及如何通过子查询实现特定查询效果。同时,文章还探讨了union操作的优势及限制,以及limit在分页查询中的作用。通过实例解析,帮助读者巩固数据库查询知识。
摘要由CSDN通过智能技术生成

@TOC

写在最前,本篇文章大部分来源于动力节点MySQL入门基础的提炼,并附带自己的理解。主要是为了复习此前学了又忘的数据库。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。

子查询

什么是子查询?
select语句中嵌套select语句,被嵌套的语句称为子查询
在select,from,where后面皆可以出现子查询

where子句中的子查询

案例:比最低工资高的员工姓名和工资?

select sal from emp where sal > min(sal);

由于分组函数不能放在where后面,这句语句肯定是错的,那么怎样达到相同的效果呢?

select sal from emp where sal > (select min(sal) from emp);

from子句中的子查询

案例:每个岗位的平均工资的薪资等级。

第一步:找出平均工资

mysql> select job, avg(sal) from emp group by job;
+-----------+-------------+
| job       | avg(sal)    |
+-----------+-------------+
| CLERK     | 1037.500000 |
| SALESMAN  | 1400.000000 |
| MANAGER   | 2758.333333 |
| ANALYST   | 3000.000000 |
| PRESIDENT | 5000.000000 |
+-----------+-------------+

第二步:将上步结果当成临时表t

mysql> select t.*, s.grade from t join salgrade s on t.avg(sal) between s.losal and s.hisal;
将之前的语句放入t前
mysql> select t.*, s.grade from (select job, avg(sal) as tavg from emp group by job) t join salgrade s on t.tavg between s.losal and s.hisal;

将计算出来的临时结果当成一张表,也就是from子句的子查询。

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 |
+--------+----------+

相当于or,但效率更高一些,可以减小匹配的次数,把乘法变为了加法。
但union进行合并时要求:结果集的列数相同;在Mysql中数据类型可以不一致,但oracle要求一致。

limit

将查询结果集的一部分取出来,通常使用在分页查询中。
完整用法 limit + start, len
缺省用法 limit + len, 默认起始下标为0

注意:limit在order by 之后执行

select sal from emp order by asc sal;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值