【Oracle】笔记

[Oracle笔记]

进入DOS按: win+R 输入sqlplus 回车
username: sys as sysdba 回车
password : 密码为空不写直接回车
检查当前登录的用户: show user
连接命令
(1)conn[ect]
用法: conn 用户名/密码@网络服务名 [as sysdba/sysoper]
当用特权用户身份连接时,必须带上 as sysdba 或是 as sysoper
案例: conn scott/123456
(2)disc[onnect]
说明:该命令用来断开与当前数据库的连接
(3)passw[ord]此命令只适用于SYSTEM
说明:该命令用于修改用户的密码.如果要想修改其它用户的密码,需要用sys/system登陆.
(4)show user
说明:显示当前用户名
(5)exit
说明:该命令会断开与数据库的连接,同时会退出sql*plus
修改权限设置一般情况下使用dba用户
修改用户密码:

语法:alter user 用户名  identified by 新密码;
案例:alter user system identified by 123456;

锁定用户

语法:alter user 用户名 account lock;
案例:alter user scott account lock;

解除锁定

语法:alter user 用户名 account unlock;
案例:alter user scott account unlock;

显示和设置环境变量
概述:可以用来控制输出的各种格式。
(1)linesize
说明:设置显示行的宽度,默认是80个字符

 sql>show linesize    显示宽度
  sql>set linesize 90   设置宽度

(2)pagesize
说明:设置每页显示的行数目,默认是14,用法和linesize一样。
至于其它环境参数的使用也是大同小异

锁定用户
语法:alter user 用户名 account lock;
案例:alter user scott account lock;
解除锁定
语法:alter user 用户名 account unlock;
案例:alter user scott account unlock;
显示和设置环境变量
概述:可以用来控制输出的各种格式。
(1)linesize
说明:设置显示行的宽度,默认是80个字符
sql>show linesize 显示宽度
sql>set linesize 90 设置宽度
(2)pagesize
说明:设置每页显示的行数目,默认是14,用法和linesize一样。
至于其它环境参数的使用也是大同小异

Spool c:/笔记.txt
Spool off (结束)
“/”执行上一条语句
Edit(修改错误的语句)修改完成输入“/”执行
“–”单行注释
/**/多行注释
查看表结构:desc emp(常用)
清屏 host cls
set timing on/off(on表示开启Oracle中语句执行时间的计算)
管理员用户使用普通用户的表
语法: select * from 用户名.表名
创建用户:(管理员)
语法:create user 用户名 identified by 密码
案例: create user scxh identified by 123456;
备注: 新创建的用户,没有任何的权限,包括登录都没有
给用户修改密码
概述:如果给自己修改密码可以直接使用
sql>password 用户名
如果给别人修改密码则需要具有dba的权限,或是拥有alter user的系统权限
sql>alter user 用户名 identified by 新密码

1.创建用户

例子: sql> create user dongshao identified by m123
          default tablespace users
          temporary tablespace temp
          quota 3m on users;

identified by //表明该用户dongshao 将用数据库方式验证
default tablespace users //用户的表空间在users上
temporary tablespace temp //用户dongshao的临时表健在temp 空间
quota 3m on users //表明用户dongshao 建立的数据对象(表,索引,视图,pl/sql块…)最大只能是3m

刚刚创建的用户是没有任何权限的,因此,需要dba给该用户授权.

sql>grant connect to dongshao 

如果你希望该用户建表没有空间的限制

sql>grant resource to dongshao

如果你希望该用户成为dba

sql>grant dba to dongshao

1.2删除用户

概述:一般以dba的身份去删除某个用户,
如果用其它用户去删除用户则需要具有 drop user的权限。
比如 drop user 用户名 【cascade】
案例: drop user scxh cascade;
cascade: 如果这个用户下面创建了表,则使用这个

System给东少权限时

Grant connect to dongshao with admin option
create session:登录
create table :创建表
create view:试图

1.创建2个用户

Create user dongshao1 identified by 123456;
Create user dongshao2 identified by 123456;

2.给dongshao1这个用户添加权限,并且让其可以继续授予其他用户的权限

grant create session,create table to dongshao1 with admin option;
grant create view to dongshao1;

3.使用dongshao1用户给dongshao2用户授权.

grant create session,create table to dongshao2 with admin option;

4.使用dongshao1用户给dongshao2授权视图权限的时候,会提示权限不足

grant create view to dongshao2;

1.3回收权限

