MySQL常用语句之查询数据 - Go语言中文社区

MySQL常用语句之查询数据


简单查询:

select [distinct] *| {字段名1,字段名2,字段名3, ...} 
 
from 表名 
 
[where 条件表达式1] 
 
[group by 字段名 [having 条件表达式2]] 
 
[order by 字段名 [asc|desc]] 
 
[limit [offset] 记录数]

查询所有字段有两种方法

第一种:

在select语句中列出所有字段名来查询表中的数据,其语法格式

select 字段名1,字段名2, ... from 表名 ;

第二种:
使用星号(“*”)通配符来代替所有的字段名,其语法格式如下

select * from 表名;

按条件查询

带关系运算符的查询
在select语句中,最常见的是使用where子句指定查询条件对数据进行过滤,其语法格式如下

select 字段名1,字段名2, ... 
 
from 表名 
 
 where 条件表达式 ;

常见的关系运算符如下表所示

关系运算符 说明 关系运算符 说明
= 等于 <= 小于等于
< > 不等于 != 不等于
> 大 于 >= 大于等于
< 小于

例:查询student表中grade大于80的学生姓名。

select name, grade from student where grade > 80;

带 in 关键字的查询
in 关键字用于判断某个字段的值是否在指定集合中,若字段的值在集合中,则满足条件,该字段所在的记录将被查询出来。其语法格式如下

 select * | 字段名1, 字段名2, ... 
 
 from 表名 
 
 where 字段名 [not] in (元素1, 元素2, ...)

说明:在上面的语法格式中,“元素1, 元素2, …”表示集合众的元素,即指定的条件范围。not 是可选参数,使用not表示查询不在in关键字指定集合范围中的记录。

带between and 关键字的查询
between and用于判断某个字段的值是否在指定的范围之内,其语法格式如下

select *|{字段名1, 字段名2, ...} 
 
from 表名 
 
where 字段名 [not] between 值1 and 值2 ; 

说明:在上面的语法格式中,“值1”表示范围条件的起始值,“值2”表示范围条件的结束值,值1,值2均包含在范围内。not是可选参数,使用not表示查询指定范围之外的记录,通常情况下,“值1”小于“值2”,否则查询不到任何结果。

空值查询
在数据表中,某些列的值可能为空值(null),空值不同于0,也不同于空字符串。在MySQL语句中,使用 is null 关键字来判断字段的值是否为空值,其语法格式如下

select *| 字段名1, 字段名2, ... 
 
from 表名 
 
where 字段名 is [not] null ;

带distinct关键字的查询
很多表中某些字段的数据存在重复的值。有时,需要过滤掉查询记录中重复的值,可以使用distinct关键字来实现这种功能,其语法格式如下

select distinct 字段名 from 表名 ;

说明:“字段名”表示要过滤重复记录的字段

select distinct 字段1,字段2,... from 表名 ;

说明:distinct关键字指定多个字段时,distinct 必须放在最前面,只有distinct关键字指定的多个字段值都相同,才会被认作是重复记录

带like关键字的查询
like关键字可以判断连个字符串是否相匹配,其语法格式如下

select *|{字段名1, 字段名2, ...} 
 
from 表名 
 
where 字段名 [not] like '匹配字符串' ;

说明:“匹配字符串”指定用来匹配的字符串,其值可以是一个普通字符串,也可以是包含百分号(%)和下划线(_)的通配字符串。百分号和下划线统称为通配符。

百分号(%)通配符

百分号通配符能匹配任意长度的字符串,包括空字符串。例如,字符串“c%”匹配以字符c开始,任意长度的字符串,如“ct”、“cut”、“current”等等,字符串“w%g”匹配以字符“w”开始,以字符“g”结束,如“wang”等。

下划线(_)通配符

下划线通配符与百分号通配符有些不同,下划线通配符只匹配单个字符。若要匹配多个字符,需要使用多个下划线通配符。例如,字符串“c_”匹配以字符c开始,两个长度的字符串,如“ct”、“cu”等等,字符串“w__g”匹配以字符“w”开始,以字符“g”结束,三个字符长度,如“wang”等。

注意:若使用多个下划线匹配多个连续的字符,下划线之间不能有空格

