sql语句

Oracle基本操作

创建emp

create table emp(empID number(4),

empName varchar2(20),

job varchar2(20),

mgr number(4),

hireDate date,

sar number(7,2),

com number(7,2),

deptNo number(4)

);

插入emp信息实例

insert into emp values (1048,'noah','saleman',1010,'2010-01-05',1030,200,10);

insert into emp values (8301,'emilia','clerk',1010,'2000-08-07',2500,30,20);

insert into emp values (1501,'ava','saleman',2656,'2005-02-15',1800,100,30);

insert into emp values (3053,'jackson','saleman',5013,'1990-11-13',8000,1500,20);

insert into emp values (5208,'lucas','manager',1010,'2009-05-07',1150,500,40);

insert into emp values (8096,'andrew','president',8301,'1998-09-01',1090,0,20);

insert into emp values (2656,'albert','CEO',0000,'1989-12-12',9999,0,30);

insert into emp values (1008,'david','manager',6047,'1987-01-18',2560,0,10);

insert into emp values (1010,'danie','engineer',8089,'1995-05-09',1520,2120,40);

insert into emp values (6047,'henry','accounting',2656,'2004-08-15',3020,0,10);

insert into emp values (4011,'linda','secretary',1001,'2000-01-07',6070,50,20);

insert into emp values (5612,'bill','clerk',5612,'2003-09-05',6500,230,30);

insert into emp values (5013,'bel','administrator',1010,'1996-09-30',2350,120,40);

insert into emp values (4019,'sam','clerk',3065,'2010-05-20',1250,20,10);

创建dept

create table dept(

deptNum number(4),

depName varchar2(20),

loc varchar2(20)

);

插入dept实例信息

insert into dept values(10,'accounting','new york');

insert into dept values(20,'research','dallas');

insert into dept values(30,'sales','beijing');

insert into dept values(40,'operations','boston');

建表

create table 表名 values(项目)

查表的项目

desc 表名

增加

alter table 表名 add(项目)

修改

alter table 表名 modify(项目)

删除

alter table 表名 drop column项目名

更改表名

rename 旧表名 to 新表名

更新语句

update 表名 set 项目 where

删除

delete from 表名 (可以恢复)

恢复(在恢复之前要做恢复点)

rollback to 恢复点名称

创建恢复点

savepoint 恢复点名称

drop table 表名    删除表的结构和数据(不可以恢复)

truncate table 表名 删除表的所有记录,表结构还在,无法找回删除记录,速度快

导出表(要切换到安装目录下)

exp userid=用户名/密码 @数据库名  tables=(表名) file=路径

exp userid=用户名/密码 @数据库名  tables=(表名) file=路径 direct=y  (这种速度快一点)

导入自己的表

imp userid=用户名/密码 @数据库名  tables=(表名) file=路径

导入其它用户的表

imp userid=DBA用户名/密码 @数据库名  tables=(表名) file=路径 touser=用户的表

导出表的结构

exp userid=用户名/密码 @数据库名  tables=(表名) file=路径 rows=n

只导出表的数据

exp userid=用户名/密码 @数据库名  tables=(表名) file=路径 ignore=y

导出自己的方案

exp userid=用户名/密码 @数据库名 owner=用户名 file=路径

导出其它方案(需要DBA的权限)

exp userid=用户名/密码 @数据库名  owner=(DBA权限用户,导出用户) file=路径

导出数据库 需要DBA的权限或是EXP_FULL_DATABASE权限

exp userid==用户名/密码 @数据库名 full =y inctype=complete file=路径

显示当前用户所拥有的所有表 user_tables

select table_name from user_tables

显示当前用户可以访问的所有表 all_tables

select table_name from all_tables;

显示所有方案所拥有的数据库表dba_tables

select table_name from dba_tables;

查询所有方案所拥有的用户

select username from dba_users

*查询数据库的表空间

select tablespace_name from dba_tablespace

显示当前数据库的全称

select * from global_name;

显示系统正使用那个数据库

select sys_context(USERENV,DB_NAME) from dual

名称中含有’a’的员工 %xx%

select * from emp where empname like '%a%'

首字母是’S’的员工 like

select * from emp where empName like S%

第三个字母是’S’的员工 __like

select empName,sar from emp where empName like __b%

显示部门编号为10,20,30的员工姓名 in

select empName from emp where DeptNo in(10,20,30)

显示最高工资和最低工资 max min

select max(sar),min(sar) from emp

显示按部门的平均工资和最高工资 avg  group by

select avg(sar),max(sar) ,deptNo from emp group by deptNo

显示按部门的平均工资和最高工资且平均工资高于2K的部门 having

