SQL语句使用02------select语法

来源:互联网 发布:教师网络研修收获 编辑:程序博客网 时间:2024/06/07 07:20

这一章继续以案例的形式讲解,主要是一个select基本的语法格式

 select [all | distinct] 字段或表达式列表         [from子句]         [where子句]         [group by子句]         [having子句]         [order by子句]         [limit子句];

3.查询姓“曾”的老师的个数,名字;

//这里就开始有一些sql的函数在里面了
//这里我们可以试着去说明distinct的作用
//distinct表示去除重复元素,例如我们插入一句:

insert teacher(Tid,Tname) values(007,'曾张老师');select count(distinct(tname)) from teacher where tname like '曾%';select count(tname) from teacher where tname like '曾%';

这里写图片描述
//我们再详细的看看

select tname from teacher where tname like ‘曾%’;
select distinct(tname) from teacher where tname like ‘曾%’;

这里写图片描述
//很明显,同样的结果被排除了,这里就是distinct的作用
//因为涉及到了函数,所以这里把函数和分组大概讲解一下
//首先,Select的结构

    select [all | distinct] 字段或表达式列表            [from子句]            [where子句]            [group by子句]            [having子句]            [order by子句]            [limit子句];
  • distinct:

    之前讲了,去掉重复        1,默认是all,表示允许出现重复行——不写就是all;        2,distinct:表示不允许出现重复行
  • -

from:

    表示从哪个数据表中获取数据,也即是:设定数据源!    形式:    from  数据源;    说明:    通常,数据源就是一个表名;也可以是子查询表
    -

where:

    1,where子句,其本质含义是:对from子句中给定的“数据源”中的每一行数据,进行“条件”筛选,并依此筛选出那些符合所设定的条件的行的数据,并取出。    2,where子句类似php编程语言或js语言中的if子句,最终体现为判断的结果是true或者false!!!    //之前已经说了,详见上一章

group by子句(分组)

     形式:     group  by  字段名 【asc|desc】,字段名 【asc|desc】,....;
    说明:    1,group by子句是用于将“前面!!!”取得的数据,按某种标准(依据)——也就是字段——来进行分组的。        分组,基本上就是,按给定字段的值,相同的值,分在相同的组中,不同的值分在不同的组中。    2,asc表示分组后,按组的值的大小正序排列,desc是倒序——默认是正序,可以不写。    3,一个最重要的理解(观念):分组之后的结果,也是一行一行数据,只是每一行代表“一组”;        例如:
      select * from student group by ssex;      //按性别分组

这里写图片描述

     select * from student where sage > 100 group by ssex;            //此处为空,因为这是对前面的结果分组

这里写图片描述

            select * from student group by sage desc;            select * from student group by sage asc;            //这个排序的依据是分组的那个组,并不是把每个组里面分组,而是每个组分组            //为什么这么说呢,因为我们要涉及到另外一个关键字having(后面)

这里写图片描述

    4.  对于分组查询的结果数据(select子句部分),只能出现如下几类数据        分组依据字段;(但同样会出现其他字段,但是并不会报错,只不过无意义,因为就是第一行)        原始字段信息中的数字类型的最大值,最小值,平均值,总和值;        max(字段):获得该字段的在组中的最大值;        min(字段):获得该字段的在组中的最小值;        avg(字段):获得该字段的在组中的平均值;        sum(字段):获得该字段的在组中的总和值;        每一组中所包含的原始数据行的行数,获得方式为:count(*)        例如:        select * ,count(sage),min(sage),max(sage),avg(sage),sum(sage) from student group by ssex;        

这里写图片描述

-

having子句

    形式:        having  条件判断    说明:    1,一句话,having跟where一样,是用于对数据进行“筛选”的,但区别是:        having只用于对group by分组之后的“组信息”数据进行筛选!!!!        where只用于对from子句中所设定的“原始数据”进行筛选!!!!!        推论: 如果需要,having一定是跟在group by子句之后使用;        如果需要,where一定是跟在from子句之后使用;    2,因此,having能用的筛选依据,跟此时group by之后,select子句中可出现的“数据/字段”一样!    例如:
    select * ,count(sage),min(sage),max(sage),avg(sage),sum(sage) from student group by ssex having ssex ='男';    select * ,count(sage),min(sage),max(sage),avg(sage),sum(sage) from student group by ssex having sid >1010;

这里写图片描述

    -

order by 子句

    形式:    order  by  字段名 【asc|desc】,字段名 【asc|desc】,....    说明:    1,用于将“前面!!!”取得是数据(可能进行了筛选和分组),按给定的字段的值的大小和顺序进行排序输出;    2,asc|desc含义同前;
      select * from student where sid>1010 order by sage desc;

这里写图片描述

limit 子句

    形式:    limit  起始行号n, 要取出的行数m;    说明:    1,用于将“前面”取得的数据,按前面设定的顺序(或默认顺序),取出从哪行开始的多少行;    2,行号,都是以前面取得的“数据行”为基础,从0开始算起,跟实际数据表中字段值无关

这里写图片描述

总结:

这里写图片描述

至此SQL语句查询的常用操作已经结束了,后面主要就是案例与提醒。如果感觉还行不要忘了点赞啊!
原创粉丝点击