每周练习题2
作者:互联网
1.有一张persons表包含如下信息:
现要选取居住地址Address以'C'或'h'开头 或以 'et' 结尾的所有数据,结果显示为:
下列MySQL查询语句正确的是:
SELECT * FROM persons WHERE Address REGEXP '[^Ch]|et$';
SELECT * FROM persons WHERE Address REGEXP '^[Ch]et$';
SELECT * FROM persons WHERE Address REGEXP '^[Ch]|et$';
SELECT * FROM persons WHERE Address REGEXP '^[Ch]|[et]$';
^: 匹配输入字符串的开始位置 $: 匹配输入字符串的结束位置 []: 匹配中括号里任意1个 |: 并集,就是或(or) 正确答案:C2.SELECT COALESCE(NULL,fat,2)AS name1,COALESCE(pig,test,test)AS name2 FROM NAMETABLE;以上SQL执行后name1和name2分别为多少
NULL,pig
2,test
fat,pig
null,test
COALESCE用法顺口溜,帮助大家理解: COALESCE,查空值, 按顺序不能乱; 核心规则要记牢; 不为空为自己; 为空就看下1位; 一直看下去; 除非只剩后1位; 为空就为它。3. Mysql中表student_table(id,name,birth,sex),插入如下记录:
('1001' , '' , '2000-01-01' , '男');('1002' , null , '2000-12-21' , '男');
('1003' , NULL , '2000-05-20' , '男');
('1004' , '张三' , '2000-08-06' , '男');
('1005' , NULL , '2001-12-01' , '女');
('1006' , '张三' , '2001-12-02' , '女'); 执行
select t2.name from (select * from student_table where sex = '女')t1 right join (select * from student_table where sex = '男')t2 on t1.name = t2.name ;的结果行数是()? 做题思路: 看结构:两个子查询表右连接 定子查询表的行数: 子查询表 t1 (女的) :2行 子查询表 t2 (男的) :4行 看连接桥梁: 两个子查询的人名一样
计算连接后行数:右连接,以t2(男的)为主,t2的名字在t1中没有重复的,那么答案就是t2本来的行数4.
4.写一段SQL,已知衬衫表SHIRTABLE,请你实现通过窗口函数实现,根据不同的衬衫种类shirt_type,按照销售单价shirt_price从低到高的顺序创建排序表()
SELECT shirt_name, shirt_type, shirt_price, RANK() OVER (PARTITION BY shirt _type ORDER BY shirt_price) AS ranking FROM SHIRTABLE
SELECT shirt _name, shirt_type, shirt _price, PARTITION BY shirt _type ORDER BY shirt _price AS ranking FROM SHIRTABLE
SELECT shirt _name, shirt_type, shirt _price, RANK (PARTITION BY shirt _type ORDER BY shirt _price) AS ranking FROM SHIRTABLE
SELECT shirt _name, shirt_type, shirt _price, RANK() OVER (PARTITION BY shirt_type) AS ranking FROM SHIRTABLE参考分析: 窗口函数:over()窗口函数的语法结构 及常与over()一起使用的分析函数 1、over()窗口函数的语法结构
2、常与over()一起使用的分析函数
1、over()窗口函数的语法结构
over()函数中包括三个函数:分区partition by 列名、排序order by 列名、指定窗口范围rows between 开始位置 and 结束位置(可用\可以不用) 若over()函数中不使用这三个函数,窗口大小是针对查询产生的所有数据,如果指定了分区,窗口大小是针对每个分区的数据。partition by
partition by可理解为group by 分组。over(partition by 列名)搭配分析函数时,分析函数按照每一组每一组的数据进行计算的。
B、rows between 开始位置 and 结束位置
是指定窗口范围,比如第一行到当前行。而这个范围是随着数据变化的。over(rows between 开始位置 and 结束位置)搭配分析函数时,分析函数按照这个范围进行计算的。
2、常与over()一起使用的分析函数:
2.1、聚合类
avg()、sum()、max()、min()
2.1、排名类
rank() 按照值排序时产生一个自增编号,值相等时会重复,会产生空位(如:1、3、3、6、9)dense_rank() 按照值排序时产生一个自增编号,值相等时会重复,不会产生空位(如:1、2、2、3、3、4)
row_number() 按照值排序时产生一个自增编号,不会重复(如:1、2、3、4、5、6)
Rank()分析函数: (1)连续或不连续:dense_rank,rank (2)分区或不分区:使用partition,不使用partition 语法:rank() over(partition by 分区字段 order by 排序字段 顺序)
标签:练习题,shirt,每周,over,name,type,SELECT,函数 来源: https://www.cnblogs.com/javaxubo/p/15855542.html