revoke create session from dongshao1; --这个是冬哥哥

1.创建两个用户 qq , tt.初始阶段他们没有任何权限,如果登陆就会给出错误的信息
1.1创建两个用户,并指定密码.

2.给用户qq授权:

2.1:授予create session 和create table权限时 带with admin option

2.2 授予create view 时不带with admin option

对象权限;

  1. 给用户设置对象权限
语法:grant 权限 on 对象 to 用户名  with grant option
案例:grant select on emp to monkey

设置用户访问权限更加精细控制.(授予列权限)

语法: grant update on 表名(列名称) to 用户名
案例: grant update on emp(sal) to monkey;

㈠建立角色(不验证)

如果角色是公用的角色,可以采用不验证的方式建立角色.
语法:create role 角色名 not identified;
案例:create role mydongshao1 not identified;  没有任何权限

㈡建立角色(数据库验证)

语法:create role 角色名 identified by 口令
案例:create role 角色名 identified by dongshao

指定scott这个用户最多只能尝试3次登陆,锁定时间为2天,让我们看看怎么实现
创建profile文件

语法:create profile pro名称 limit failed_login_attempts 3次 password_lock_time 2天;
案例:sql> create profile lock_account limit failed_login_attempts 3 password_lock_time 2;

给用户设置profile

语法: alter user 用户 profile pro名称;
案例:sql> alter user scott profile lock_account;

2.创建表

语法:

create table  表名(
  字段名称1    字段类型,
  字段名称2    字段类型
  ...
)

创建一个表,对这个表进行CRUD
案例: 创建一个wwdz,然后对这个进行表增删改查

create table wwdz(
   id  number,   --编号
   name  varchar2(20),   --姓名
   tel char(11),    --电话
   datetime date default sysdate   --时间
);

查询表中的所有数据

语法: select * from 表名
案例: select * from wwdz

对wwdz这个表添加一条数据

语法: insert into 表名(字段名称1,字段名称2,字段名称3,...) values(值1,值2,值3,...);
案例: insert into wwdz(id,name,tel) values(2,'还厉害哦',12312312312);
案例: insert into wwdz(id,name,tel) values(2,'还厉害哦','12312312312');
案例: insert into wwdz(id,name,tel) values('三','你真的很厉害哦','12312312312');  错误的

修改wwdz表中的某一行数据

语法: update 表名 set  字段名称1=值1,字段名称2=值2 备注: 如果执行这个语句,整个表都将被修改(慎用)
语法: update 表名 set  字段名称1=值1,字段名称2=值2  where 条件
案例: 修改编号2这个用户的电话号码为:13888888888,姓名: 方志华
案例: update wwdz set name='方志华',tel=138888888888 where id=2;

删除wwdz表中某一条数据

语法: delete from 表名  如果执行这个语句,整个表的数据都没有了(慎用)
语法: delete from 表名  where 条件
案例: delete from wwdz where id=3;

删除表:

语法:drop table 表名
案例:drop table wwdz

2.1表

语法:
create table 表名(
字段1 类型1,
字段2 类型2,
)
添加
insert into 表名(字段1,字段2) values(值1,值2,)
修改
update 表名 set 字段1=值,字段2=值 where 条件
删除:
delete from 表名 where 条件
查询:
查询表中的所有数据:select * from 表名
带条件查询: select * from 表名 where 条件
单独查询指定字段: select 字段1,字段2,… from 表名 where 条件

varchar2(20) 变长
char(20) 定长
字符类型,并且长度为20字符(10个中文)

number : 数值

语法: number(p,s)
案例: number(5,2);

解释: 代表数值类型,有五个有效位,两个小数位(最大位:999.99)

子查询创建表
根据一个表来创建另外的一个表:(表结构和表内容一起被复制)

语法: create table  新表名  as  select * from 旧表名
案例: create table  dongshao as select * from emp;
查看结果: select * from dongshao;

只复制表的结构

语法:create table 新表名 as select * from 旧表名 where 1=2
案例:create table dongge as select * from emp where 1=2
查看结果:select * from dongge;
查看结构: desc dongge;

复制表内容(将一个原有表中的数据,复制到另一个表中,不指定字段,全部复制)

语法:insert into 目标表  select * from 原表
案例:insert into dongge  select * from emp
查看结果: select * from dongge;

复制表内容(将一个原有表中的数据,复制到另一个表中,并且指定字段)