注意:若要匹配字符串中的百分号和下划线,则使用右斜线(“”)对百分号和下划线进行转义

带and关键字的多条件查询

在使用select语句中,有时为了使查询结果更加精确,可以使用多个查询条件,其语法格式如下

select *|{字段名1, 字段名2, ...} 
 
from 表名 
 
where 条件表达式1 and 条件表达式2 [... and 条件表达式n] ;

带or关键字的多条件查询

在使用or关键字时,只要记录满足任意一个条件就会被查询出来,其语法格式如下

select *|{字段名1, 字段名2, ...} 
 
from 表名 
 
where 条件表达式1 or 条件表达式2 [... or 条件表达式n] ;

or和and关键字一起使用的情况
注意:and的优先级高于or

高级查询
聚合函数

函数名称 作用 函数名称 作用
count() 返回某列的行数 max() 返回某列的最大值
sum() 返回某列值的和 min() 返回某列的最小值
avg() 返回某列的平均值

以上表中的函数对一组值进行统计,并返回唯一值,这些函数被称为聚合函数。
注意:count()函数实际使用时,直接用count(字面量值),这样查询效率更高

select count (1) from student
where id<30;

对查询结果排序
使用 order by 对查询结果进行排序,其语法格式如下

select 字段名1, 字段名2, ... 
 
from 表名 
 
order by 字段名1[asc|desc], 字段名2 [asc|desc] ...

说明:参数 asc 表示按照升序进行排序,desc表示按照降序进行排序。默认情况下,按照 asc 方式进行排序。
注意:在按照指定字段进行排序时,若某条记录的字段值为null,则这条记录会在第一条显示,因为 null 值被认为是最小值
分组查询
使用 group by 按某个字段或者多个字段中的值进行分组,字段中值相同的为一组,其语法格式如下

select 字段名1, 字段名2, ... 
 
from 表名 
 
group by 字段名1, 字段名2, ... [having 条件表达式]

说明:having关键字指定条件表达式对分组后的内容进行过滤,需要注意的是,group by 一般和聚合函数一起使用。

group by 和聚合函数一起使用,可以统计出某个或者某些字段在一个分组中的最大值、最小值、平均值等。
例:将student表按照gender字段值进行分组查询,计算出每个分组中各有多少名学生。

select count(*), gender from student group by gender ;

结果说明:group by 对student表按照gender字段中的不同值进行了分组,并通过count()函数统计出每个组个数。

group by 和 having关键字一起使用

例:将student表按照gender字段进行分组查询,查询出grade字段值之和小于300的分组。

select sum(grade), gender 
from student 
group by gender 
having sum(grade) < 300 ;

having 关键字和where关键字的异同点

相同点:都用于设置条件表达式对查询结果进行过滤

不同点:

having关键字:
having关键字后可以跟聚合函数,通常情况下,having关键字都和group by 一起使用,用于对分组后的结果进行过滤。

where关键字:
where关键字不能后跟聚合函数。

使用 limit 限制查询结果的数量
limit关键字可以指定查询结果从哪一条记录开始以及一共查询多少条信息,其语法格式如下

select 字段名1, 字段名2, ... 
 
from 表名 
 
limit [offset,]记录数

说明:limit 后面可以跟两个参数,第一个参数“offset”表示偏移量,也就忽略掉前多少条数据,若偏移量为0,则从查询结果的第一条记录开始;偏移量为1,则从查询结果中的第二条记录开始,以此类推。offset为可选值,若不指定,其默认值为0。第二个参数“记录数”表示返回查询记录的条数。常用于数据分页。

为表和字段取别名 as 关键字
为表取别名的语法格式如下

select * from 表名 [as] 别名 ;

为字段取别名的语法格式如下

select 字段名 [as] 别名 [, 字段名 [as] 别名, ...] from 表名 ;

select子句顺序

子句 说明 是否必须使用
select 要返回的列或表示式
form 从中检索数据的表 仅在从表选择数据时使用
where 行级过滤
group by 分组说明 仅在按组计算聚集时使用
having 组级过滤
order by 输出排序顺序
limit 要检索的行数

如图:
在这里插入图片描述

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_39369835/article/details/87914700
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 18:12:21
  • 阅读 ( 789 )
  • 分类:数据库

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