每周练习题2

1.有一张persons表包含如下信息:

每周练习题2

 

 

 现要选取居住地址Address以'C'或'h'开头 或以 'et' 结尾的所有数据,结果显示为: 

每周练习题2

 

 

 下列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) 正确答案:C 

2.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 排序字段 顺序)

 

上一篇:2021第十二届蓝桥杯省赛c++B组_直线


下一篇:自定义场景化热力图(python)