文档库 最新最全的文档下载
当前位置:文档库 › oracle

oracle

数据库
实现数据的存储

数据的表现形态
1.瞬时态的数据
内存
2.持久态的数据
文件,数据库软件
数据库产品
Oracle sybase DB2
SQLServer MySql
Access

Oracle
Oracle软件公司创始人 Larry Ellison
中文翻译甲骨文
Oracle 圣喻神喻
Oracle产品
Oracle8
Oracle8i,Internet
Oracle9
Oracle9i
Oracle10g,Grid
Oracle11g
DBA:数据库管理员
DBMS:数据库管理系统
关系型数据库(Relationship DataBase)

1.安装Oracle
SID:数据库实例,一个数据库只有一个不能更改
提供一个学习账户scott/tiger
system/sys拥有DBA权限

2.连接使用Oracle
a.启动Oracle数据库的服务
OracleService实例名称 服务器 启动
OraclexxxxListener 监听器 启动
b.连接数据库
1.开始--—->找到Oracle程序--->SQLPLUS
打开窗口
conn userName/password 实现数据库连接
2.开始--->运行 cmd --->sqlplus
输入用户名密码
3.通过第三方软件(PlSqlDev)
输入用户名密码登录
c.与数据库交互
SQL(Structure Query Language,结构化查询语言)
分类:根据语句实现的功能不同
DQL语言:Data Query Language,数据查询语言
select 关键字
DDL语言:Data Difinition Language,数据定义语言
create/drop/alter/truncate
DML语言:Data Manipulation Language,数据操作语言
insert/delete/update
TCL语言:Transaction Control Language,事务控制语言
commit/rollback/savepoint
DCL语言:Data Control Language,数据控制语言
grant/revoke
SQL语句
1.数据在Oracle等数据库中的存在形式
以二维表的形式存储
行/记录(row,record)
列/字段(column,field)
常用命令
sqlplus清屏:host cls;
设置屏幕宽度:set linesize 200;
设置字段显示的长度:column 字段名称 format a9;

2.Oracle数据库中用来测试学习的表
emp 员工表
dept 部门表
salgrade 工资等级表
3.查询语句
查询:查询出行数据
投影:查询数据库表中的字段(列)
连接:查询出多张不同表的字段

解除scott账户的锁定
以DBA system/xxxx

alter user scott account unlock;

语法:
select [distinct] (*|字段名称,字段名称) from 表名
关键字大小写不区分
表名,字段名称大小写不区分
表中的数据是区分大小写的
1.取别名
select 字段名称 [as] 别名 from 表名
sql>select ename as name from emp;
sql>select ename name from emp;
取中文别名,以及别名中含有空格,特殊符号等
那么别名必须采用双引号
sql>select ename "姓名" from emp;
2.字符串连接
字符串拼接 采用||,oracle中用单引号来标识字符串
sql>select ename||job from emp;
3.对查询结果进行

算数运算
+-*/
sql>select sal*12 from emp;

条件查询
语法:
select [distinct] (*|字段名称,字段名称) from 表名 where 过滤条件

a.比较运算条件查询
> < = != <> 不等于
查询出名称为SMITH的员工信息
sql>select * from emp where ename = 'SMITH';

b.逻辑运算符
and or not
查询出职位是经理并且工资大于2500的员工的所有信息
sql>select * from emp where job='MANAGER' and sal>2500;
查询出职位是经理或者工资大于3000的员工的信息
sql>select * from emp where job='MANAGER' OR sal>3000;

c.between进行条件过滤
between...and..... 包括边界
between后面跟的数必须比and后面的数小
查询出工资大于等于2450并且小于等于3000的所有员工的信息
sql>select * from emp where sal between 2450 and 3000;

d.in进行条件查询
查询出职位是经理或者总裁的员工的信息
sql>select * from emp where job in('MANAGER','PRESIDENT');

e.空(is null /is not null)
查询出奖金不为空的所有人的信息
sql>select * from emp where comm is not null;
null 与任何数据做算术运算结果为null

f.like进行模糊查询
通过百分号(%)进行任意个字符的匹配
通过下划线(_)匹配一个字符

查询出所有名称中以A开始的所有人的信息
sql>select * from emp where ename like 'A%';
查询出名称中第二个字母为A的所有人的信息
sql>select * from emp where ename like '_A%';

