美文网首页
MySQL查询数据

MySQL查询数据

作者: younger_times | 来源:发表于2017-09-08 10:43 被阅读137次

    [toc]

    select  属性列表 from 视图或表 where 条件 group by 属性名1 [having 表达式2 ]order by 属性名2  [asc|desc]
    

    单表查询:

    查询条件列表

    查询条件 关键字
    比较 =,<,<=,>=,!=,<>,!>,!<
    指定范围 between and, not between and
    指定集合 in, not in
    匹配字符 like , not like
    是否为空值 is null, is not null
    多个查询条件 and ,or

    查询所有字段

    select * from table;
    

    查询指定字段:

    selecct name from users;
    

    查询指定记录:

    select * from users where id= 1001;
    

    带 in关键字的查询

    如果user表中,id在(1001,1004)列表中则为结果

    select * from user where id in(1001,1004);
    

    带between and 范围查询

    user表中,id在1001至1005范围区间则为结果

    select * from user where id between 1001 and 1005
    

    带like的字符匹配查询

    模糊匹配查询

    • % : 任意一个或多个字符,匹配act1,act2,actd等以act开头的所有则为结果
    • _ : 任意一个字符 ,仅此一个,act1为匹配,act1111则不会匹配
    select  * from where like 'act'%; 
    

    查询空值:

    select * from work where info is null;
    

    带and 的多条件查询:

    select * from user d_id = 1001 and sex like '男';
    

    带or的多条件查询

    select * from user where id =1001 or sex like '喃';
    

    查询结果不重复

    去重操作,类似于set集合

    select distinct id fom user;
    

    对查询结果排序

    • desc 降序
    • asc 升序
    select * from user order by age desc;
    

    分组查询

    group by 关键字可以将查询结果按某个字段或多个字段进行分组。字段中值相等的为一组

    group by 属性名 [having 条件表达式][with rollup]

    • having 用来限制分组后的显示,满足条件被显示
    • with rollup 会在所有记录的最后加上一条记录,该记录是上面所有记录的总和

    group by 关键字可以和group_concat()函数一起使用,group_concat()函数会把每个分组中指定字段都显示出来,同时group by关键字通常与集合函数一起使用。集合函数包括count(),sum(),avg(),max(),min()

    单独使用group by关键字来分组

    group by单独使用意义不大,配合函数才是王道

    select * from user group by sex;
    

    group_by 与group_concat()函数

    每个分组中指定字段值都显示出来,下列查询语句会分两组,两组,并且显示所有name字段的值,以逗号隔开

    select  sex,group_concat(name) from user group by sex;
    

    group_by 与 count()函数

    select sex ,count(sex) from user group by sex;
    

    having :限制输出结果

    上列语句中,可能会输出不需要的值,可以通过having来限制输出

    select sex,count(sex) from user group by sex having count(sex)>=3;
    

    group by 与with rollup 一起用

    最后一条则为总和

    select sex count(sex) from user group by sex with rollup;
    

    limit 限制查询结果的数量

    limit 初始位置,记录数

    select * from user limit 2;
    select *from user limit 0,10;
    

    集合函数

    count() 计数

    统计总和个数

    select  count(*)from user;
    

    sum()求和

    select  num,sum(score)from grade where num=1000;
    

    avg()求平均值

    select course,avg(socre)from grade gorup by course;
    

    max()最大值

    select max(age) from table1;
    

    min()最小值

    select min(age) from table1;
    

    连接查询

    连接查询能将两个或两个以上的表按某个条件连接起来,从中选取需要的数据,连接查询是同时查询两个或两个以上的表时使用

    内连接查询:

    select class1.name ,class2.name from class1,class2 where class1.id=class2.id;
    

    外连接查询:

    • left 查询第一个表的所有数据,第二个表只查询匹配的数据
    • right 与left相反
    select 属性名列表 from 表1 left|right join 表2 on 表1.属性名= 表2.属性名
    

    子查询

    带in关键字子查询

    子查询将一个查询语句嵌套在另一个查询语句中,内层的查询结果将作为外层查询条件

    select * from user where id in(select id form depat);
    
    select name,score from computer_stu where score >=(select ....)
    

    带比较运算符的子查询

    select * from user where age>=(select ...)
    

    带exists关键字的子查询

    不返回数据,返回真假

    select * from user where exists (select ....)
    

    带any关键字的子查询

    当子查询返回的任何一个值满足

    select *from computer_stu where score>=any (select ...)
    

    带all 关键字的子查询

    当子查询任何值都必须满足

    select * from computer where score>all(select ....)
    

    合并查询

    将查询结果合并在一起

    select 语句1 union|union all select 语句2 union |union all
    

    为表取别名

    表名 表的别名表名 as 表的别名

    select  name as 名称 from userr;
    

    使用正则表达式:

    正则表达式 含义
    ^ 匹配开始部分
    $ 匹配结束部分
    . 代表任意一个字符
    [abc] 匹配‘abc’中任意一个字符
    [^abc] 匹配除了'abc'中任意一个字符
    a| b | c a,b,c任意一个字符
    * 代表多个该符号之前的字符,0和1个
    + 代表多个符号之前的字符,1个
    字符串{N} 出现N次
    字符串{M,N} 至少M次,最多N次
    select * from info where name regexp '^L';
    

    相关文章

      网友评论

          本文标题:MySQL查询数据

          本文链接:https://www.haomeiwen.com/subject/gidgjxtx.html