语法:insert into 目标表(字段1,字段2) select 字段1,字段2 from 原表;
案例:insert into tongzhai(id,name) select empno,ename from emp;

创建一个tongzhai表
create table tongzhai(
id int,
name varchar(30)
)
查看结果

select * from tongzhai;

2.2修改表结构

追加新列

语法:alter table 表名 add 字段名 类型;
案例:alter table tongzhai add age tinyint;
tinyint: 范围: -128到127

修改列

语法:alter table 表名 modify 字段名 类型;
案例:alter table tongzhai modify age int;

修改默认值的设置:

语法:alter table 表名 modify 字段名 类型 default 默认值;
案例:alter table tongzhai modify age int default 11;

删除列(不要轻易删除一个字段)

语法:alter table 表名 drop column 字段名
案例:alter table dongshao drop column address

重命名列

语法:alter table 表名 rename column 旧名称 to 新名称
案例:alter table dongshao rename column name to a_name

修改表的名称(表的名称也不要修改)

语法:rename 旧表名 to 新表名;
案例:rename student2 to do;

3.约束

创建约束:
语法:
create table 表名(
字段名称 字段类型 constraint 约束名称 约束
字段名称 字段类型 constraint 约束名称 约束 约束

)
案例:

create table myperson(
     id varchar2(18) constraint myperson_PK primary key,  --primary key主键约束
     name varchar2(40) constraint myperson_Name_notnull not null,  --not null不能为空
     gender varchar2(4) constraint myperson_Gender check (gender in ('男','女')),  --check查验
     email varchar2(40) constraint myperson_Email_unique unique  --unique唯一
                        constraint myperson_Email_notnull not null,  --not null不能为空
     deptno number constraint myperson_FK references dept(deptno) ON DELETE CASCADE  
     --references外键约束
 );

删除约束:

语法:alter table 表名 drop constraint 约束名称;
案例:alter table myperson drop constraint myperson_PK;

给列添加约束

语法:alter table 表名 add(constraint 约束名称  约束(字段))
案例:alter table dongge add(constraint pk_id  primary key(id))

创建一个表

create table bb(
   id  number primary key,
   name varchar2(20) default '成都新华高级技工学校',
   age number(2) not null,
   zhc  varchar2(20) default '' not null,
   status number,  --1: 正常,0:非正常
   create_time  number  --时间戳:1232654553  时间:'2022-12-12 12:12:12'  
)

3.1课堂抽查

  1. 创建一个表,要求有(编号,姓名,性别,时间,年龄,电话,描述)
create table db(
id number,
name varchar2(20),
sex varchar(2),
time date,
nianling varchar(2),
tel char(11),
miaosu varchar(40));

  1. 给表中的编号设置主键约束
1. alter table db add(primary key(id));

  1. 给表中的姓名设置不能为空
alter table db modify name not null;

  1. 给表中的性别设置只能选择男或者女
alter table db add(constraint xb check(sex='男' or sex='女'));

  1. 给表中的时间设置默认为系统时间
alter table db modify time default sysdate;

  1. 给表中的年龄设置一个范围18–22之间
alter table db add(constraint nianling_check check(nianling>=18 and nianling<=22));
alter table db drop constraint nianling_check;
alter table db add(constraint nianling_check check(nianling between 18 and 22));

  1. 给表中的电话设置唯一
alter table db modify tel unique; 

添加表注释

语法:comment on table 表名 is '注解名称';
案例:comment on table student is '学生表';

添加每个字段的注释

语法:comment on column 表名.字段名称  is '注解名称';
案例:comment on column db.tel  is '电话号码';

添加语句:

语法1: insert into 表名(字段1,字段2,..) values(值1,值2,..)   字段和值一一对应
语法2: insert into 表名  values(值1,值2,..)  一一对应

插入之前改变日期表达式的方法:(日-月-年) ‘15-3月-2022’ ‘2022-03-15’

alter session set nls_date_format='yyyy-mm-dd';

插入数据时修改时间表达式

insert into emp(empno,hiredate) values(9527,to_date('1990-02-03','yyyy-mm-dd'));

修改数据

语法: update 表名  set  字段=值,字段=值  where  条件

删除

语法: delete from 表名 where 条件

4.查询

