文章目录
- 前言
- 查询进阶
- 别名
- CASE
- Distinct
- Between
前言
Mysql入门技能树 |
Mysql入门技能树 |
查询进阶
别名
关于别名,以下说法中正确的是:
1.查询集(表或子查询)可以指定别名
2.查询集的列可以指定别名
3.别名只能用合法的变量名,即字母开头,只由英文数字、字母和下划线组成
4.可以用双引号或反引号将别名包围起来
答案是1,2,4
1.给表指定别名u1
select * from dwd_recomend_result u1
给子查询指定别名u1
select * from (select username from dwd_recomend_result) u1
2.给查询集的列指定别名u1
select username u1 from dwd_recomend_result
3.别名也可以是中文(所以题目中第3个说法是错的)
select username 用户名 from dwd_recomend_result
4.可以用双引号或反引号将别名包围起来
select username "用户名" from dwd_recomend_result
select username `用户名` from dwd_recomend_result
CASE
Goods 表结构如下
create table goods(
id int primary key auto_increment,
category_id int,
category varchar(64),
name varchar(256),
price decimal(12, 4),
stock int,
upper_time timestamp
)
Joe 想要做一个报表,只需要显示商品名和价格分级,其中不足10元的是 cheap, 超过1000的是expensive,其它的是 normal,这个查询应该怎么写?
答案是:B
CASE WHEN [Boolean_expression] THEN [result1]…ELSE [default] END
判断Boolean_expression表达式,如果满足,返回then后边的结果
Distinct
Joe 想统计 goods 表中的商品有多少种不同的价格,他应该如何写这条查询?
答案是:A
A正确,返回数据表中不重复的的数据个数,不统计值为null的字段
B统计的是商品价格不为null的条数
C语法错误
D是对商品价格不为null的条数值去重,跟B效果一样,本来count(price)后就一条记录
延伸知识点:
Between
Joe 要查询 goods 表中价格在 1000 到 2000 之间(包含1000和2000)的数据,以下查询中错误的是:
答案是:D
A正确,考察between的用法,between是包括左边界值和右边界值的;
B正确,考察and的用法,前后条件都满足;
C正确,考察not的用法,对后面条件进行取反;
D错误,mysql在没有group by指定分组时默认是以整个表为一组,如果单独使用having子句的话,就相当于对这一组的数据去进行筛选,所以得到的结果就是符合要求的,但是千万不要这样写,不符合语法规范,而且可读性很差的