zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

Mysql入门技能树-查询进阶

mysql入门 查询 进阶 技能
2023-09-14 09:13:33 时间

查询进阶

别名

关于别名,以下说法中正确的是:

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子句的话,就相当于对这一组的数据去进行筛选,所以得到的结果就是符合要求的,但是千万不要这样写,不符合语法规范,而且可读性很差的
(来自SSS4362的详细解答)