zoukankan      html  css  js  c++  java
  • (5)MySQL的查询:模糊查询(通配符查询like)、限制符查询(limit)、排序查询(order by)、分组查询(group by)、(子查询)

    注意事项

    指令语法的优先级: where > group by >order by > limit

    例:select count(id) as cnt,age from tablename where id > 6 group by age having cnt < 2 order by age desc limit 2,5

    PS:查找tablename表中age列从id列大于6后面开始分组,且计算age值相同的数量,然后查询相同数量小于2的数据以age降序排列,且从第二行开始取值一页显示5条

    通配符查询:like  #数据库查询肯定用索引,所以这个知识只要了解即可

    固定用法like + 条件

    1、% 代表所有字符(like ‘n%’ ) #查询只要以n开头的

    2、_  代表一个字符(like 'n_')   #查询只要字符串内有n都查询到

    where后面可以跟比较运算符和逻辑运算符(=、<、>、!=、not、or、and)

    PS:如果用like去搜索,就无法使用索引查询,索引查询的速度要快与通配符查询

    限制符查询:limit

    PS:应用在网页每页呈现多少数据

    select * from tablename limit 5; #tablename就是表名,数字5就是要取几行数据

    select * from tablename limit offset(4),5  #offset就是偏移量,意思就是从第几行开始,5就是要取几行

    限制符查询实例:page=1 的时候取10条数据

    思路:page=1的时候就取10条,就是从数据库中取10行(0-10),第二页就是要从数据库的10行开始取10条,以此类推

    page = 1 limit 0,10

    page = 2 limit 10,20

    page = 3 limit 20,10

    指令就是  page = n select * from tablename where 查询条件 limit (n-1)*10,10

    排序查询

    select * from tablename order by age;  #将列表中的数据通过age来进行升序排序,后面有asc和desc两个参数,如果不写,默认按照升序进行排序

    select * from tablename order by age asc;  #acs就是按照升序 排列

    select * from tablename order by age desc;  #desc就是按照降序排列

    select * from tablename order by age desc,id asc;  #优先按照age降序排列,如果age有相同的,就按照id进行升序排列 

    分组查询(用到分组查询必须要有一个聚合函数这是一定的配套的)

    PS:where 和having 的区别(都是用来过滤数据的),但是不同的where是过滤的原生的数据(没有经过处理的数据,比如分组等),having是过滤group by(分组)之后的数据进行二次筛选,这个程序设计者设计的,固定的

    PS:where是可以和having配合使用的,但是必须在group by 分组之前使用,即select count(id) as cut,age from tablename where id > 6 group by age having cnt < 2 #查找tablename中age列下序号6以后的值,并且分组默认升序排列,且计算相同的数量,查找相同数量<2的数据

    聚合函数:

    count()  #计数

    max()  #最大值

    min()  #最小值

    avg()  #去平均

    sum() #求和

    PS:sum和count是不同的,sum是做计算,count只是数个数

    语法:

    select 聚合函数 as name,条件1 from tablename group by 分组条件  #as name 是将聚合函数修改一个名字,能够更直观的在列表内呈现 group by 后面的就是以什么分组的条件 条件1就是列表内需要查询的列名

    PS:条件1肯定是和分组条件一样的,否则会出现数据查询不完全

    select count(id) as cnt,age from tablename group by age;   #分组age并且计算这个组相同的条件的数量   

    select count(id) as cnt,age from tablename  group by age having cnt < 2; #查询tablename表中age列然后计算相同age值的数量并且查找相同age数量<2的数据

    where和having连用

    select count(id) as cut,age from tablename where id > 6 group by age having cnt < 2 #查找tablename表中age列,且id列>6的值,并且分组,且计算相同的数量,查找相同数量<2的数据

    子查询(sql语句套sql语句) #不建议用,使用子查询后无法用索引,而且效率比连表查询还慢

    select * from tablename1 where 列名 in (select 列名 from tablename2); 

  • 相关阅读:
    Qt 的插件制作遇到的问题
    Qt实现原生Flow实现不了的Item错误排列效果,类似淘宝商品展示
    通过pro文件使Qt的build目录更清爽
    No rule to make target
    Qtcreator中printf()/fprintf()不显示问题处理方法
    QtCreator集成的MSVC套件有问题
    启动程序失败,路径或者权限错误
    图数据库 Nebula Graph 的数据模型和系统架构设计
    NLP(十六)轻松上手文本分类
    NLP(十五)让模型来告诉你文本中的时间
  • 原文地址:https://www.cnblogs.com/shizhengquan/p/10298815.html
Copyright © 2011-2022 走看看