查询表中所有数据
select * from 表名
查询表中指定列
select 列1,列2,… from 表名
根据条件查询指定的数据
select * from 表名 where 条件
where: 条件查询,根据指定的条件进行查询
emp表中的字段的解释
EMPNO : 编号
ENAME : 姓名
JOB : 职位
MGR : 领导的编号
HIREDATE : 入职日期
SAL : 工资
COMM : 奖金
DEPTNO : 部门编号

  1. 请查询出emp表中员工的姓名,工资和奖金
select ename,sal,comm from emp;

  1. 请查询出emp表中部门编号为20的所有员工
select * from emp where deptno=20;

显示每个雇员的年工资

select sal*12 from emp;

使用列的别名: as 设置别名

语法: select  字段 as 别名  from 表名;
语法: select  字段  别名  from 表名;
select sal*12 as "年薪" from emp;
select sal*12  "年薪" from emp;
select sal*12  year_money from emp;

12)+comm from emp; 这里我们使用年薪+null = null
使用nvl函数来处理
语法: nvl(字段,默认): 如果字段不为null,则使用字段的值,否则使用默认值(默认值为自定义)
语法案例:select nvl(字段名称,默认值) from emp;

sql案例:select ename,(sal*12)+nvl(comm,0)  from emp; 

如何连接字符串(||)(输出: XXX姓名的工资的多少)
语法: 字段名称 || 字段名称

select ename||'的薪资为:'||sal from emp;
select ename||sal from emp;

?如何显示某人是什么岗位

select ename,job from emp where ename='黄木城'; 

4.1 使用where子句

?如何显示工资高于3000的员工

select * from emp where sal >= 3000;

?如何查找1982.1.1后入职的员工

select * from emp where hiredate >= '1982';

?如何显示工资在2000到3000的员工情况

select * from emp where sal >= 2000 and sal <= 3000;

4.2 between——在某个范围:

语法:  字段名称  between  起始值  and  结束值
select * from emp where sal between 2000 and 3000;

?如何显示工资不在2000到3000的员工情况

select * from emp where sal not between 2000 and 3000;

?查询SMITH 的薪水,工作,所在部门

select ename,sal,job,depeno from emp where ename='SMITH';

1、distinct——过滤掉多余的重复记录只保留一条
select distinct deptno from emp; 这里,distinct deptno会过滤掉重复的deptno
select distinct comm from emp; distinct也可以过滤掉重复的null,或者说如果有多个null,只输出一个
select distinct comm, deptno from emp; 把comm和deptnor的组合进行过滤
select deptno, distinct comm from emp; 逻辑上有冲突
select ename, * from emp; 这个在SqlServer里正确,在Oracle里不正确

4.3 in(属于若干个孤立的值)

语法: 字段 in(值1,值2,值3);: 如果没有查询到,则返回空,不显示
语法: 字段 not in(值1,值2,值3);: 不在这个范围内的所有数据
案例: empno in(6666,7777,8888,9999)
表案例: select * from emp where ename in(‘大哥’,‘黄木城’);
数据库中的 and和&&一个意思 or和||一个意思
表案例: select * from emp where ename=‘大哥’ or ename=‘黄木城’;
表案例: select * from emp where empno in(6666,7777,8888,9999);
不在这个范围内的所有数据 not in
表案例: select * from emp where empno not in(6666,7777,8888,9999);

4.4 null 空 ,没有值

零和null是不一样的,null表示空值,没有值;零表示一个确定的值
null不能参与如下运算:<> != =
null可以参与如下运算:is is not
语法: select * from 表名 where 字段 is null
语法: select * from 表名 where 字段 is not null

select * from emp where comm <> null;	--错误
select * from emp where comm != null;	--错误
select * from emp where comm is not null;	--正确

select * from emp where comm = null;	--错误
select * from emp where comm is null; -- 正确

select * from emp where comm is null;              --输出奖金为空的员工的信息
select * from emp where comm is not null;	--输出奖金不为空的员工的信息

思考:如何显示没有上级的雇员的情况
select * from emp where mgr is null;

4.5 order by: 排序

如果不指定排序的标准,则默认是升序,升序用asc表示,默认可以省略不写,降序用desc表示
为一个字段指定的排序标准并不会对另一个字段产生影响
强烈建议为第一个字段都指定排序的标准
语法: select * from 表名 order by 字段 asc; 默认为升序asc(可以不写)
语法: select * from 表名 order by 字段1,字段2; 都是升序
语法: select * from 表名 order by 字段1,字段2 desc; 先升后降
语法: select * from 表名 order by 字段1 desc, 字段2; 先降后升
语法: select * from 表名 order by 字段1 desc, 字段2 desc; 都降
备注: 在进行排序时,如果设置了多个,当第一个有相同排序时,则继续执行第二排序规则

