– 根据以下插入和查询语句创建表
create table my_student(
id number primary key,
xuehao varchar2(10),
name varchar2(20),
sex varchar2(2)
);
create sequence seq_student;
insert into my_student values(seq_student.nextval,'T14101','张三','男');
insert into my_student values(seq_student.nextval,'T14102','李四','男');
insert into my_student values(seq_student.nextval,'T14103','王五','女');
insert into my_student values(seq_student.nextval,'T14104','赵六','男');
insert into my_student values(seq_student.nextval,'T14105','小明','男');
– 增加age和height字段 number类型
– 增加值: 设置已有学生的年龄在20-30之间 身高在160-190
– orcale数据库 如何生成随机数
– 查找所有学生的所有字段
select * from my_student
– 找学生id为1,3,5的学生
select * from MY_STUDENT where id = 4 or id = 5 or id =6 ;
select * from MY_STUDENT where id in(1,3,5)
– 找学生id为4,5,6的学生 并且性别为女
select * from MY_STUDENT where (id = 4 or id = 5 or id =6) and sex = '女'
– 找身高在180到190之间的学生
select * from MY_STUDENT where height >= 180 and height <=190
select * from MY_STUDENT where height BETWEEN 180 and 190;
– 找身高不在180到190之间的学生
select * from MY_STUDENT where height < 180 or height > 190
select * from MY_STUDENT where height not BETWEEN 180 and 190;
– 根据性别分组
– 聚合函数
– sum() 求和 count() 求个数 max() 最大值 min() 最小值 avg() 平均值
– 分组的意义 分组就是为了统计的(使用聚合函数)
– 分组统计: 每种性别人数 最高身高,最矮身高,年龄平均数和总年龄(4条sql语句)
– 起别名的时候不能使用 单引号
select sex,count(*),max(height) 最高身高,min(height) 最矮身高,avg(age) 年龄平均数,sum(age) 总年龄 from MY_STUDENT group by sex;
– 根据性别分组,统计每组的总人数, 年龄大于22, 并且总人数大于2的组;
– having 条件 (如果是对统计以后的结果进行条件判断通过having字句)
select sex,count(id) "总人数" from MY_STUDENT where age > 22 group by sex count(id) > 2
– 多字段分组: 先班级,后性别
– 给表添加班级编号c_id字段,
alter table my_student add c_id number(1)
– 随机1或2 作为每一条记录的班级号
update MY_STUDENT set c_id = ABS(MOD(DBMS_RANDOM.RANDOM,2))+1
– 插入以下两条数据
insert into my_student values(seq_student.nextval,'T14101','李四','男',25,175,1);
insert into my_student values(seq_student.nextval,'T14101','张三','女',21,179,2);
select seq_student.currval from dual
– 查找所有学生的所有字段
– 按照班级和性别进行分组,显示班级 性别 人数 所有人姓名
select c_id,sex,count(*) from MY_STUDENT group by(c_id,sex)
– 提示 所有人姓名使用函数 (mysql)group_concat(name) oracle---- wmsys.wm_concat(name)
select c_id,sex,count(id),wmsys.wm_concat(name) from my_student group by c_id,sex;
– 统计每一个班级的人数
–班级编号 人数
– oracle 的分组, group by 必须是前边select的查询语句统计结果意外的所有字段;
select c_id,count(*) from MY_STUDENT GROUP BY c_id
– 查询所有班级人数大于等于4的学生人数
select c_id,count(*) from MY_STUDENT GROUP BY c_id having count(*) >= 4
– 按照年龄对所有学生由高到低进行排序
select * from MY_STUDENT order by age desc
-- 按照身高由低到高进行排序
select * from MY_STUDENT order by height;
– 多字段排序: 首先按照年龄由高到低,年龄相等身高由低到高
select * from MY_STUDENT order by age desc,height desc