2. 基本查询
3. 复杂查询
1、oracle表的DML操作:DML(Data Manipulation Language 数据操控语言)
Insert语句 (增加数据)
Update语句 (更新数据)
Delete语句 (删除数据)
2、oracle表的DML操作—添加数据
语法:
INSERT INTO table [(column [, column...])]
VALUES (value [, value...]);
插入的数据应与字段的数据类型相同。
数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。
在values中列出的数据位置必须与被加入的列的排列位置相对应。
字符和日期型数据应包含在单引号中。
插入空值,不指定或insert into table values(null)
--1.查询月工资在2000到3000的员工姓名。
--解法一:
select ename,sal from emp where sal >= 2000 and sal<=3000;
--解法二:
select ename,sal from emp where sal between 2000 and 3000;
--2.查询与SMITH的部门和岗位完全相同的所有雇员。
desc emp
select * from emp
where (deptno,job)=(select deptno,job from emp where ename='SMITH');
select * from emp
where job='CLERK';
--这里多了个SMITH他自己的
select e.* from emp e
where (e.deptno,e.job)=(select deptno,job from emp where ename='SMITH');
--emp.*作为临时表
select e.* from emp e;
--8.1.8实现关联子查询
--关联子查询会引用外部查询中的一列或者多列,这种子查询之所以被称之为关联子查询。
--是因为它的确与外部语句相关。具体实现十,外部查询中的每一行都传递给子查询,子查询一次兑取传递过来的每一行的值,并将其应用
--到子查询上,知道外部查询中的所有行都处理完为止,然后返回子查询的结果
--3.显示高于自己部门平均工资的员工的信息。
--解法一:
--思路:
--第一步:打印出所用员工的信息
--第二步:通过每个平均工资和其成员工资的比较,打印成高于自己部门平均工资的成员 子查询中通过 deptno链接
select e.*
from emp e--e.*代表所用的员工
where e.sal>(select avg(sal) from emp where deptno=e.deptno);
select e.*
from emp e;
--就三个部门
select deptno,avg(sal) from emp
group by deptno;
--解法二:
select e1.*,e2.myavg
--这里要用到数据查询的小技巧,把一个子查询当作一个临时表使用
from emp e1,(select avg(sal) myavg,deptno from emp group by deptno) e2--所有部门的平均工资
where e1.deptno=e2.deptno and e1.sal>e2.myavg;
select length(hiredate) from emp;
select substr(hiredate,6,4)
from emp;
desc emp
select substr('2015-05-15',9,2) from dual;
select length('2015-05-15') from dual;
--检索是否存在1980年入职的员工
select * from emp
where substr(hiredate,8,2)='80';
--查询1980年入职的员工
--更改日期的格式
alter session set nls_date_format ='yyyy-mm-dd';
select * from emp where substr(hiredate,1,4)='1980';
--4.按照部门号升序而雇员的工资降序排列显示雇员的信息。
select ename,deptno,sal
from emp
order by deptno asc,sal desc;
--9.修改员工scott的岗位、工资、补助,让其与smith员工一样。
update emp
set (job,sal)=(select job,sal from emp where ename='SMITH')
where ename='SCOTT';
--10.显示满10年服务年限的员工的姓名和受雇日期。
select ename,hiredate
from emp
where months_between(sysdate,hiredate)/12 >10;
--11.显示各月倒数第3天受雇的所有员工。
select ename,hiredate
from emp
where hiredate=last_day(hiredate)-2;
--12.显示所有12月份入职的员工。
select hiredate
from emp
where substr(hiredate,6,2)='12';
--13.显示每个部门工资最高的人的详细资料。
select e1.*
from emp e1,(select deptno,max(sal) mysal from emp group by deptno) e2
where e1.deptno=e2.deptno and e1.sal=mysal;
select e.*
from emp e
where sal=(select max(sal) from emp where deptno=e.deptno);