测试数据
1 create table info2
2 (
3 id varchar2(32) primary key,
4 name varchar2(20) not null,
5 gender varchar2(20) not null,
6 clazz varchar2(20),
7 score number(11),
8 bir date
9 )
10
11 insert into info2 values(sys_guid(),'余胜军','男','s1t80',92,date'1992-01-20');
12 insert into info2 values(sys_guid(),'黄辉','男','s1t80',91,date'1986-09-01');
13 insert into info2 values(sys_guid(),'汪保国','男','s1t80',78,date'1996-01-24');
14 insert into info2 values(sys_guid(),'商宇彤','男','s1t80',98,date'1994-05-17');
15 insert into info2 values(sys_guid(),'应明珠','女','s1t81',95,date'1997-06-15');
16 insert into info2 values(sys_guid(),'廖一帆','男','s1t81',52,date'1993-09-12');
17 insert into info2 values(sys_guid(),'陈杰','男','s1t80',83,date'1993-08-08');
18 insert into info2 values(sys_guid(),'胡文鑫','女','s1t81',82,date'1991-07-05');
19 insert into info2 values(sys_guid(),'刘坤','男','s1t80',53,date'1996-04-01');
20 insert into info2 values(sys_guid(),'蒋文哲','男','s1t81',64,date'1986-05-21');
21 insert into info2 values(sys_guid(),'冷泽华','男','s1t81',72,date'1993-09-27');
22 insert into info2 values(sys_guid(),'曹敏','女','s1t81',66,date'1989-03-15');
23 insert into info2 values(sys_guid(),'陈秦定','女','s1t80',89,date'1995-05-11');
24 insert into info2 values(sys_guid(),'赵娇','女','s1t80',73,date'1993-05-03');
25 insert into info2 values(sys_guid(),'柳星','男','s1t82',77,date'1998-06-12');
26 insert into info2 values(sys_guid(),'胡月','女','s1t82',87,date'2000-02-09');
27 insert into info2 values(sys_guid(),'郑克','男','s1t82',68,date'1983-11-29');
28 insert into info2 values(sys_guid(),'柳月','女','s1t83',97,date'2000-03-31');
29 insert into info2 values(sys_guid(),'吴敏','男','s1t83',78,date'1983-11-30');
30 insert into info2 values(sys_guid(),'周静','男','s1t83',88,date'1981-12-30');
31 insert into info2 values(sys_guid(),'大柳','男','s1t80',78,date'1981-10-29');
32 insert into info2 values(sys_guid(),'二柳','女','s1t80',94,date'1997-03-21');
33 insert into info2 values(sys_guid(),'bruceLee','男','s1t80',88,date'1981-12-30');
34 insert into info2 values(sys_guid(),'BruceChen','男','s1t80',93,date'1984-12-30');
add_months 将一个日期加上一指定的月份数
select add_months(date'2022-03-17',3) from dual;
select add_months(date'2022-03-17',36) from dual;
select name 姓名,bir 出生日期,add_months(bir,216) 成年时间 from info2;
months_between 返回两个日期之间的月份数 ===》 months_between(较近的日期,较远的日期);
1 select months_between(date'2022-09-10',date'2022-01-10') from dual;
2 select name,bir 生日,floor(months_between(sysdate,bir)/12) 年龄 from info2;
next_day(date,char) 指定时间的下一个星期几(由char指定) 所在的日期;1代表星期日,2代表星期一....
1 select next_day(sysdate,1) from dual;
2 select next_day(sysdate,'wed') from dual;
last_day 指定日期对应月份的最后一天
select last_day(date'2001-02-01') from dual;
select last_day(sysdate) from dual;
trunc(sysdate, 'mm') 返回当月的第1天
1 select trunc(sysdate, 'mm') from dual
trunc(sysdate,'yyyy') 返回当年的第1天 2022年1月1日
select trunc(sysdate,'yyyy') from dual;
求当前日期的上个月月初和上个月月末日期
select trunc(add_months(sysdate,-1),'mm') , last_day(add_months(sysdate,-1)) from dual;
extract 获得一个日期中指定部分的值
extract(year from date) 获得date中的年份
extract(month from date) 获得date中的月份
extract(day from date) 获得date中的日期
select extract(month from date'2001-09-10') from dual;
select name,bir,extract(year from bir) 出生年份 from info2;
1.查询所有学生信息,显示的内容包含:编号,姓名,班级,性别,出生日期,年龄,成绩
select id 编号,name 姓名,clazz 班级,gender 性别,bir 出生日期,floor(months_between(sysdate,bir)/12)||'岁' 年龄 from info2;
2.查询每个班的学生人数各有几人
select clazz,count(*) from info2 group by clazz;
select clazz 班级名称,count(*) 人数 from info2 group by clazz;
3.查询每个班考试合格的人数
select clazz,count(*) from info2 where score >= 60 group by clazz;
4.查询每个班考试合格的人数,并且按照每个班考试合格人数降序序排列
select clazz,count(*) from info2 where score >= 60 group by clazz order by count(*) desc;
5.查询平均分在75分以上的班级信息,并且升序排序
select clazz,count(*) from info2 group by clazz having avg(score) >= 75 order by count(*) asc;
6.查询1994,1997,1986这几个年份中出生的学生信息
select * from info2 where extract(year from bir) in(1994,1997,1986);
7.查询22岁---25岁区间的学生信息
select * from info2 where floor(months_between(sysdate,bir)/12) between 22 and 25;
8.查询不在22岁-25岁这个区间的数据
select * from info2 where floor(months_between(sysdate,bir)/12) not between 22 and 25;
9.查询姓名三个字的,并且考试合格20岁以上的男生信息
select * from info2 where name like '___' and score >= 60 and gender = '男' and floor(months_between(sysdate,bir)/12) >= 20;
10.查询不是1994,1997,1986这几个年份出生的学生信息
select * from info2 where extract(year from bir) not in(1994,1997,1986);
11.查询20岁上的学生,每个班级考试合格的男女生人数各有多少人
select clazz,gender,count(*) from info2 where floor(months_between(sysdate,bir)/12) >= 20 and score >= 60 group by clazz,gender;
12.查询年龄最大的前5名学员信息
select * from (select * from info2 order by bir asc) b where rownum <= 5;
13.查询生日为每一个月最后一天出生的人员信息,并且按年龄从大到小排列
select * from info2 where bir=last_day(bir) order by bir asc;