Mysql子查询

概念:出现在其他语句内部的select语句,称为子查询或内查询

内部嵌套其他selectyu语句的查询,称为外查询或主查询

 分类:

     按子查询出现的位置:

                   select后面

                            仅仅支持标量子查询

                    from后面

                             支持表子查询

                    where或having后面 (重点)

                              支持标量子查询*

                              支持列子查询*

                                行子查询(较少)

                       exists后面(称为相关子查询)

                               表子查询

  按结果集的行列数不同:

                       标量子查询(结果集只有一行一列/单行自查寻)

                       列子查询(结果集只有一列多行/多行子查询)

                        行子查询(结果集有一行多列)

                        表子查询(结果集一般为多行多列/多列多行)

特点:1.子查询放在小括号内

            2.子查询yi一般放在条件的右侧

            3.标量子查询,一般搭配单行操作符使用

             >  <  >=  <=  =   <>

            列子查询:一般搭配多行操作符使用

             IN ANY/SOME ALL

多行子查询:

ANY和some用的少,用其他代替可读性更强

上面表示a比右边的其中一个值大就行

上面a比右边的所有值都大

any和min可以互换  all和max可互换,重在理解题意

行子查询

 替换成

 FROM 后面形成的表必须起别名

 exists(相关zi)子查询 用的较少

能用exists绝对可以用in实现

语法 exists(完整的查询语句)

结果:0或1

分页查询

 当要显示的数据,一页显示不全,需要分页提交sql请求

语法:

             select 查询列表                       7

             from 表 1                                  1

          【连接类型 join 表2                      2

            on连接条件】                              3

         where  筛选条件                             4 

           group by 分组字段                      5

            having  分组后的筛选                  6

            order by 排序的字段                   8 

            limit  offset,size                         9

           offset 要显示条目的起始索引(数据中的起始)索引下标从0开始(和substr这些函数比是比较特殊的,这里是从0开始索引)

             size 要显示的条目个数

           1.limit语句放在查询语句的最后 ,语句执行也是在最后          

           2. select * from 表

               limit (page-1)*10,size

下面就这里特殊认为这里的索引是从0开始,其实其他都是从1开始,起始索引不写默认是从0开始

联合查询

union 联合 合并:将多条查询语句的结果合并成一个结果

语法:查询语句1

union

查询语句2

union

。。。

应用场景:要查询的结果来自于多个表,且多个表没有直接

的连接关系,但查询的消息一致时 图2可以体现

特点:1.要求多条查询语句的查询列数是一致的

           2.要求多条查询语句的查询的每一列的类型和顺序最好一致 图3可提现(不然会出错)

           3.union关键字是默认去重的,如果使用union all 可以包含重复列 图四可以体现,第一条语句显示2行,第二条显示3行

 

图5 union all 没有去重的情况

WHERE语句在GROUP BY语句之前;SQL会在分组之前计算WHERE语句。   

HAVING语句在GROUP BY语句之后;SQL会在分组之后计算HAVING语句

 对于distinct与group by的使用: 1、当对系统的性能高并数据量大时使用group by 2、当对系统的性能不高时使用数据量少时两者皆可 3、尽量使用group by

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值