SqlPlus 命令
在oracle中使用sqlplus命令来操作数据库。
首先在windows下打开cmd命令窗口。
示例:sqlplus命令使用
sqlplus回车 输入用户和命令 |
示例:切换到scott用户
conn scott/tiger |
在scott 用户默认提供有一张emp雇员表,我们使用select语句查询一下。
select * from emp; |
为了格式化显示我们使用一下命令:
set linesize 300 –表示设置行的尺寸 set pagesize 30 –表示设置每页显示多少记录 |
服务的配置
在win 的服务中,把Oracle相关的服务自动设置为手动。
oracle服务的开启
监听服务OracleOraDb11g_home1TNSListener 实例服务OracleServiceORAC |
开启监听和实例服务之后我们就可以正常使用sqlplus来操作oracle了。
基本的SQL语句示例(增删改查)
select * from emp; select * from dept; |
示例:查询所有雇员的雇员编号、雇员姓名、薪资、职位。
select empno,ename,sal,job from emp; |
示例:查询所有雇员的雇员编号、雇员姓名、年薪。
select empno,ename,sal*12 from emp; |
示例:列出emp表中所有的部门编号(dis)。
select distinct deptno from emp; |
示例:列出emp表中所有的职位及对应的部门编号。
select distinct job,deptno from emp; |
切换用户、虚拟表dual
切换用户时,sys用户必须使用dba身份登录
conn sys/change_on_install as sysdba conn system/manager conn scott/tiger conn sh/sh |
虚拟表dual
now() –MySQL日期(函数) sysdate –Oracle日期(伪列) select sysdate from emp;(不用虚拟表,不方便) select sysdate from dual; |
接下来的内容要求有MySql基础。
练习题目:
题目1:查询每个部门的平均薪水,之后显示部门平均薪水>2000的部门编号和其平均薪水。
select avg(sal) from emp group by deptno; select deptno,avg(sal) from emp group by deptno having avg(sal)>2000; |
题目2:描述SQL语句:select deptno,avg(sal) from emp where sal>2000 group by deptno;
用文字描述,注意:薪资大于2000的雇员筛选出,对筛选出的数据再分组。 |
题目2扩展:查询在平均薪水大于2000的部门中,薪水大于三千的员工所在部门的部门编号,部门平均薪水。
select deptno,avg(sal) from emp group by deptno having avg(sal)>2000; select deptno,avg(sal) from emp where deptno in(select deptno from emp group by deptno having avg(sal)>2000) and sal >3000 group by deptno; |
其实与以下语句是等价的
select deptno,avg(sal) from emp where sal>3000 group by deptno having avg(sal)>2000; |
题目3:查询每个部门的薪水和,再计算出所有部门的薪水的平均值。
select sum(sal) from emp group by deptno; select deptno,sum(sal),avg(sal) from emp group by deptno; |