Oracle之旅-简单查询

Oracle-简单查询

Oracle的简单查询

一、使用的表结构

在这里插入图片描述

二、使用管理员创建普通用户并授权

用户名:zhangsan
密码:zhangsan
授权:connect,resource
在这里插入图片描述

三、用创建好的普通执行表结构SQL语句

-- 创建数据表
CREATE TABLE dept (
deptno NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
dname VARCHAR2(14) ,
loc VARCHAR2(13) ) ;
CREATE TABLE emp (
empno NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT );
CREATE TABLE bonus (
enamE VARCHAR2(10) ,
job VARCHAR2(9)  ,
sal NUMBER,
comm NUMBER ) ;
CREATE TABLE salgrade ( 
grade NUMBER,
losal NUMBER,
hisal NUMBER );


-- 插入测试数据 —— dept
INSERT INTO dept VALUES (10,'ACCOUNTING','NEW YORK');
INSERT INTO dept VALUES (20,'RESEARCH','DALLAS');
INSERT INTO dept VALUES (30,'SALES','CHICAGO');
INSERT INTO dept VALUES (40,'OPERATIONS','BOSTON');
-- 插入测试数据 —— emp
INSERT INTO emp VALUES (7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);
INSERT INTO emp VALUES (7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30);
INSERT INTO emp VALUES (7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30);
INSERT INTO emp VALUES (7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20);
INSERT INTO emp VALUES (7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30);
INSERT INTO emp VALUES (7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30);
INSERT INTO emp VALUES (7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10);
INSERT INTO emp VALUES (7788,'SCOTT','ANALYST',7566,to_date('19-04-1987','dd-mm-yyyy')-85,3000,NULL,20);
INSERT INTO emp VALUES (7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10);
INSERT INTO emp VALUES (7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30);
INSERT INTO emp VALUES (7876,'ADAMS','CLERK',7788,to_date('23-05-1987','dd-mm-yyyy')-51,1100,NULL,20);
INSERT INTO emp VALUES (7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30);
INSERT INTO emp VALUES (7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20);
INSERT INTO emp VALUES (7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10);
-- 插入测试数据 —— salgrade
INSERT INTO salgrade VALUES (1,700,1200);
INSERT INTO salgrade VALUES (2,1201,1400);
INSERT INTO salgrade VALUES (3,1401,2000);
INSERT INTO salgrade VALUES (4,2001,3000);
INSERT INTO salgrade VALUES (5,3001,9999);

-- 事务提交
COMMIT;

四、完成下面的查询语句

1、单表查询

①将所有员工的工资上浮10%.然后查询员工姓名、薪水、补助。(emp.sal为工资,emp.comm为补助)

update emp set sal=sal*1.1; 
select emp.ename 姓名,emp.sal 薪水,emp.comm 补助 from emp;

在这里插入图片描述

②查看EMP表中部门号为10的员工的姓名,职位,参加工作时间,工资。

select emp.ename 姓名,emp.job 职位,emp.hiredate 参加工作时间,emp.sal 工资 from emp where deptno=10;

在这里插入图片描述

③查所有已有的职位,要求去除重复项。

select distinct job 职位 from emp;

在这里插入图片描述

④计算每个员工的年薪,并取列名为Salary of Year(emp.sal为员工的月薪),要求输出员工姓名,年薪。

select emp.ename 姓名,emp.sal*12 SalaryofYear from emp;

在这里插入图片描述

⑤查询每个员工每个月拿到的总金额(emp.sal为工资,emp.comm为补助)。(提示:NVL(ex1,ex2)表示如果ex1为空则返回ex2)

select emp.ename 姓名,nvl(emp.sal+emp.comm,emp.sal) as 总金额 from emp;

在这里插入图片描述

⑥显示职位是主管(manager)的员工的姓名,工资。

select emp.ename 姓名,emp.sal 工资 from emp where emp.job='MANAGER';

在这里插入图片描述

⑦显示第3个字符为大写O的所有员工的姓名及工资。

select emp.ename 姓名,emp.sal 工资 from emp where emp.ename like '__O%';

在这里插入图片描述

扫描二维码关注公众号,回复: 10523668 查看本文章

⑧显示职位为销售员(SALESMAN)或主管(MANAGER)的员工的姓名,工资,职位。

select emp.ename 姓名,emp.sal 工资,emp.job 职位 from emp where emp.job='SALESMAN' or emp.job='MANAGER';

在这里插入图片描述

⑨显示所有没有补助的员工的姓名。

select emp.ename 姓名 from emp where emp.comm is null;

在这里插入图片描述

⑩显示有补助的员工的姓名,工资,补助。

select emp.ename 姓名,emp.sal 工资,emp.comm 补助 from emp where emp.comm is not null;

在这里插入图片描述

⑩①排序显示所有员工的姓名,工资(按工资降序方式)。

select emp.ename 姓名,emp.sal 工资 from emp order by emp.sal desc;

在这里插入图片描述

⑩②显示员工的最高工资和最低工资。