通过转义字符来实现
查询出emp表名字中第二个字符为_的所有员工的信息
SQL> select * from emp where ename like '_\_%' escape '\';
SQL> select * from emp where ename like '_a_%' escape 'a';
escape 关键字表示字符为转义字符,
那么转义字符之后的字符原意输出

g.distinct 关键字用来去重复
distinct 关键字必须出现在select关键字之后
SQL> select distinct ename,job from emp;
h.查询结果排序
select............ order by 字段名称 asc/desc
order by 子句只能出现在select语句的最后
默认是升序排序

SQL> select * from emp where
job='MANAGER' order by sal desc;

i.绑定值
通过&变量名称
SQL> select * from emp where ename=&name;

函数
虚表 dual表:一行一列

单行函数
1.字符串函数
a.函数upper,使查询出的字符串大写显示
SQL> select upper('hello') from dual;
b.函数lower,字符串小写显示
SQL> select lower(ename) from emp;
c.函数length,获得字符串长度
SQL> select length('hello') from dual;
d.函数initcap,让单词首字符大写
SQL> select initcap('helloworld') from dual;
e.函数concat,连接两个字符串
SQL> select concat(concat('hello','world'),'hello') from dual;
f.函数s

ubstr(目标字符串,起始位置,子串长度),截取子串
SQL> select substr('hello',1,2) from dual;
注意:包括起始位置
下标从1开始
2.数字函数
a.函数floor,向下取整
SQL> select floor(3.94) from dual;
b.函数ceil,向上取整
SQL> select ceil(3.14) from dual;
c.函数round,四舍五入
SQL> select round(3.14) from dual;
d.函数trunc,截取数字
SQL> select trunc(123.456,-1) from dual;
SQL> select trunc(3.1415926,4) from dual;

3.日期函数
a.获取当前系统时间
SQL> select sysdate from dual;

b.日期+数字=日期
SQL> select sysdate+1 from dual;
在天数上进行添加,满足月份和年份自动递增

c.日期-数字=日期
SQL> select sysdate-1 from dual;

d.日期-日期=天数
SQL> select sysdate-to_date('2014-2-5','yyyy-MM-dd') from dual;
日期不能加日期

e.函数next_day(日期,星期数)
获取接下来的(即将到来的)此星期数的日期
中文环境的Oracle可以使用中文
SQL> select next_day(sysdate,'星期日') from dual;
英文环境可以用英文的星期数
如果不确定字符集环境,可以使用数字,(1-7)表示星期(日-六)
SQL> select next_day(sysdate,1) from dual;

f.函数add_months(日期,数字)
在月份上添加
SQL> select add_months(sysdate,2) from dual;
查找之前的月份
SQL> select add_months(sysdate,-2) from dual;

g.函数last_day(日期)
当前日期所在月份的最后一天日期时间
SQL> select last_day(sysdate) from dual;

h.函数months_between(日期,日期)
两个日期间隔的月份数
SQL> select months_between(sysdate,hiredate) from emp;

4.转换函数

a.函数to_date(字符串,日期显示的格式字符串),
将字符串按照某种格式转换成日期

SQL> select * from emp where hiredate = to_date('1980-12-17','yyyy-mm-dd');
SQL> select to_date('2013-01-04 1:14:59','yyyy-mm-dd hh:mi:ss') from dual;
SQL> select to_date('2013-01-04 13:14:59','yyyy-mm-dd hh24:mi:ss') from dual;
SQL> select to_date('04/03/13 13:14:59','dd/mm/yy hh24:mi:ss') from dual;

b.函数to_char(其他数据,格式字符串),
将日期转换成字符串
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
SQL> select to_char(sysdate,'dd/mm/yyyy hh24:mi:ss') from dual;
将数字转换成字符串
SQL> select to_char(1234.0,'9999.9') from dual;

c.函数to_number(字符串,数字转换的格式)
SQL> select to_number('123.4','999.9') from dual;
SQL> select to_number('¥123.4','L999.9') from dual;
SQL> select to_number('$123.4','$999.9') from dual;

5.通用函数
a.函数nvl(字段,默认值)
处理字段中的空值,字段值为空函数返回默认值
SQL> select sal+nvl(comm,0) from emp;
b.函数decode
实现分支结构
SQL

> select decode(2,1,'是1',2,'是2',3,'是3') from dual;

表的连接查询
1.内连接
特点:将两个表中有与之对应记录的数据显示
select 字段。。。 from 表1 [inner] join 表2 on 连接条件;
a.等值连接