select avg(sar),max(sar),deptNo from emp group by deptNo having avg(sar)>2000

得到比10部门所有员工薪水高的员工 all

select * from emp where sar >all(select sar from emp where deptNo=10);

也可以写成

select * from emp where sar>(select max(sar) from emp where deptNo=10);

得到比10部门任何一个员工薪水高的员工 any

select * from emp where sar >any(select sar from emp where deptNo=10)

也可以写成

select * from emp where sar>(select min(sar) from emp where deptNo=10);

显示工资不在(不含)10003000之间的员工 between

select * from emp where sar not between 1000 and 3000

10003000(包含)

select * from emp where sar between 1000 and 3000

重复记录 distinct

select distinct(emp.empname) from emp

查询不满足<>

select * from emp where empid<>1000

等号的左边,左外连接(显示等号右边表的所有记录)

select emp.deptno,dept.depnum from emp,dept where emp.deptno(+)=dept.depnum

计算员工的年薪 nvl(项目名,0)

当计算遇到空值时,0

select empname, sar*13+nvl(com,0) 年薪 from emp

加索引 index

create inext aa on emp(empid)

创建函数 fuction

create function myFun(myName varchar2) return

number is yearSar number(7,2);

begin

select  sar*12+nvl(com,0)*12 into yearSar from emps  where empname=myName;

return yearSar;

end;

函数调用  var aa number;

  call myFun(albert) into:aa;

创建存储过程(向表中插入一条记录)procedure

create procedure p01 is

begin

   insert into a001 values(1,albert);

end;

/

执行exec 名称

创建比自己部门平均工资高的雇员,以及对应的工作的视图 view

简单示例:create view aa as select * from emp where sar >2000

a.部门的平均工资表t2

select avg(emp.sar) avgSar,emp.deptno deptno from emp group by emp.deptno

b.比自己部门平均工次高的雇员表t3

select * from emp t1,() t2 where t1.deptno=t2.deptno and t1.sar>t2.avgSar

c.对应的工作t5

select ? from dept t4,()t3 where t4.deptnum =t3.deptno

d.创建视图 aa

create view aa as t5

从控制台输入变量 &项目名

select * from emp where sar>&sar

查询重复记录 having

select * from emp where empID in(select empID from emp group by empID having count(empID)>1 )

删除重复记录 rowid

delete from emp a where a.rowid!=(select max(b.rowid) from emp b wherer a.empID=b.empID and a.empName=b.empName....)

显示8个月前入职的员工

select * from emp where sysdate>add_months(hiredate,8);

显示员工的入职天数

select sysdate-hireDate 入职天数 from emp;

显示员工入职当月的最后一天是那天

select hireDate , last_day(hireDate)  from emp;

更正显示员工入职显示时间格式

select empName ,to_char(hireDate ,yyyy-mm-dd hh24:mi:ss) from emp;

更正显示薪水,以货币符号开头,带逗号读取数值 L表示本地的货币符号,也可以替换成$

select empName ,to_char(sar,L99,999.99) from emp;

*提取首字母为大写的员工名字

select upper(substr(empName,1,1))||lower(substr(empName,2,length(empName)-1)) from emp;

显示姓名和工资,以及对就的工作

select t1.empName,t1.sar,t2.deptName from emp t1,dept t2 where t1.deptNo =t2.deptNum;

自表查询

select t1.empName 自己,t2.empName 上司 from emp t1,emp t2 where t2.empNo = t1.mgr

嵌套查询 与albert同一部门的员工,单项子查询

1,得到albert的部门号

select deptNo from emp where empName=albert;

2,得到所有员工

select * from emp where deptNo=( select deptNo from emp where empName=albert);

查询与部门10工作相同的所有员工 多项子查询

1,得到部门10的员工的所有工作

select job from emp where deptNo=10 ;

2,得到所有员工

select * from emp where job in(select job from emp where deptNo=10)

写出与danie部门和工作相同的所有员工

1,得到danie 的部门和工作

select deptNo ,job from emp where empName=danie

2,得到所有员工

select * from emp where (deptNo,job)=( select deptNo ,job from emp where empName=danie)

得到高于自己部门平均工资的员工

1,得到自己部门的平均工资

select avg(sar)  from emp goup by deptNo;

2,把以上得到的当作成一个子表,再次进行查询

select * from emp t1,(select avg(sar) val ,deptNo num  from emp goup by deptNo) t2 where t1.deptNo=t2.num and t1.sar>t2.val;

更新andrew员工与albert的工作,薪水,福利一样

update emp set (job,sar,comm)=(select job,sar,comm from emp where empName=albert) where empName=andrew;

添加外键约束

alter table son

add constraint xxx foreign key (parentid)

references parent(id)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值