✧数据检索
数据检索是指从数据库中按照预定条件查询数据,及引用相关数据进行计算而获取所需信息的过程。
查询数据是数据库操作中最常用、最重要的操作。MySQL是通过select语句查询实现数据检索的。
基本查询语句
select
select语句是SQL语言从数据库中获取信息的一个基本语句。该语句可以实现从一个或多个数据库中的一个或多个表中查询信息,并将结果显示为另外一个二维表的形式,称之为结果集(result set)。
select语句的基本的语法格式可归纳如下:
select select 列名1,列名2,…列名n
[ all | distinct ] selection list [ into 新表名 ]
from table source [where search condition] [ from 表名1,表名2,…,表名n ]
[ group by grouping columns ] [with rollup ] [ group by 列名1,列名2,…列名n ]
[having search condition] [ having 条件表达式 ]
[order by order expression[ asc | desc ] ] [ order by 列名1 [ asc | desc ] , 列名2 [ asc | desc ],…列 名n [ asc | desc ] ]
[limit count] [ where 条件表达式 ]
select 子句用于指定输出字段
into 子句用于将查询到的结果集形成一个新表
from 子句用于指定显示的列来源于哪些表或视图
group by 子句用于指定列值相同的记录作为一组
having 子句用于指定对组的过滤条件。
order by 子句用于将查询到的结果集按指定列排序,asc 升序 desc 降序
where 子句用于指定对记录的过滤条件
使用order by子句对结果集排序:
使用order by 子句可以对查询的结果进行升序(asc)或降序(desc)排列排序可以依照某个列的值,若列值相等则根据第2个属性的值,以此类推。利用order by子句进行排序,需要注意如下事项和原则:
默认情况下,结果集按照升序排列。也可以在输出项的后面加上关键字desc来实现降序输出。对含有null值的列进行排序时,如果是按升序排列,null值将出现在最前面,如果是按降序排列,null值将出现在最后。
order by子句包含的列并不一定出现在选择列表中。
order by子句可以通过指定列名、函数值和表达式的值进行排序。
order by子句不可以使用text、blob、longtext和mediumblob等类型的列。
在order by子句中可以同时指定多个排序项。
group by 子句:
group by子句可以将查询结果按属性列或属性列组合在行的方向上进行分组,每组在属性列或属性列组合上具有相同的聚合值。如果聚合函数没有使用group by子句,则只为select语句报告一个聚合值。将一列或多列定义成为一组,使组内所有的行在那些列中的数值相同。出现在查询的select列表中的每一列都必须同时出现在group by 子句中。
使用 group by 关键字来分组:单独使用group by关键字,查询结果只显示每组的一条记录。
用is null 关键字查询空值:
在where 子句中,如何处理null的值的比较呢?为了取得列中含有null的行,MySQL语句包含了操作待功能is [not] null。说明:
一个字段值是空值或者不是空值,要表示为“is null”或“is not null”;不能表示为“=null”或“ >null”。
如果写成“字段=null”或“字段<>null”,系统的运行结果都直接处理为null值,按照 false处理而不报错。
注意:
(1)使用select语句查询一个数据表。使用select语句时,首先要确定所要查询的列。“*”代表所有的列。
例:查询teaching数据库course表中的所有数据。
use teaching;
select * from course;
(2)查询表中的指定列。针对表中的多列进行查询,只要在select后面指定要查询的列名即可,多列之间用“,”分隔。
例:查询student表中的studentno、sname和phone数据。
select studentno,sname,phone from student;
(3)可以从一个或多个表中获取数据。使用select语句进行查询,需要确定所要查询的数据在哪个表中,或在哪些表中,在对多个表进行查询时,同样使用“,”对多个表进行分隔。进行多表查询,主要采用多表连接或子查询的方式,也可以通过where子句中使用连接运算来确定表之间的联系,然后根据这个条件返回查询结果。
单表查询
(1) select……from基本子句的使用
Select子句的主要功能是输出字段或表达式的值,form子句的主要功能是指定数据源。这两个子句在进行数据库表查询时,都是必选项。
A.为字段取别名:利用select语句查询数据时,输出项一般显示创建表时定义的字段名。MySQL可以为查询显示的每个输出字段或表达式取一个别名,以增加结果集的可读性。例如,可以用as关键字给字段取一个中文名。实现给select子句中的各项取别名其语法格式为:select 项的原名 as 别名
例:在student表中查询出生日期在2001年以后的学生的学号、姓名、电话和年龄。(可以通过as为列或表达式更改名称,增加可读性。)
select studentno as '学号',sname as '姓名',
phone as '手机号',year(now())-year(birthdate) as '年龄'
from student
where year(birthdate)>2001;
B.使用谓词过滤记录:如果希望一个列表没有重复值,可以利用distinct子句从结果集中除去重复的行。当使用distinct子句时,需要注意以下事项:
a.选择列表的行集中,所有值的组合决定行的唯一性。
b.数据检索包含任何唯一值组合的行,如果不指定distinct子句则将所有行返回到结果集中。
例: 在score表中查询期末成绩中有高于95的学生的学号和课程号,并按照学号排序。(不管学生有几门课的成绩高于95,只要有一门就可以显示,利用distinct子句可将重复行消除。)
select distinct studentno,courseno
from score
where final>95
order by studentno;
聚合函数查询
MySQL的常用聚合函数包括count()、sum()、avg()、max()和 min()等。其中,count()用来统计记录的条数;sum()用来计算字段的值的总和;avg()用来计算字段的值的平均值;max()用来查询字段的最大值;min()用来查询字段的最小值。利用聚合函数可以满足表中记录的聚合运算。
count()函数:count()函数对于除“*”以外的任何参数,返回所选择聚合中非null值的行的数目;对于参数“×”,返回选择聚合所有行的数目,包含null值的行。没有 where 子句count()是经过内部优化的,能够快速地返回表中所有的记录总数。
sum()函数和avg()函数:sum()函数可以求出表中某个字段取值的总和。avg()函数可以求出表中某个字段取值的平均值。
max()函数和min()函数:max()函数可以求出表中某个字段取值的最大值,min()函数可以求出表中某个字段取值的最小值。
网友评论