查询出员工的名称以及所在的部门的部门名称,没有则不显示
SQL> select emp.ename,dept.dname from emp inner join dept on emp.deptno = dept.deptno;

b.非等值连接
查询出员工名称以及所对应的工资的工资等级
SQL> select emp.ename,salgrade.grade from emp join salgrade
on emp.sal between salgrade.losal and salgrade.hisal;

查询出工资等级为4的员工的姓名以及工资
select e.ename,s.grade from emp e join salgrade s
on e.sal between s.losal and s.hisal
where s.grade = 4;

c.自连接
一个表与表自身进行连接操作,字段之间有关系
查询出员工的编号以及姓名以及对应的直接领导的姓名
SQL> select e.empno,e.ename,m.ename from emp e join emp m
on e.mgr = m.empno;

2.外连接
特点:会将表中没有与之对应记录的显示

a.左外连接 left join
会将left join 左边的表(主表)中的所有记录显示,
右边的表(从表)有与左边表(主表)对应记录的显示,
没有对应匹配记录的不显示

select e.ename,d.dname from emp e left join dept d on e.deptno=d.deptno;
SQL> select e.ename,d.dname from emp e join dept d on e.deptno=d.deptno(+);
加号对应字段的表是作为从表

b.右外连接 right join
会将right join 右边的表(主表)中的所有记录显示,
左边的表(从表)有与右边表(主表)对应记录的显示,
没有对应匹配记录的不显示
SQL> select e.ename,d.dname from emp e right join dept d on e.deptno=d.deptno;
SQL> select d.dname,e.ename from emp e join dept d on e.deptno(+)=d.deptno;
加好对应字段的表是作为从表

c.全外连接
会将所有表的所有记录都显示
SQL> select e.ename,d.dname from emp e full join dept d on d.deptno=e.deptno;

3.自然连接
natural join
连接的条件由数据库管理系统来决定
SQL> select * from emp natural join dept;

4.笛卡尔集
获得笛卡尔集
将表中的每条记录与另一个表中的所有记录进行一一匹配
笛卡尔集的总记录数:表1记录总数*表2的总记录数
SQL> select * from emp cross join dept;

组函数
求出最大值
max() 可以对所有类型数据操作
求出最小值
min() 可以对所有类型数据操作
平均值
avg() 只能对number类型数据操作
求和
sum() 只能对number类型数据操作
求记录数
count()

所有的组函数都会自动过

滤null数据

分组统计查询
group by 分组的字段
SQL> select max(sal) from emp group by deptno;

注意:
1.分组查询,查询的字段除开分组函数以外的其他字段
必须出现在group by之后作为分组条件
2.分组查询可以只查询组函数字段,建议查询字段与分组字段一致。

关于having子句
对分组查询进行条件过滤
查询出部门最高工资大于5000的部门编号以及最高工资
SQL> select deptno,max(sal) from emp
group by deptno having max(sal)>5000;

注意:
where 之后不能直接使用分组函数
having子句必须出现在group by之后,不能单独使用

子查询
查询中含有查询,将一个查询的结果作为另一个查询的条件

1.非关联子查询
a.单列子查询(子查询的结果是一行一列)
SQL> select * from emp where sal
> (select sal from emp where ename = 'SMITH');
SQL> select * from emp where job
= (select job from emp where ename='SMITH');
可以使用< > = <= >= !=

b.子查询返回多条记录
in not in
select * from emp where sal
in (select max(sal) from emp group by deptno);

注意:
使用not in 对一个查询结果包含有null值的子查询进行操作,
将会查不到任何数据
--empno 为7839的人没有 领导(mgr字段为null)
SQL> select * from emp where empno not in(select mgr from emp);
查询出所有不是领导的人
SQL> select * from emp where empno
not in(select mgr from emp where mgr is not null);

注意:
子查询返回多条记录时
可以使用
in ,
=any,与in的效果类似,会对返回结果进行一一匹配
>any,查询出大于子查询中最小的
>all,查询出大于子查询中最大的

子查询返回有空值需要处理


c.子查询返回多个字段多条记录
SQL> select * from emp where (deptno,sal)
in (select deptno,min(sal) from emp group by deptno);


2.关联子查询
涉及到主查询与子查询进行数据交换
查询出工资比本部门平均工资高的人
SQL> select * from emp out where
sal> (select avg(sal) from emp
where emp.deptno = out.deptno
group by deptno);