select max(sal) 最高工资,min(sal) 最低工资 from emp;

在这里插入图片描述

⑩③显示所有员工的平均工资和总计工资。

select avg(sal) 平均工资,sum(sal) 总计工资 from emp;

在这里插入图片描述

2、聚合查询

①显示每种职业的平均工资。

select job 职业,avg(sal) 平均工资 from emp group by job;

在这里插入图片描述

②显示每个部门每种岗位的平均工资和最高工资。

select emp.deptno 部门编号,emp.job 职位,avg(sal) 平均工资,max(sal) 最高工资 from emp group by emp.job,emp.deptno;

在这里插入图片描述

③显示平均工资低于2500的部门号,平均工资及最高工资。

select emp.deptno 部门编号,avg(sal) 平均工资,max(sal) 最高工资 from emp group by emp.deptno having avg(sal)<2500;

在这里插入图片描述

④上一条语句以平均工资升序排序。

select emp.deptno 部门编号,avg(sal) 平均工资,max(sal) 最高工资 from emp group by emp.deptno having avg(sal)<2500
order by 最高工资;

在这里插入图片描述

⑤18.查询总共有多少种工作。

select count(distinct job) from emp; 

在这里插入图片描述

3、多表查询

①显示工资高于2500或岗位为MANAGER的所有员工的姓名,工资,职位,和部门号。

select emp.ename 姓名,emp.sal 工资,emp.job 职位,emp.deptno 部门编号 from emp where emp.sal>2500 or emp.job='MANAGER';

在这里插入图片描述

②排序显示所有员工的姓名,部门号,工资(以部门号升序,工资降序,雇用日期升序显示)。

select emp.ename 姓名,emp.sal 工资,emp.deptno 部门编号 from emp order by 部门编号,工资 desc, emp.hiredate;

在这里插入图片描述

③采用表连接显示部门名以及相应的员工姓名。

select dept.dname 部门名称,emp.ename 姓名 from emp inner join dept on emp.deptno=dept.deptno;

在这里插入图片描述

④查询SCOTT的上级领导的姓名。

select emp2.ename 姓名 from emp emp1 inner join emp emp2 on emp1.mgr=emp2.empno where emp1.ename='SCOTT';

在这里插入图片描述

⑤显示部门的部门名称,员工名即使部门没有员工也显示部门名称。

select dept.dname 部门名称,emp.ename 员工名 from emp inner join dept on emp.deptno=dept.deptno;

在这里插入图片描述

4、子查询

①显示所有员工的名称、工资以及工资级别。

select emp.ename 姓名,emp.sal 工资,salgrade.grade 工资级别 from emp inner join salgrade on emp.sal>=salgrade.losal 
and emp.sal<=salgrade.hisal;

在这里插入图片描述

②显示ACCOUNTING部门所有员工的名称,工资。

select emp.ename 员工名称,emp.sal 工资 from emp inner join dept on emp.deptno=dept.deptno where dept.dname='ACCOUNTING';

在这里插入图片描述

③显示职位属于10号部门所提供职位范围的员工的姓名,职位,工资,部门号。

select emp.ename 姓名,emp.job 职位,emp.sal 工资,emp.deptno 部门号 from emp where job in
(select job from emp where deptno=10);

在这里插入图片描述

④显示在所有员工中高于30号部门中任一个员工工资的员工的姓名,工资和部门号。

select emp.ename 姓名,emp.sal 工资,emp.deptno 部门号 from emp where emp.sal>(select max(sal) from emp where deptno=30);

在这里插入图片描述

⑤查询比SCOTT员工的薪资高的所有雇员。

select * from emp where emp.sal>(select sal from emp where emp.ename='SCOTT');

在这里插入图片描述

⑥查询和Scott在同一个部门的所有员工。

select emp.ename 姓名 from emp where emp.deptno=(select dept.deptno from emp,dept where emp.deptno=dept.deptno and ename='SCOTT');

在这里插入图片描述

⑦查询薪资最低的员工的姓名。

select emp.ename 姓名 from emp where sal=(select min(sal) 最低工资 from emp) ;

在这里插入图片描述

⑧查询比Scott入职还要晚的员工薪资。

select emp.ename 姓名,emp.sal 薪资 from emp where emp.hiredate>(select emp.hiredate from emp where emp.ename='SCOTT');

在这里插入图片描述

5、集合查询

①显示工资高于2500或职位为MANAGER的员工的姓名,工资和职位(采用UNION语法实现)。

select ename,SAL,job fromEMP where SAL>2500 union select ename,SAL,job fromEMP where JOB='manager'

在这里插入图片描述

②显示工资高于2500且职位为MANAGER的员工的姓名,工资和职位(采用INTERSECT语法实现)。

select ename,SAL,job fromEMP where SAL>2500INTERSECT select ename,SAL,job fromEMP where JOB='manager'

在这里插入图片描述

发布了6 篇原创文章 · 获赞 4 · 访问量 633

猜你喜欢

转载自blog.csdn.net/weixin_46731640/article/details/105330048