//创建用户 :
create user c##名字 identified by 密码 ;
//命名规则 :
1 名字必须以字母开头,
2 长度不能超过30个字符(60字节),
3 不能使用oracle的保留字<
4 只能使用a-z,A-Z, 0-9,$,#,_,等...
//切换当前用户 :
connect 用户名/密码@网络服务器(orcl);
//oracle数据类型 :
number : 整型值 插入值的时候 直接 (22,33,4,45,...就行)
varchar2 : 字符型 插入值的时候 '必须用单引号括起来';
number :
number(5,2);//一共5位数字,其中有两位是小数,范围是(-10^38 ~ 10^38);
number(5);//就是规定有五位数字,没有小数 默认是number(5,0);
char :
//查询快,但是浪费空间
char:定长,2000字符(4000字节),字符串char(5);//可以设置5可 但是内容必须是 '内容',用单引号括起来
varchar2 :
varchar2:变长,4000字符(8000字节);
varchar2(20 byte);//规定能写20个字符 但是只能是byte类型(字节型),但是内容必须是 '内容',用单引号括起来
clob :
clob(characterlarge object);//字符型大对象,最大4G
date :
date;//时间格式,values()赋值的时候,可以用这个更改格式 : to_date('20-2-81','DD-MON-RR');
blob :
blob://二进制数据电影,图片,音乐,4G不会放到数据库里面,文件服务器
//创建表单 :
在当前用户下创建表单
create table 表名字(id number(5,2), name varchar2(20 byte));//创建一个表单,里面有两列,第一列是id 是数值型 切共有5位数字,并有两位是小数,三位是整数 ,第二列是name 字符型,能输入20个字节,必须是字节
//更改表名字 :
rename 旧表名 to 新表名;
zeng :
//增 :
//创建用户 :
create user c##名字 identified by 密码 ;
//命名规则 :
1 名字必须以字母开头,
2 长度不能超过30个字符(60字节),
3 不能使用oracle的保留字<
4 只能使用a-z,A-Z, 0-9,$,#,_,等...
//为用户授权 : 权限
grant connect,resource,unlimited tablespace to c##名字 container=all;//所有权限
//grant 权限 to c##用户名:
connect:链接(登陆) 权限
resource:数据/源 权限 (对数据的 增 删 改 查 )
unlimited tablespace : 表空间 权限
// grant 权限 传递
grant 权限 to 用户名 with grant option;//它也就有给别人权力的权力,但是权力不能超过他自己(本身)
//设置用户使用的表空间 :
alter user 用户名 default tablespace users;
alter user 用户名 temporary tablespace temp;//临时表空间
//创建表单 :
create table 表名(属性 number(5,0)/*数据类型五位数,且没有小数*/ , 属性 varchar2(4 byte)/*数据类型,字符型,只能输入4位,必须是字节格式*/)
//往表里面添加行(内容) :
insert into 用户名.表名(属性1,属性2.../*可选的*/)values(值,值...);
//往表单里添加一个字段 : (添加一个列/属性)
alter table 表名 add ("名字" number(3)/*类型,规定内容格式*/);
//多个插入 :
insert into 新表名(字段名) select 列 from 表名 where 行限定条件(不是所有数据,年龄段,某个部门)//
如 : insert into emp(id) select age from emp where id = 33;//把emp表中 id列值为33,对应的那些age的值,添加到emp表的id列中
//备份表 :
create table 表名 as select * from 表名;
//模拟中的数据复制 :
insert into 表1(属性1,属性2...) select * from 表2;//表1后面属性个数是多少,表2就必须是多少,而且数据类型也必须完全相同 , 然后把表2里面列的数据类型的值,添加到和表1中对应列的数据类型相同的那一列的后面(追加行 )
1 insert into emp (id/*我这个id是number(5)类型,并且只能写5个数字*/) select * from emp2;//表2 里面必须有一个number(5)类型的列,并且也只能写5个数字
2 insert into emp (id/*我这个id是number类型*/) select hao from emp2;//hao这个列 必须和id列的数据类型完全相同,然后把hao那一列的数据,在id哪一列的后面,追加
shan :
//删 :
//删除用户和表 :
//删除用户 只能用sys用户才能删除,因为只有sys用户有删除别的用户的权利
drop user 用户名 cascade;//用户和表一起删除
//删除表 :
drop table 用户名.表名;//删除表
//删除权限 :
revoke 操作名(权限) on 表名 from 用户名;
//删除一个表的字段 : (删除一个列/属性)
alter table 表名 drop column 列名; //强烈建议不要对成熟的系统这么做
//删除行 : 不定条数
delete from 表名 where 行限定条件;
限定条件 如 : name那一列为Kay的 全部删除
delete from emp where name = 'Kay';
//删除表的数据
truncate table 表名; //相当于删除表和数据然后重建表.
gai :
//改 :
//更改表名字 :
rename 旧表名 to 新表名;
//切换当前用户 :
connect 用户名/密码@网络服务器(orcl);
//更改字段(列)的类型或者名字 :
alter table 表名 modify (属性 类型);
如 : alter table student modify (sex number(1));
//更改列上的值 :
update 表名 set 列名=列值改变量(+-*/), 字段2,字段3, where 行限定条件;
如 : update 表名 set 列名='值' where id='B0002'(限定条件,id为B0002的 都会把前面指定的属性的值更改);
1 update 表名 set (job,sal,comm/*列名*/)= (select job,sal,comm from/*查看三个列*/ emp where ename='clock'/*ename为'clock'*/) where ename ="scott"/*enamel为'Scott'的*/;//
1 --> update 表名 set (job,sal,comm)= (select job,sal,comm from emp where ename='clock') where ename ="scott";//先查ename为'clock'的(区分大小写),获取job,sal,comm,对应的值,再把这些值更改(赋值)到 ename为'scott' 对应的job,sal,comm的列值中
cha :
//查 :
//查看当前登陆用户 :
show user;
//查看当前用户下所有的表单 :
select * from user_tables;
//查看你能管理的所有用户 :
select * from all_users;
//查看数据库里面的所有用户 :
select * from dba_users;//前提是 你登陆的是sys或system号(用户);
//查看数据库里面的所有表
select 表名 from dba_tables;//数据库所有表,包括系统表,前提是 你登陆的是sys或system号(用户);
//查看表头 :
desc 表名;//查看表头(也就是列)
where_and :
//筛选数据,多选, 查询空值 (后面只能用null 这是一个语句)
select * from 表名 where 列(属性) is not null;//不为空的
select * from 表名 where 列(属性) is null;//为空的
//查看某列的属性为空(不为空)的所有数据
where_and_or :
or : 或者 或
>,>=,<,<=,= : 大于,大于等于,小于,小于等于,等于;
select * from 表 where (列 >/*>/=(大于或等于或小于)*/值 or 列 = 值) and 列 like 'j%';//
如 : select * from emp where (id>20 or age = 19)and name like 'j%';//查看emp表中 id列的值大于20或age列的值为19的 并且 name列的值以j开头的所有的行的属性
//指定查询 :
select 列限定(就是列) from 表限定(就是表) where 行限定(就是一行中某一个属性); //数据限定条件区分大小写,java限定大小写,select什么就输出什么
1 select id,name from emp where job = 'CLERK';//查看 job(列)为'CLERK'的哪一行(或多行)的id值和name值
2 select * from 表 where 列(列限定/表头) < 7800 and 列>2000;//(*就代表输出所有列的属性) 输出 某表中 某列上的值小于7800 且 某列的值大于2000 的所有列的属性
//查询特定列 :
select 列1,列2,列3... from 表 where 行限定;(行限定 : 就是某一列上的值 )
如 :
select id,name from emp where sex = '男';//查看性别为'男'的 id和name属性
distinct :
//单列查询 : (去除重复)
select distinct 列限定 from 表名 where 行限定(z只能单行查询)
like :
//匹配字符查询 : (就是筛选)
% : 匹配多个字符 有两个意思 1 可以匹配任意位字符
2 可以匹配每位上面的任意字符
_ : 匹配一个字符
1 select * from 表名 where 限定列 like ''%k%';//查看某个表中某个列的属性值,包含k的所有的行的属性
2 select * from 表名 where 限定列 like '__k%';//两个下划线(代表两位) 查看某个表的某个列的值, 值的第三位是k的所有的行的属性
in :
//枚举查询
select * from 表 where 列 in(值(1),值(2),值(3)...);//输出某表中 某列的值为 1 或者 2 或者 3 的所有的行的属性
select * from emp id in(22,42,66);//输出emp表中 id 列的值为22或42或66的所有的行的属性
in_and :
>,>=,<,<=,= : 大于,大于等于,小于,小于等于,等于;
select * from 表 where 列 in(值(1),值(2),值(3)) and 列 >/=(大于或小于或等于) 值;
如 : select * from emp where id in(22,33,44) and age >19;//查看emp表中 id列的值为22或33或44 并且 age(年龄)列的值 大于19的 所有的行的属性
//对查看到值进行运算 :
+*-/ : 运算查看的值(查是查 算是算 不是一回事,并不会改变表单里面的值,只是更改了输出方式)//但是 该列的数据类型必须是数字(number类型)
select 列+20 '年终奖' , name from 表名;
select 列+(加/减/乘/除)20(加减乘除对应的值) '年终奖'(给算好的结果(输出时候的列)起个名字) ,name from 表名;
select sal+20 '年终奖' , name from emp;//查看emp表中的sal值和name值 ,并且把sal的值都加20 然后起个列名为年终奖
nvl :
//!!!!重点 : 如果 某列某行 有个空值 , 那么运算结果肯定为空值
nvl(列,0) : 把某列上的空值 赋值为0
select 运算列1 + nvl(运算列2,0)*12 "年工资",列 from 表;
select sal(工资) + nvl(jiang(奖金列),0) '年工资' ,name from emp;//查看emp表中的sal列,和jiang列,和name列 , 并把sal列的值和jiang列的值相加(有的人奖金为空 , 就是没有,然后通过nvl(),就把空值赋值为0),然后算出来的结果起名(输出时候的列名)为 年工资 ,
order_by :
desc :
//给查到的数据,进行从大到小排序(是查到后,在排序,和表内容没关系)
select * from 表名 order by 列 desc;//某列从大到小排序(只是输出的时候排序而已)
asc :
//给查到的数据,进行从小到大排序(是查到后,在排序,和表内容没关系)
select * from 表 order by 列 asc;//某表的某列输出的时候从小到大排序(只是输出的时候排序)
as : (起名)
select 列,列*12 + nvl(列*12,0) as sy, 列 from emp order by sy 排序(asc/desc);//查看某个表的某些列,并对某些列进行了算数操作,并给算的结果起个别名 叫 sy列 ,然后再给这个sy列进行排序 asc(从小到大)/desc(从大到小)
//子查询 : 分页
//几个查询运算,只能是number类型 ,返回值也都为int类型
max :
max();//获取某一列的最大值 返回值为int类型
如 : max(id);//获取id那一列的最大值
min :
min();//获取某一列的最小值 返回值为int类型
如 : min(id);//获取id那一列的最小值
avg :
avg();//获取某一列的平均值 返回值为int类型
如 : avg(id);//获取id那一列的平均值
sum :
sum();//获取某一列的值的总和 返回值为int类型
如 : sum(id);//获取id那一列的值的总和
count :
conut();//当前列下有多少个值 返回值为int类型
如 : conut(id);//获取id那一列有几个值
group_by :
//以单列为标准分组
group by ;//以某一列为标准,进行分组 分组标准必须是查询条件中的列
select 操作(列),操作(列).... ,分组列 from 表 group by 分组列;//分组列就是以某个列为标准分组,去除这一列的重复数据(是把相同数据的行,分为一组)
select avg(sal),max(sal),deptno from emp group by deptno;
//以多列为标准分组
group by ;//以某几个列为标准,进行分组 分组标准必须是查询条件中的列
select 操作(列),操作(列).... ,分组列1,分组列2 from 表 group by 分组列1,分组列2;//以多列为标准进行分组,就是分组列1进行分组(把相同的数据分为一组,并且 每个组里面不能有分组列2相同的数据 , 如 : id , name 每个id分组里面,不能有相同的name)
select min(sal),avg(sal),max(sal),deptno,job from emp group by deptno,job;
having :
having ;//对统计结果进行过滤
select 操作(列),操作(列).... ,分组列 from 表 group by 分组列 having 操作(列) 比较符 值;//就是限定条件 但是是对结果集进行的限定查询, 先分组,在从分组的基础上,进行限定
select avg(sal),max(sal),deptno from emp emp group by deptno having avg(sal)>2000;(平均工资低于2000的部门号和平均工资)
//为用户授权 : 权限
grant connect,resource,unlimited tablespace to c##名字 container=all;//所有权限
//grant 权限 to c##用户名;
connect:链接(登陆) 权限
resource:数据/源 权限
unlimited tablespace : 表空间 权限
//设置用户使用的表空间 :
alter user 用户名 default tablespace users;
alter user 用户名 temporary tablespace temp;//临时表空间