集合
并集,交集,差集
union all 并集
union 并集 公共数据只显示一次
intersect 交集
minus 差集 将集合中与另一个集合的交集去除

求并集(不去重复)
select job from emp where deptno=10
union all select job from emp where deptno =20;
求并集(去重复)
select job from emp where deptno=10
union select job from emp where deptno =20;
求交集
SQL> select job from emp where deptno=10
intersect

select job from emp where deptno =20;
求差集
SQL> select job from emp where deptno=20
minus select job from emp where deptno =10;

注意:集合关键字两边的select语句必须是同构的
select同构:查询的数据的种类和个数相同


4.DDL(数据定义语言)
create/drop/alter/truncate

create 创建
1.表中的数据类型
desc 查询表的结构
SQL> desc emp;
Oracle数据库中常用的数据类型
number(长度) 数字类型
number(4),number(长度,小数位数),number(7,2)
varchar2(长度) 可变长字符串
char(长度) 定长字符串
date 日期类型
blob 字节型大数据类型
clob 字符型大数据类型
2.创建表
create table 表名(
字段名称 数据类型(长度) 约束,
字段名称 数据类型(长度) 约束,
);
--创建名称为t_emp的表
SQL> create table t_emp(
id number(5) ,
name varchar2(20),
age number(3),
sex varchar2(1)
);


复制表的结构和数据
create table 表名 as select*********
--创建名称为t_emp1的表
SQL> create table t_emp1 as select empno,ename from emp;
复制表结构不复制数据
SQL> create table t_emp1 as select * from emp where 1=2;

drop删除表
drop table 表名称;
sql>drop table t_emp;

truncate 截断表
删除表中的数据,保留表结构
truncate table 表名称;
SQL> truncate table t_emp1;

alter 修改表结构
1.重命名表
sql>rename 被重命名的表 to 新名称
SQL> rename t_emp1 to tt_emp1;
2.重命名字段
alter table 表名 rename column 旧字段名 to 新名称
SQL> alter table t_emp rename column name to sname;
3.修改字段数据类型以及长度
alter table 表名 modify(字段名称 数据类型(长度));
SQL> alter table t_emp modify(sex number(2));
注意:修改数据类型与长度时
字段不能含有数据
4.添加字段
alter table 表名 add(字段名称 字段类型(长度));
SQL> alter table t_emp add(address char(20));

5.删除字段
alter table 表名 drop (字段名称)
SQL> alter table t_emp drop (age);
alter table 表名 drop column 字段名称;
SQL> alter table t_emp drop column sex;

5.DML(数据操作语言)
insert,update,delete

1.insert向表中插入数据
insert into 表名称 values(对应的所有字段的值)
SQL> insert into t_emp values(1,'xiaohei','keda');

insert into 表名称(要插入数据的字段,字段名) values(匹配的字段值);
SQL> insert into t_emp(id,sname) values(2,'xiaobai');

一次插入多条记录
SQL> insert into t_emp(id,sname) select empno,ename from emp;

2.update,修改数据
update 表名 set 字段名称=新值 where 条件限定
SQL> update t_emp set sname='aaa';
SQL> update t_emp set sname='hello' where id=1;
SQL> update t_emp set sname='www',address='keda' where

id=7369;

3.delete,删除记录
delete from 表名称 where 条件限定
sql>delete from t_emp where id = 1;
SQL>delete from t_emp where id=1 or id=3 or id=4;

注意:DML语句一定要做事务处理

6.TCL(事务控制语言)
commit 提交事务,
rollback 回滚事务 ,
savepoint 保存事务点
1.什么是事务(Transaction):
事务是数据库中操作数据的最小逻辑单元
2.四大特性 :ACID
1.原子性:
事务不可再分,要么同成功,要么同失败
2.隔离性:
会话之间在事务提交前完全隔离
3.一致性:
事务提交所有会话查询得到的是一个结果
4.持久性:
事务提交,永久生效
3.事务什么时候开始,结束
一个DML语句开始执行,事务开始
事务被提交或者回滚,事务结束
DDL语句默认自动提交事务
4.操作事务
commit 确认提交事务,当前事务中的操作应用到数据库中
rollback 回滚事务,当前事务中的操作回滚到上一次事务结束时的状态
savepoint 设置事务点

savepoint 标志
rollback to 对应标志

SQL> insert into t_emp(id,sname,address) values(3,'hello','keda');