4.6 模糊查询 like

语法:
select * from 表名 where 字段 like ‘%值%’; 匹配带有该值的所有字段的值
select * from emp where ename like ‘%S%’; 匹配ename字段所有值中带有S的名字

select * from 表名 where 字段 like ‘值%’; 匹配以该值开头的所有字段的值
select * from emp where ename like ‘S%’; 匹配ename字段以S开头的所有字段值

select * from 表名 where 字段 like ‘%值’; 匹配以该值结尾的所有字段的值
select * from emp where ename like ‘%S’; 匹配ename字段以S结尾的所有字段值

何波提问: 万一别人的名称里面就有’_'怎么办??
select * from 表名 where 字段 like '值%‘; 第一个’'占位符,查询字段值的第二个值相同的字段值
select * from 表名 where 字段 like ‘_S%’; 匹配ename第二个值为s的所有字段值

select * from 表名 where 字段 like ‘__值%’; 前两个’_'占位符,查询字段值的第三个值相同的字段值
select * from emp where ename like ‘__S%’; 匹配ename第三个值为s的所有字段值

思考:在 emp 表中查询工资高于500或是岗位为MANAGER的雇员,
同时还要满足他们的姓名首字母为大写的 J。

select * from emp where sal>500 or job=‘MANAGER’ and ename like ‘J%’;

1.找出佣金高于薪金的雇员
select * from emp where comm>sal;

2.找出佣金高于薪金60%的雇员

select * from emp where comm>sal*0.6;

3.找出部门10中所有经理和部门20中的所有办事员的详细资料

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

4.显示不带有’R’的雇员姓名

select * from emp where ename not like '%R%';

5.显示雇员姓名,根据其服务年限,将最老的雇员排在最前面

select ename,hiredate from emp order by hiredate;

6.显示所有雇员的姓名、工作和薪金,按工作的降序顺序排序,而工作相同时按薪金升序

select ename,job,sal from emp order by job desc,sal;

4.7 数据分组-max,min,avg,sum,count

AVG(字段) 数字表达式中所有值的平均值
SUM(字段) 表达式中所有值的和
COUNT(字段) 表达式中值的个数
COUNT(*) 统计总条数
MAX(字段) 表达式中的最高值
MIN(字段) 表达式中的最低值

?如何显示所有员工中最高工资和最低工资

select max(sal),min(sal) from emp;

?显示所有员工的平均工资和工资总和

select avg(sal),sum(sal) from emp;

?计算共有多少员工

select count(*) from emp;

  1. 查询出emp表中有哪些职位
   select * from emp  order by job;
   select job from emp  group by job;
   select distinct job from emp;

select comm from emp  group by comm;

?如何显示每个部门的平均工资和最高工资

select deptno,max(sal) ,avg(sal),sum(sal) from emp group by deptno;

?显示每个部门的每种岗位的平均工资和最低工资

select job,max(sal) ,avg(sal),min(sal) from emp group by job;

?显示平均工资低于2000的部门号和它的平均工资

select avg(sal),deptno from emp group by deptno having avg(sal) < 2000 ;

扩展要求:
显示工资低于2000,部门平均工资低于1000的部门号和部门平均工资

select deptno,avg(sal) from emp where sal<2000 group by deptno having avg(sal)<1000;

4.8 笛卡尔集:

语法: select * from 表名1,表名2 where 条件(条件是两个表都满足的情况下)
显示所有员工的姓名,工资,部门号和部门名称

  1. 根据两个表中的deptno条件进行比对查询出所有的数据
select * from emp,dept where emp.deptno=dept.deptno;
select emp.ename,emp.sal,emp.deptno,dept.dname from emp,dept where emp.deptno=dept.deptno;
select a.ename,a.sal,b.deptno,b.dname,b.LOC from emp a,dept b where a.deptno=b.deptno;

  1. ?显示SCOTT用户,工资及所在部门的名字 【笛卡尔集】
    结果:
eanme    sal       dname
SCOTT    3000.00   RESEARCH 
select a.ename,a.sal,b.deptno,b.dname,b.LOC from emp a,dept b 
where a.deptno=b.deptno  and  a.ename='SCOTT';

?查询雇员姓名,工资以及工资等级

 select e.ename, e.sal, s.grade from emp e,salgrade s 
 where e.sal between s.losal and s.hisal;

