create table a_stu(
sno number primary key,
name varchar2(20) not null,
sex number(1,0) default 1 not null,
birthday date,
score number,
grade_id number
);
–DML:数据操纵语言
–INSERT
–语法:INSERT INTO [(field1,field2…field_list)] VALEUS(value1,value2…value_list)
insert into a_stu values(1,’张三’,1,to_date(‘1995-01-01’,’yyyy-MM-dd’));–所有字段的值都要插入
insert into a_stu(sno,name) values(1,’张三’);–插入指定字段:必填项(但是没有设置sex为not null)
insert into a_stu(sno,name) values(1,’张三’);–插入指定字段:必填项(设置sex为not null且default 1)
insert into a_stu(sno,name,sex) values(1,’张三’,1);–插入指定字段:必填项(设置sex为not null且default 1)
–特殊的
–将查询到的数据插入到a_stu中
insert into a_stu select * from a_stu;
–UPDATE
–语法:UPDATE [from] SET filed1=value1,field2=value2…filedN=valueN [WHERE condition]
–更新指定学号的性别为0
update a_stu set sex=0 where sno=1;
–DELETE
–语法:DELETE [FROM] [WHERE condition]
–删除指定学号的学生
delete a_stu where sno=1;
–SELECT
/*
语法:SELECT <*|field1 [[as] alias1][,field2 [as alias2] …field_list as aliasList] >
FROM [as alias][WHERE condition]
[GROUP BY field1,field2…fieldList [HAVING condition]][ORDER BY field1 [asc/desc],field2 [asc/desc]…field_list]
*/
–查询指定学号的学生
select * from a_stu where sno=1;
–查询所有学生
select * from a_stu;
–查询显示学号,姓名的学生
select sno,name from a_stu;
–查询显示中文名:学号、姓名
select sno 学号,name 姓名 from a_stu;
–查询显示中文名:”学 号”、”姓 名”
select sno “学 号”,name 姓名 from a_stu;
–查询指定姓名的学生
select * from a_stu where name=’张三’;
–按学生生日排序,默认升序(asc:升序/desc:降序)
select * from a_stu order by birthday;
–查询班级中男女的统一总人数
–当使用group by之后:在select 后的查询字段只能是group by的表达式和聚合函数
select sex,count(*),name from a_stu group by sex;–错:name不是group by的表达式,也不是聚合函数
select sex,count(*) from a_stu group by sex;–对
–聚合函数(统计函数)
–COUNT(field|*):统计总记录数,过滤掉null
–MAX(field):获得指定字段的最大值
–MIN(field):获得指定字段的最小值
–SUM(field):求和
–AVG(field):求平均值
–查询班级的最高成绩、最低成绩
select max(score) 最高成绩,min(score) 最低成绩,sum(score) 总成绩,avg(score) 平均成绩,count(*) 总人数 fro a_stu;–本班的最高成绩、最低成绩
select grade_id,max(score) 最高成绩,min(score) 最低成绩 from a_stu group by grade_id;–不同年级的最高成绩、最低成绩
–创建序列
create sequence seq_emp_empno;
–nextval:用于获得下一个计数器的值
–currval:用于获得当前计数器的值
select seq_emp_empno.nextval from dual;
–day0831:
–分页:
–mysql: limit
–oracle:rownum伪列
–伪列:在表结构中不存在的列
–rowid伪列:用于唯一标识一行记录
–rownum伪列:行号
select * from emp;–看不到行号
–select *,rownum from emp;–报错
select e.*,rownum from emp e;–正确的
–rownum:行号是从1开始的,也就是有了1才会有2
select e.*,rownum from emp e where rownum=2;–获取不到数据
–分页
–每页显示2条,显示第2页的数据
–pageIndex:第几页(当前页码)
–pageSize:每页显示的记录数
–startRow:(pageIndex-1)*pageSize==>(2-1)2==>2
–endRow:pageIndex*pageSize==>2*2=4
–select * from emp where rownum>startRow and rownum<=endRow
/*
select * from(
select e.*,rownum from emp e where rownum<=endRow
)tmp
where tmp.rownum>startRow
*/
select e.*,rownum from emp e;
select * from (
select e.*,rownum rn from emp e where rownum<=4
) tmp
where tmp.rn>2;