1 row inserted

SQL> savepoint A;

Savepoint created

SQL> update t_emp set address='huoxin' where sname='a';
1 row updated
SQL> savepoint B;
Savepoint created
SQL> delete from t_emp where sname='xx';
1 row deleted
--将事务回滚到事务点A,
--事务点A之后的DML操作在当前事务提交时不会应用
SQL> rollback to A;
Rollback complete
SQL> commit;
Commit complete

一个事务结束必须提交

事务不及时提交的后果
1.事务没及时提交可以回滚
2.事务提交,事务回滚段的内容会被清空
3.事务不及时提交,
其他会话查询不到当前会话所做的操作
4.事务不提交,当前事务所持有的资源不释放
5.事务不提交,数据库中的锁(行级别/表级别)不释放

7.约束(CONSTRAINT)
约束:数据库中的一种数据检测机制

1.主键约束
保证数据库表中记录不重复,不为空
主键约束的字段不能重复,不能为空
1).列级别的主键约束
create table 表名(
字段名称 字段类型(长度) primary key,
);
--列级别的主键约束
SQL> create table t_xxx(
id number(4) primary key,
name varchar2(20)
);

2).表级别的主键约束
create table 表名(
字段名称 字段类型(长度),
字段名称 字段类型(长度),

constraints 约束名称 primary key (主键字段)
);
--表级别的主键约束
SQL> create table t_emp(
id number(4),
name varchar2(10),
constraints id_pk primary key(id)
);

违反主键约束会抛出错误
ORA-00001: 违反

唯一约束条件 (HELLO.ID_PK)
ORA-01400: 无法将 NULL 插入 ("HELLO"."T_EMP"."ID")

3).联合主键
主键约束由多个字段共同承担

create table 表名(
字段名称 字段类型(长度),
字段名称 字段类型(长度),

constraints 约束名称 primary key (主键字段,主键字段...)
);
--创建由id,name组成的联合主键
SQL> create table t_emp(
id number(4),
name char(10),
address char(20),
constraints dbl_pk primary key(id,name)
);

2.非空约束 not null
约束字段值不能为空

只有列级别的非空
create table 表名(
字段名 字段类型(长度) not null,
)

--建立非空约束
create table t_emp(
id number(4) primary key,
name char(10) not null,
address varchar2(20)
)

3.唯一约束(unique)
字段中的值唯一不能重复
1)列级别的唯一约束
create table 表名(
字段名 字段类型(长度) unique,
);
--name字段不可重复
SQL> create table t_emp (
id number(4) primary key,
name char(10) unique
);

2).表级别的唯一约束
create table 表名(
字段名 字段类型(长度),
字段名 字段类型(长度),
constraints 约束名称 unique (字段)
)
--name字段表级别约束
SQL> create table t_emp(
id number(4),
name char(10),
constraints u_k unique (name)
);

4.检查约束 check
检查输入的字段值是否符合实际客观需求
1).列级别的检查约束
create table 表名(
字段名 字段类型(长度) check (字段 值的约束),
);
SQL> create table t_emp (
id number(4),
name char(10),
age number(3) check (age between 0 and 120)
);
--设置性别的缺省并且检查约束
SQL> create table t_emp(
id number(4),
sex char(1) default 'm' check (sex in('f','m'))
);

2).表级别的检查约束
create table 表名(
字段名 字段类型(长度),
字段名 字段类型(长度),
constraints 约束名称 check (约束范围)
)
--sal字段值大于5000
SQL>create table t_emp(
id number(4),
sal number(8,2),
constraints 约束名称 check (sal >5000)
);

5.外键约束 foreign key
来体现表与表之间一对多的关系
1)列级别的外键约束
create table 表名(
外键字段名 字段类型(长度) references 被引用的表(被引用字段),
);
--建立外键字段引用另一个表的主键/唯一键
SQL> create table t_student(
id number(4) primary key,
sname char(10),
classno references t_class(cid));

2).表级别外键约束
create table 表名(
字段名 字段类型(长度),
字段名 字段类型(长度),
foreign key (字段名) references 被引用表(被引用字段)
);
--表级别外键
SQL> create table t_student(
id number(4),
cno varchar2(255),
foreign key(cno) references t_class(cid)
);

外键

字段可以表示当前表中与当前表的主键或者唯一键建立外键关联,
也可以表示与其他表的主键或者唯一键建立外键关联。

