您的位置:首页 > 数据库 > Oracle

oracle基础(sql基础)

2015-06-11 15:43 453 查看
1、建表

--学生表

create table student (xh number(3),

                                  xm varchar2(20),

                                  sex  char(2)

);

2、修改表

--添加一个字段

SQL>alter table student add (classId number(5));

--修改一个字段的长度

SQL>alter table student
modify (xm varchar(20));

--修改字段的类型或是名字(表不能有数据),不建议这么做

SQL>alter table student
modify (xm char(20));

--删除一个字段             不建议做(删除之后,顺序就变了,加没问题,因为是加在后面)

SQL>alter table
student drop column sal;

--修改表名

SQL>rename student
to stu;

--删除表

SQL>drop table
student;

3、添加数据

--所有字段都插入数据

insert into student
values ('001' , '张三' , ‘男’);

insert into student () values ();

默认的日期格式:10-2月-1992;

修改日期格式:

SQL>alter session set NLS_DATE_FORMAT = 'yyyy-mm--dd';

4、修改数据

SQL>update student
set sex='女' where xh='001';

5、删除数据

SQL>delete from
student;

delete删除所有记录,表结构还在,数据可恢复

SQL>truncate table student;

truncate删除表中的所有记录,表结构还在,数据不可恢复,速度快

SQL>drop
table student;

drop删除表的结构和数据

--创建保存点

SQL>savepoint a;

--恢复到保存点

SQL>rollback to a;

查询语句

--查看表结构

desc emp;

--查看所有列

select * from emp;

set time on;打开显示操作时间的开关,在下面显示查询时间

--使用算术表达是

nvl (comm,0)如果comm为null,用0 代替;

--连接字符串||

select ename||' is a '||job from emp;

--使用like模糊查询

%:表示任意0到多个字符, _:表示任意单个字符

--查询首字母为S的员工

select * from emp where ename like'S%';

--查询第三个字符为O的员工

select * from emp where ename like'__O%';

--排序 order by asc(desc)

--数据分组    max   min   avg   sum   count

--group by 和 having 子句

group by 用于对查询的结果分组统计

having 子句用于限制分组显示结果

(如果你要分组查询的话,分组的字段deptno一定要出现在查询的列表里面,否则会报错。)

 --对数据分组的总结n 

1 分组函数只能出现在选择列表、having、order by子句中(不能出现在where中) 

2 如果在select语句中同时包含有group by, having, order by 那么它们的顺序是group by, having, order by 

3 在选择列中如果有列、表达式和分组函数,那么这些列和表达式必须有一个出现在group by 子句中,否则就会出错。

分页查询

按雇员的id号升序取出 

oracle的分页一共有三种方式 

1.根据rowid来分 

  select * from t_xiaoxi where rowid in (select rid from (select rownum rn, rid from(select rowid rid, cid from t_xiaoxi order by cid desc) where rownum<10000) where rn>9980) order by cid desc; 

执行时间0.03秒 

2.按分析函数来分 

  select * from (select t.*, row_number() over(order by cid desc) rk from t_xiaoxi t) where rk<10000 and rk>9980; 

执行时间1.01秒 

3.按rownum来分 

  select * from (select t.*,rownum rn from(select * from t_xiaoxi order by cid desc)t where rownum<10000) where rn>9980; 

执行时间0.1秒

==合并查询

集合操作符号union,union all,intersect,minus

union:并集,自动去重
union all:并集,不去重

intersect:交集

minus:差集

SQL
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle基础