子查询+UNION+LIMIT

        定义:select中嵌套select,嵌套的select语句称为子查询语句。

一,where中的子查询:

        示例:

        select productName,productCount from bill
    -> where productCount>=(select avg(productCount) from bill);

        后面的子查询语句相当于先把平均值找出来,然后再找到大于平均值的信息。

二,from中的子查询:

        可以将from后面的子查询的结果当作一张临时表。

        select t.*,s.grade from (select avg(sal) as avgsal from emp group by job) as t join s 

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

        这里的t表的是sal的平均值的搜索结果,因为搜索生成的这张表中avg(sal)这行在后面的where比较中要用到,不能用本来的字段名avg(sal),所以要用别名。

三,select后的子查询(不常用)

四,union合并查询结果

        示例:

        > select contact from address where id=1
       -> union
       -> select contact from address where id=3;

        跟使用in或or结果一样,但是union的效率高一些。表连接由于符合笛卡尔积的规律,每连接一个新表,查询数量翻倍,但是union可以减少查询次数。

Notations:uinion在合并结果的时候要求两个结果列数相同,在mysql中可以列的数据类型不一致,但oracle中要求数据类型相同。

四,limit

        limit将查询结果部分取出来,通常用于分页查询中。如百度的搜索结果。分页是为了提高用户的体验效果。示例:

     > select contact from address
    -> limit 1,2;

        limit后面跟两个数字前一个是起始下标,后一个是长度。如果只有一个数字就是默认从0开始。

        limit执行顺序在order by的后面。如取出升序排列前四名:

     > select contact from address
    -> order by tel asc
    -> limit 4;

五,limit进行分页

        分页的每页显示pageSize条数据,每页开始的序号为(分页的页码-1)*pageSize。所以分页的通用公式:

limit (pageNo-1)*pageSize,pageSize;

你可能感兴趣的:(mysql,java,数据库,服务器)