一般约束在创建表的同时创建对应约束。

在含有外键字段的表中做删除操作
删除被引用的记录
ORA-02292: 违反完整约束条件 (HELLO.SYS_C006864) - 已找到子记录
解决方式:
1.如果确认需要删除被引用的记录,
则必须先将引用该记录的所有子记录先全部删除,然后再删除父记录
2.设置外键字段级联删除
SQL> create table t_student(
id number(4) primary key ,
name char(10) ,
cno varchar2(255),
foreign key(cno) references t_class(cid)
--设置级联删除
on delete cascade);

级联删除在删除父项时会默认将对应父项的所有子记录全部删除。
3.级联置空
SQL> create table t_student(
id number(4) primary key ,
name char(10) ,
cno varchar2(255),
foreign key(cno) references t_class(cid)
--设置级联置空
on delete set null);

















day1作业

查询职员表中工资大于1600的员工姓名和工资

查询职员表中员工号为7369的员工的姓名和部门号码

选择职员表中工资不在4000到5000的员工的姓名和工资

选择职员表中在20和30号部门工作的员工姓名和部门号

选择职员表中没有管理者的员工姓名及职位, 按职位排序

选择职员表中有奖金的员工姓名,工资和奖金,按工资倒序排列

选择职员表中员工姓名的第三个字母是A的员工姓名

列出部门表中的部门名字和所在城市;

显示出职员表中的不重复的岗位job

连接职员表中的职员名字、职位、薪水,列之间用逗号连接,列头显示成OUT_PUT(提示:使用连接符||、别名)

查询职员表emp中员工号、姓名、工资,以及工资提高百分之20%后的结果

查询员工的姓名和工资数,条件限定为工资数必须大于1200,并对查询结果按入职时间进行排列,早入职排在前面,晚入职排在后面。

列出部门表中除了ACCOUNT部门还有哪些部门。

day2
1.将员工的姓名按首字母排序,并列出姓名的长度(length)

2.做查询显示下面形式的结果
earns monthly but wants
例如:
Dream Salary
King earns $5000 monthly but wants $15000
3.查找员工姓名的长度是5个字符的员工信息。

day3
1.使用decode函数,按照下面的条件:
JOB GRADE
PRESIDENT A
MANAGER B
ANALYST C
SALESMAN D
CLERK E
产生类似下面形式的结果
ENAME JOB GRADE
SMITH CLERK E

2.显示所有员工的姓名ename,部门号deptno和部门名称dname。


3.选择在DALLAS工作的员工的员工姓名、职位、部门编码、部门名字

4.选择所有员工的姓名ename,员工号empno,以及他的管理者mgr的姓名ename和员工号mgr,结果类似于下面的格式
employees Emp# manager Mgr#
SMITH 7369 FORD 7902

5.查询各部门员工姓名和他们所在位置,结果类似于下面的格式
Deptno Ename Loc
20 SMITH DALLAS


day4
1.查询出至少有一个员工的所有部门

2.查询出部门名称和这些部门的员工信息,同时查询出没有员工的部门


3.查询所有“CLERK"(办事员) 的姓名和部门名称,以及部门人数


4.查询出所有员工的姓名和直接上级的姓名


5.查询各job的员工工资的最大值,最小值,平均值,总和


6.选择统计各个job的员工人数(提示:对job进行分组)


7.查询员工最高工资和最低工资的差距,列名为DIFFERENCE;


8.查询各个管理者属下员工的最低工资,其中最低工资不能低于800,没有管理者的员工不计算在内


9.查询所有部门的部门名字dname,所在位置loc,员工数量和工资平均值;



10.查询和scott相同部门的员工姓名ename和雇用日期hiredate

11.查询工资比公司平均工资高的所有员工的员工号empno,姓名ename和工资sal。


12.查询和姓名中包含字母u的员工在相同部门的员工的员工号empno和姓名ename


13.查询在部门的loc为newYork的部门工作的员工的员工姓名ename,部门名称dname和岗位名称job



14.查询管理者是king的员工姓名ename和工资sal


15.显示Operations部门有哪些职位


16.各个部门中工资大于1500的员工人数


17.哪些员工的工资,高于整个公司的平均工资,列出员工的名字和工资(降序)


18.所在部门平均工资高于1500的员工名字


19.列出各个部门中工资最高的员工的信息:名字、部门号、工资


20.哪个部门的平均工资是最高的,列出部门号、平均工资




相关文档