✧有关查询的一些knowledge✧

✧数据检索

   数据检索是指从数据库中按照预定条件查询数据,及引用相关数据进行计算而获取所需信息的过程。

   查询数据是数据库操作中最常用、最重要的操作。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()函数可以求出表中某个字段取值的最小值。

你可能感兴趣的:(✧有关查询的一些knowledge✧)