数据库中最常用的操作是从表中检索所需的数据,即数据查询。
select语法格式为:
select [all | distinct]字段列表 from 表名
[where条件表达式]
[group by字段名]
[having 条件表达式]
[order by 字段名 [asc | desc]
[limit [行号,]行数]
简单查询
1.查询指定字段
语法格式为:
select 字段列表 from 表名;
如果要输出表中的全部字段,可改为
select * from 表名;
即打开表,“*”代表所有字段。select除了可以跟字段名,还可以跟表达式、字符串、函数等。
select子句中的字段名或关于字段的计算表达式都会自动地作为查询结果的列名,如果列名太长或不直观,可以用别名对列进行重命名。使用AS关键字对查询结果进行列名重命名,即为别名(AS也可以省略)。
2.条件查询 where
为了限制select语句检索出来的记录集,可使用where语句,它给出选择记录的条件,返回结果是一个布尔值。条件表达式的结果返回真(TRUE),将该记录加入查询结果集中;返回假则继续查询下一条记录,直到扫描表的全部记录。语法格式为:
select 字段列表 from 表名 where 条件表达式;
在where子句中表达式常用的运算符有算数运算符、比较运算符和逻辑运算符。还可以用圆括号将一个表达式分成几个部分。
3.多条件查询
如果查询语句中有多个条件,可使用逻辑运算符连接。
(1)带有and的多条件查询 and
and关键字可以用来连接多个查询条件。使用and关键字时,只有所有的查询条件结果都为真,where子句的最终结果为真,记录被加到结果集中。语法格式为:
select 字段列表 from 表名 where 条件 表达式 1 and 条件表达式2[...and条件表达式N];
where子句中可以同时使用多个and关键字来连接多个表达式。
当多个条件表示的是一个取值范围时,可用between...and代替,该子句用于判断某个字段的值是否在指定范围内。语法格式为:
select 字段列表 from 表名 where 字段名 [not] between 值1 and 值2;
(2)带or的多条件查询 or
or关键字用来连接多个查询条件,但是与and关键字不同,or关键字只要满足查询条件中的任何一个,那么此记录就会被加到查询结果集中。语法格式为:
select 字段列表 from 表名 where 字段名 [not] (值1,值2....值n);
4.模糊查询 like
数据查询时当条件值不确定,也就是说不能对字符串进行精确查询,可以使用like运算符与通配符实现模糊查询,like是判断一个字符是否与给定的模式匹配。MySQL中通常使用的通配符有两种:“%”和下划线“_”。
“%”可以匹配一个或多个字符,可以代表任意长度的字符串,长度可以为0。
“_”只匹配一个字符。
语法格式为:
字段名 [not] like 模式
5.空置查询 is null
is null关键字可以用来判断字段的值是否为空值null(is not null恰恰相反)。如果字段的值是空值,则满足查询条件,该记录被加入查询结果集。其语法格式为:
表达式 is [not] null
6.查询结果排序 asc|desc
select语句查询结果集的排序由数据库系统动态确定,往往是无序的,order by子句用于查询结果集排序。结果集中的记录按照一个或多个字段的值进行排序,排序的方向可以是升序(ASC)或降序(DESC),默认为升序。语法格式为:
order by 字段名1 [ASC|DESC] [...,字段名n [ASC|DESC] ]
order by子句对查询的结果进行升序或降序排列,不改变数据的存储位置。在默认情况下,order by按升序输出结果。如果该字段含有null值,则null值排在最前面。
order by子句中的排序字段名可以是数据表的字段,还可以是查询结果中的字段。
7.limit子句
查询表中的前几条或者中间某几条连续的记录,可以使用limit子句实现。语法格式为:
select 字段列表 from 数据源 limit [start,]length;
start表示从第几行记录开始检索,length表示检索记录的行数。数据表中第一行记录的start值为0。当查询结果集从第一行开始输出,start可以省略。
8.去除重复行
用distinct关键字可以去除查询结果中的重复记录,语法格式为:
select distinct 字段名 from 表名;