前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【JavaWeb】62:单表查询,以及数据库总结

【JavaWeb】62:单表查询,以及数据库总结

作者头像
刘小爱
发布2020-07-30 16:11:09
发布2020-07-30 16:11:09
1.3K0
举报
文章被收录于专栏:零基础自学Java零基础自学Java

使用了数据库可视化工具Navicat,感觉真香。

比在DOS窗口中操作方便多了,那个黑乎乎的窗口真心不习惯,并且也没有提示。

今天详细地学习下数据记录的查询,同时最后对这几天的知识点做一个总结。

一、基本查询

select,选择选取的意思,在数据库之中可以理解成查询。

①查询所有数据

select * from student;

*即代表了所有数据的意思,格式为:

select * from+表名

②查询指定列的信息

select name,gender from student;

查询表中name,gender这两列的所有数据,格式为:select+列名,列名,列名+from+表名

列名之间用逗号隔开。

③条件查询

select * from student where name="比企谷八幡";

查询表中name为“比企谷八幡”的所有数据,其中也可以选择部分列的数据,格式不再赘述。

总之where后面填写判断条件。

其中还有运算符相关的查询操作:

①查询成绩不及格的同学

select * from student where score<60;

即score<60的所有数据。

②查询成绩不等于90的同学

不等于在SQL中有三种表示方式:

  • not score=90;
  • score!=90;
  • score<>90;

③查询成绩在80和90之间的数据

也就是80<=score<=90,在SQL中有两种方式:

  • between 80 and 90;
  • score>=80 and score<=90;

and,即并且的意思。

④查询成绩为88,95,100的同学

在SQL中有两种方式:

  • score in(88,95,100);
  • score=88 or score=95 or score=100;

or,即或者的意思。上述均为条件查询,也就是用where来说明判断条件,只不过条件中设计到了运算。

二、模糊查询、滤重和别名

除了上述的基本查询之外,还有模糊查询:

①模糊查询

like,像的意思,可以用来模糊查询:

  • name like ‘刘%’;其中%表示1个或多个;
  • name like '刘_';其中_表示1个。

其中第一个只要以刘开头即可以,第二个以刘开头的两个字。

②查询成绩不为null的学生

score is not null;

这很好理解,从字面意思就能看出来。

③查询成绩为null的学生

score is null;

①过滤掉重复的数据

distinct,清楚的、不同的意思,在这里可以理解成过滤,格式如下:

select distinct+列名+from+表名

其中列名可以有多个。

②给列名起别名

可以给列名起一个别名,格式如下:

select 列名 as 别名+from+表名

就算取别名了,数据库里的列名是没有改变的。

它就是一个渲染效果,所以as后面接什么都可以,字符串也不用加引号。

其中as也可以省略,但最好不省略。

③列运算

这个也好理解,直接在查询列名上+10即可。

其中有一行数据score=null,在SQL中:null与任何数相加都为null。(有点类似于Java中的字符串)

④关于null的处理

ifnull(列名,默认值) ,如果列名为空,给它一个默认值,图中默认值为0,这样就能参与运算了。

三、排序查询及聚合函数

1排序查询

order,订单、排序的意思,在数据库中order就是排序的意思,和前面我们学的sort是一样的。

①根据score排序查询

select * from+表名+order by+列名+desc

  • desc,在这里是降序的意思。
  • asc,即为升序。

②根据指定条件排序

现在只对男生排序,故加一个where条件判断。

注意:where是紧接着from+表名后面的。

其中排序默认是升序,所以可以省略不写。

②根据年龄、分数组合排序

多重排序,先根据前面的条件排序,再根据后面的条件排序。

2聚合函数

SQL语言中定义了部分的函数,可以对查询结果进行操作,也就是聚合函数。

①统计数量

count,数数的意思,即统计表示数据数量。

  • count(*):*代表所有,即查询所有数据,结果为5。
  • count(score):score这一列因为有一行数据为null,所以不计算在内,

②统计班上的总分

sum,求和的意思。

  • sum(score):分数这一列所有的数据求和。
  • sum(score+age):(分数+年龄这两列)所有的数据求和。

③统计班上的平均分

avg,求平均数的意思,很好理解。

  • avg(score):分数这一列求平均值。
  • avg(score+age):分数+年龄这两列求平均值。
  • sum(score)/count(*):总分除以总人数求平均值。

这两种的区别在于第一种如果数据为null,不加入运算,第二种将nul的数据也加入运算了。

④保留小数点数

round(avg(score),2);2,即表示保留小数点数为2位,可自行设点想要保留的小数点数。

此外,还有两个聚合函数:

  • max(score):求分数这列的最大值。
  • min(score):求分数这列的最小值。

用法和上述一样,就不再赘述了。

再次强调

  • null是不参与运算的。
  • 可以使用ifnull(列名,默认值)给null设定一个默认值。
四、分组查询及查询语句执行顺序

1分组查询

group,分组的意思,关键单词为group by。

①分男女组查询平均分

根据性别gender分组查询。

格式为:select+列名+from+表名+group by+列名

②根据特定条件分组查询平均分

前面的学习也知道了,where后面专门是接查询条件的,但是在分组查询中一般用having代替,其放在group by后面。

2查询语句执行顺序

用一个例子来说明执行顺序,如下图:

①from+表名

这是第1步,表中的所有数据。

②where+指定条件

这是第2步,查询出指定条件的数据。

其中起别名:as+别名

这是第2.5步,介于第1步和第2步之间。

所以where后不能接别名,因为别名都没执行。

③group by+列名

这是第3步,按照指定列名分组。

其中聚合函数:avg(列名)

这是第3.5步,介于第3步和第4步之间。

所以分组不能接聚合函数。

④having+条件

这是第4步,所以having后的查询条件,既可以有别名,也可以有聚合函数。

而where就不行,因为where执行的太早了。

⑤select+查询语句

这是第5步,查询出对应的数据,也就是结果集。

⑥order by+列名+desc|asc

查询语句是最后执行的,所以也可以接别名。

面试题:where 和 having 的区别

  • having通常与group by结合使用。
  • where是在分组之前进行过滤的,having 是在分组之后进行过滤的。
  • having可以接聚合函数和别名,where都不可以,也就是说having查询条件比where广。

查询时,如非必要,用where的效率更高。

为什么?

where先执行,先将数据筛选之后会减少计算量。

后续再进行其他条件判断,可以提高查询效率。

最后

对这几天知识点做一个总结:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 刘小爱 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、基本查询
  • 二、模糊查询、滤重和别名
  • 三、排序查询及聚合函数
  • 四、分组查询及查询语句执行顺序
  • 最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档