要注意一件事 , 前面指定的列的别名 , 不能用于其他指定列或表达式中 , 比如像这样就会报错 。
mysql> select name, chinese+math+english+computer as total,total/4 as average from exam_score;ERROR 1054 (42S22): Unknown column 'total' in 'field list'2.2.5去重查询MySQL中支持对列的查询 , 比如上面的英语成绩 , 美羊羊和暖羊羊都是98分 , 只对英语这一列成绩查询时可以通过关键字distinct进行去重查询 。
mysql> select distinct english from exam_score;+---------+| english |+---------+|98.0 ||24.0 ||88.0 ||74.5 ||12.0 ||78.0 ||9.0 |+---------+7 rows in set (0.00 sec)看 , 结果少了一个98 , 达到了去重的效果 。
2.2.6排序查询可以针对查询结果对数据进行排序 , 得到临时表输出 , 语法格式:
select 列名,... from 表名 order by 列名(需排序)asc(或者desc);最后的asc表示升序 , 也是默认排序方式 , desc是降序排序 。
例如 , 将上面的成绩按照总分进行升序和降序排名 。
-- 升序mysql> select name, chinese+math+english+computer as total,(chinese+math+english+computer)/4 as average from exam_score order by total asc;+-----------+-------+----------+| name| total | average|+-----------+-------+----------+| 黑大帅|50.0 | 12.50000 || 懒羊羊| 181.5 | 45.37500 || 灰太狼| 234.5 | 58.62500 || 沸羊羊| 305.5 | 76.37500 || 小灰灰| 329.0 | 82.25000 || 暖羊羊| 355.0 | 88.75000 || 美羊羊| 370.0 | 92.50000 || 喜羊羊| 378.0 | 94.50000 |+-----------+-------+----------+8 rows in set (0.00 sec)-- 降序mysql> select name, chinese+math+english+computer as total,(chinese+math+english+computer)/4 as average from exam_score order by total desc;+-----------+-------+----------+| name| total | average|+-----------+-------+----------+| 喜羊羊| 378.0 | 94.50000 || 美羊羊| 370.0 | 92.50000 || 暖羊羊| 355.0 | 88.75000 || 小灰灰| 329.0 | 82.25000 || 沸羊羊| 305.5 | 76.37500 || 灰太狼| 234.5 | 58.62500 || 懒羊羊| 181.5 | 45.37500 || 黑大帅|50.0 | 12.50000 |+-----------+-------+----------+8 rows in set (0.00 sec)如果asc或者desc省略 , 则按照升序排列 。
mysql> select name, chinese+math+english+computer as total,(chinese+math+english+computer)/4 as average from exam_score order by total;+-----------+-------+----------+| name| total | average|+-----------+-------+----------+| 黑大帅|50.0 | 12.50000 || 懒羊羊| 181.5 | 45.37500 || 灰太狼| 234.5 | 58.62500 || 沸羊羊| 305.5 | 76.37500 || 小灰灰| 329.0 | 82.25000 || 暖羊羊| 355.0 | 88.75000 || 美羊羊| 370.0 | 92.50000 || 喜羊羊| 378.0 | 94.50000 |+-----------+-------+----------+8 rows in set (0.00 sec)如果出现null , 则默认是最小的 。
排序时 , 可以针对多列排序 , 这样排序是有优先级的 , 优先级按照从左至右 , 比如先针对英语成绩排序 , 再针对数学成绩排序 , 意思是先比较英语 , 当英语成绩相同的情况下再比较数学 。
mysql> select * from exam_score order by english desc, math desc;+------+-----------+---------+------+---------+----------+| id| name| chinese | math | english | computer |+------+-----------+---------+------+---------+----------+|5 | 暖羊羊|90.0 | 91.0 |98.0 |76.0 ||1 | 美羊羊|99.5 | 90.5 |98.0 |82.0 ||3 | 喜羊羊|92.0 | 98.0 |88.0 |100.0 ||7 | 小灰灰|81.0 | 82.0 |78.0 |88.0 ||4 | 沸羊羊|78.0 | 72.0 |74.5 |81.0 ||2 | 懒羊羊|58.5 | 32.5 |24.0 |66.5 ||6 | 灰太狼|33.0 | 91.0 |12.0 |98.5 ||8 | 黑大帅|10.0 | 11.0 |9.0 |20.0 |+------+-----------+---------+------+---------+----------+8 rows in set (0.00 sec)2.2.7条件查询所谓条件查询 , 就是给定一个条件 , 如果满足就那个查询出来 , 在MySQL中使用关键字where+条件来设定条件 , 条件查询语法格式如下:
select 列名, ... from 表名 where 条件;这个所谓的条件就相当于JAVA中的boolean表达式 , 首先来认识一下MySQL里面的运算符 。
比较大小:>, <, <=, >=,=(判断是否相等 , 但是不能比较NULL), <=>(判断是否相等 , 能比较NULL) 。
划定区间:between a and b;表示闭区间[a, b] 。
判断是否在指定的几个值之中存在:in(a,b,c,...);判定结果是否在a,b,c,…之中 。
判断是否为NULL:is null 。
判断是否不为NULL:is not null 。
模糊匹配:like , 需要配合通配符%或者-来使用 。
通配符:%表示任意个数量的字符 , _表示任意的一个字符 。
推荐阅读
- 从RDS算不算国产数据库谈起
- SpringBoot WebFlux整合R2DBC实现数据库反应式编程
- mirna(mirna数据库)
- js调用数据库数据 js数据库信息交互
- mysql数据库建表的完整步骤 sqlserver导入excel表格命令
- 更好的MySQL客户端推荐 mysql客户端哪个好用
- 建立数据库的步骤 mysql数据库系统需求分析
- 阿里巴巴|阿里的分布式数据库OceanBase:帮公司省了几百个亿
- 数据库|领航国产分布式数据库!OceanBase3.2版发布:数据分析性能提升6倍
- 微软|微软Azure数据库出现漏洞:波及多家国际品牌 自家服务也难逃
