MySql数据库学习(四)

3.子查询

3.1什么是子查询?

select语句中嵌套select语句,被潜逃的select语句是子查询。

子查询可以出现在哪里?

select

         ..(select)

from

          ..(select)

where

          ..(select)

 

3.2wher子句中使用子查询

案例:找出高于平均薪资的员工信息

第一步:找出平均薪资

select avg(sal) from emp;

第二步:where过滤

select * from emp where sal >27000;

第三步:合并第一步第二步

select * from emp where sal >(select avg(sal) from emp);

 

3.3 from后面嵌套子查询

案例:找出每个部门平均薪水的薪资等级。

第一步:找出每个部门平均薪水(按照部门编号分组)

select deptno,avg(sal) as avgsal from emp group by deptno;

第二步:将以上的查询结果当作临时表t,将t表和salgrade表连接,条件是:t.avgsal between s.losal and s.hisal

select

           t.*,s.grade

from

            (select deptno,avg(sal) as avgsal from emp group by deptno) t

join

              salgrade s

on

             t.avgsal between s.losal and s.hisal ;

注意:将查询的子句设置一个别名作为一张临时表

 

案例:找出每个部门平均的薪水等级

第一步:找出每个员工的薪水等级

select e.sal,e.name,e.deptno,s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal;

第二步:基于以上结果,继续按照deptno分组,求grade平均值。

select

         e.deptno,avg(s.grade)

from

        emp e

join

        salgrade s

on

       e.sal between s.losal and s.hisal

group by

       e.deptno;

 

3.4在select后面嵌套子查询

案例:找出每个员工所在的部门名称,要求显示员工名和部门名。

select

           e.name,

          (select d.name from dept d where e.deptno=d.deptno) as dname

from

          emp e;

 

4.union(可以将查询结果集相加)

案例:找出工作岗位是SALEMAN和MANAGER的员工?

第一种:or

select name,job from emp where job='SALEMAN' or job='MANAGER';

第二种:in

select name,job from emp where job in('SALEMAN','MANAGER');

第三种:union

select name,job from emp where job='SALEMAN'

union

select name,job from emp where job='MANAGER';

注意:union可以将不相干的表中的数据拼接在一起显示,union查询合并的查询列的个数应该一致。

select name from emp where job='SALEMAN'

union

select name,job from emp where job='MANAGER';

上面这个查询的个数不一致会报错。

 

5.limit(重点,分页查询全靠它)

5.1 limit是mysql特有的,其他数据库中没有,不通用。(oracle中有一个相同的机制,叫做rownum)

5.2 limit取结果集中的部分数据,这是他的作用。

5.3 语法机制:

limit startIndex,length

startIndex表示起始位置,从0开始,0表示第一条数据

length 表示去几个

案例:取出工资前5名的员工(思路:降序取前5)

select name ,sal from emp order by sal desc;

取前5个:

select name ,sal from emp order by sal desc limit(0,5);

select name ,sal from emp order by sal desc limit(5);

 

5.4 语法:

select                     5

           ...

from                       1

          ...

where                    2

          ...

group by               3

          ...

having                   4

          ...

order by                6

          ...

limit                        7

           ...

5.5 案例:找出工资排名在第4名到第9名的员工

select name ,sal from emp order by sal desc limit(3,6);

 

5.6 通用标准分页sql

每页显示3条记录:

第1页:0,3

第2页:3,3

第3页:6,3

第4页:9,3

第5页:12,3

 

每页显示pagesize条记录:

第pageNo页:(pageNo-1)*pageSize,pageSize

 

java代码{

int pageNo=2;//页码

int pageSize=10;//每页显示条数

limit:(pageNo-1)* pageSize,pageSize

}

关于Mysql当中字段的数据类型?

int           整数型

bigint     长整型(java中long)

float       浮点型

char      定长字符串

varchar 可变长字符串

date      日期类型

BLOB     二进制大对象(存储图片、视频等流媒体信息)

CLOB    字符大对象(存储较大文本)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值