SQL语句Oracle数据库的基本增删改查

sql语句在很多中数据库中都是通用的,但是在不同的数据库中有着部分的差别,所以今天就只介绍sql在

Oracle中的基本应用,看以下例子
--建表
create table person(username varchar2(20),userage number(10),usersex char(2));

--查看表结构
desc person;

--修改表字段的值不能为null
alter table person modify(userage number(10) not null);

--查询某表的内容
select * from person;

--查看当前用户所有的表
select * from tab;

--插入数据(如果只给部分字段赋值,前后必须一一对应)
insert into person(username,userage,usersex)values('张四',20,'男');

--插入数据(不指定表的结构,就必须对所有字段都赋值)
insert into person values('杨过',30,'男');

--修改数据(如果后面没有where语句,则把所有的username都改了)
update person set username='张四'where username='张三';

--删除该表所有数据
delete person;

--删除指定的数据
delete person where username='张三'; 


----------------------------------------------------------------------简单查询

--查询一张表中的所有数据
select * from emp;

--查询指定的字段(结果集会按照查询的字段顺序来显示数据)
select empno,ename from emp;

--去掉结果集当中重复行
select distinct job from emp;

--条件查询(查询史密斯的部门,工作,薪水)(区分大小写)
select deptno,job,sal from emp where ename='SMITH';




--条件查询(查询部门编号为10和20的的员工)
select * from emp where deptno=10 or deptno=20;

--条件查询(查询薪水大于2000并且下雨2500)
select * from emp where sal>2000 and sal<2500;



--模糊查询           (  % 表示通配任意个字符     _ 表示通配一个字符  )
select * from emp where ename like '%K%';

--查询首字母是S的员工
select * from emp where ename like 'S%';

--查询第三个字母是O的员工
select * from emp where ename like '__O%';

--在where中使用in
--查询存在于数组中的(7369,7566)
select * from emp where empno in(7369,7566);


--显示没有上司的员工
select * from emp where mgr is null;

--以别名显示(as可以省略)
select empno as 编号,ename as 姓名,sal as 月薪 from emp where ename like 'S%';

--显示smith的编号和年薪
select empno 编号,ename 姓名,sal*12 年薪 from emp where ename='SMITH';

--显示工资小于1000或者职位为MANAGER,且名字开头为J的员工
select * from emp where (sal<1000 or job='MANAGER') and ename like 'J%';

--查询的所有数据,并且按照薪水从高到低排序  (desc 倒序排序 ; asc 顺序排序)
select * from emp order by sal desc;
select * from emp order by sal asc;

--统计所有员工的编号,姓名,年薪(月薪+奖金)     nvl(comm,0)  当comm为null的时候用0替代来计算
select empno 编号,ename 姓名,sal*12+nvl(comm,0) 年薪 from emp;

--根据别名来排序
select empno 编号,ename 姓名,sal*12+nvl(comm,0) 年薪 from emp order by 年薪 desc;

----------分组函数  max  min  avg  sum  count

--查询最高月薪是多少
select max(sal) 月薪 from emp;

--查询月薪最高的员工和月薪最低的员工
select empno 编号,ename 编号,sal 月薪 from emp where sal=(select max(sal) 月薪 from emp); --最高
select empno 编号,ename 编号,sal 月薪 from emp where sal=(select min(sal) 月薪 from emp); --最低
select empno 编号,ename 编号,sal 月薪 from emp where sal=(select max(sal) 月薪 from emp) or sal=(select min(sal) 月薪 from emp);--最高和最低一起

--计算员工的平均月薪
select  avg(sal) 平均月薪 from emp;
select sum(sal)/count(empno) 平均月薪 from emp;
--计算有多少员工
select count(empno) 员工数 from emp;
--计算一个月所有薪水总数
select sum(sal) 总月工资 from emp;


------------分组语句
--group by
--显示每个部门的最高工资和平均工资
--分组的条件一定要先查询出来
select max(sal) 最高月薪,avg(sal) 平均月薪,deptno 部门 from emp group by deptno;

--显示每个部门每种岗位的平均工资和最低工资
select avg(sal) 平均月薪,min(sal) 最低工资,job 岗位,deptno 部门 from emp group by job,deptno order by deptno;

--显示平均工资低于2000的部门和它的平均工资     分组之后的条件用having
select avg(sal) 平均工资,deptno 部门 from emp group by deptno having avg(sal)<2000;

--显示平均工资高于2000的部门和它的平均工资,并且财务部不参与
select deptno 部门,avg(sal) 平均月薪 from emp where deptno!=10 group by deptno having avg(sal)>2000 order by avg(sal);


-------------------------------------------------------------------------------------------------多表查询
--查询部门表
select * from dept;

--笛卡尔集,两个表的关联条件
select e.ename 姓名,e.sal 月薪,d.dname 部门名字 from emp e,dept d where e.deptno=d.deptno;

--显示部门号为10的部门名,员工名,月薪
select e.ename 姓名,e.sal 月薪,d.dname 部门名字 from emp e,dept d where e.deptno=d.deptno and e.deptno=10;

--显示各员工的姓名,工资,工资级别    没有一一对应的关联条件
select e.ename,e.sal,s.grade from emp e,salgrade s where e.sal between s.losal and s.hisal;

--显示员工姓名,员工工资,所在部门的名字,并按照部门来排序
select e.ename,e.sal,d.dname from emp e,dept d where e.deptno=d.deptno order by e.deptno desc;

-----思考题


1、	--选择部门30中所有的员工

2、	select * from emp where deptno = 30;

3、	--列出所有业务人员(CLERK)的姓名,编号,和部门编号。

4、	select empno,ename,deptno from emp where job = 'CLERK';

5、	--找出佣金高于薪水的员工

6、	select * from emp where comm>sal;

7、	--找出佣金高于薪水60%的员工

8、	select * from emp where comm>sal*0.6;

9、	--找出部门10中所有的经理和部门20中所有业务员的详细资料

10、	select * from emp where deptno =10 and job = 'MANAGER' or deptno =20 and job = 'CLERK';

11、--	找出部门10中所有的经理和部门20中所有业务员,既不是经理又不是业务员但薪水大于等于2000的所有的员工信息

12、	select * from emp where deptno =10 and job = 'MANAGER' or deptno =20 and job = 'CLERK' or job!='MANAGER' and job!='CLERK'and sal>=2000;
13、--	找出收取佣金的员工的不同工作;

14、	select distinct job from emp where comm is not null;

15、--	找出收取佣金且收取佣金低于100的员工;

16、	select * from emp where comm<100;

19、--	找出早于12年前的受雇员工
20、	select * from emp where hiredate <'1-1月 2012';

27、	--按名字排序员工

28、	select * from emp where ename like 'A%';

35、--	找出名字包含“A”的员工

36、	select * from emp where ename like '%A%';
 这些用法基本包括了oracle数据库的基本增删改查功能
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值