?如何显示部门号为10的部门名、员工名和工资

select d.dname,e.ename,e.sal from emp e,dept d where e.deptno=d.deptno and e.deptno=10;

扩展要求:
?显示雇员名,雇员工资,工资等级及所在部门的名字,并按部门排序.

select e.ename,e.sal,s.grade from emp e,dept d,salgrade s where 
(e.sal between s.losal and s.hisal)and e.deptno=d.deptno order by d.dname;

12.要求查询出所有在1981年雇佣的雇员信息。

select * from emp where hiredate between '1-1月-1981' and '31-12月-1981';

13.查询所有领取奖金的雇员信息(comm不为空)。

select * from emp where comm is not null;

14.查询所有领取奖金高于100的雇员信息。

select * from emp where comm >100;

15.查询出雇员编号是7369、7566、9999的雇员信息。

select * from emp where empno=7369 or empno=7566 or empno=9999;
select * from emp where empon in('7369','7566','9999');

16.查询出所有雇员姓名是以A开头的全部雇员信息。

select * from emp where ename like‘%a%’

17.查询出雇员姓名第二个字母是M的全部雇员信息。

select * from emp where ename like '_M%';

18.查询出雇员姓名任意位置上包含字母A的全部雇员信息。

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

19.查询出所有雇员的信息,要求按照工资排序。

select * from emp order by sal;

20.要求查询所有雇员的信息,按照雇佣日期由先后排序。

select * from emp order by hiredate;

21.查询全部雇员信息,按照工资由高到低排序,如果工资相同,则按照雇佣日期由先后排序

select * from emp order by sal desc,hiredate;

22.查询部门30中的所有员工。

select * from emp where deptno = 30;

23.查询出所有办事员(CLERK)的姓名,编号和部门编号。

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

24.查询出奖金高于薪金的员工。

select * from emp where COMM>sal;

25.查询出奖金高于薪金的60%的员工。

select * from emp where comm>sal*0.6;

26.查询出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料。

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

27.查询出部门10中所有经理,部门20中所有办事员,既不是经理又不是办事员但其薪金大于或等于2000的所有员工的信息。

select * from emp where  (deptno=10 and job='MANAGER')or
(deptno=20 and job='CLERK')and(job!='MANAGER'and job!='CLERK')and sal>=2000;

28.查询出收取奖金的员工的不同工作。

select job from emp where comm is not null group by job;

29.查询出不收取奖金或收取的奖金低于100的员工。

select * from emp where comm is null or comm<100;

30.查询出不带有“R”的员工的姓名。

select ename from emp where ename not like '%R%';

31.查询出每个雇员的姓名、职位、领导姓名。

select a.ename,a.job,b.ename from emp a,emp b where a.deptno=b.empno;

32.查询出所有员工的编号、姓名及其直接上级的编号、姓名,显示的结果按领导年工资的降序排列。

select a.empno,a.ename,b.empno,b.ename,b.sal from emp a join emp b on a.empno = b.mgr order by (a.mgr * 12) desc;

33.查询出在销售部(SALES)工作的员工姓名、基本工资、雇佣日期、部门名称。(不知道销售部编号)。

select a.ename,a.sal,a.HIREDATE,b.dname from emp a
join dept b on a.deptno = b.deptno where b.dname = 'SALES';

34.查询出所有员工的姓名、部门名称和工资。

select e.ename,e.sal,e.deptno,d.dname from emp e,dept d where e.deptno=d.deptno;

35.查询出所有员工的年工资,所在部门名称,按年薪从低到高排序。

select e.ename,e.sal*12,d.dname from emp e,dept d where e.deptno=d.deptno order by e.sal*12;

36.查询出某个员工的上级主管及所在部门名称,并要求出这些主管中的薪水超过3000。

select distinct c.dname,b.ename,b.sal from emp a,emp b,dept c where a.mgr=b.empno and b.deptno=c.deptno and b.sal>3000;

37.查询出公司的最高和最低工资。

select min(sal),max(sal) from emp;

38.查询出每个部门的人数、平均工资,只显示部门编号。

select count(ename),avg(sal),deptno from emp where group by deptno;

39.查询出每种职位的最高和最低工资。

select max(sal),min(sal),job from emp group by job;

40.查询平均工资高于2000的职位信息,以及从事此职位的雇员人数、平均工资。

select avg(sal),count(ename),job from emp group by job having avg(sal)>2000;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值