实验四 SQL语言
【实验目的】
-
掌握在Oracle中添加示例方案的方法
-
熟练掌握SQL语言的查询功能
-
掌握SQL Plus常用命令
【实验内容】
一、 需要访问HR示例方案中的表,如果机器上没有该示例方案,则运行相关包和相应配置装入HR方案。如果已有HR方案,则跳过该步骤。
-
将
hr.rar
解压到D:\oracle\product\10.2.0\db_2\demo\schema\ human_resources
目录下(不同机房可能根目录不同,也可能在C盘下,相应解压位置和下面的命令都要随之改变),然后在SQL*PLUS
中执行hr_main.sql
这个文件,以SYS用户登录并执行SQL>@D:\oracle\product\10.2.0\db_2\demo\schema\human_resources\hr_main.sql
-
然后按提示依次输入如下:***是你oracle安装目录下的
\product\10.2.0\db_2\RDBMS\log
的文件路径Specify passwordfor HR as parameter 1: Enter valuefor 1: hr Specify default tablespeacefor HR as parameter 2: Enter valuefor 2: users Specify temporary tablespacefor HR as parameter 3: Enter valuefor 3: temp Specify passwordfor SYS as parameter 4: Enter valuefor 4:runner Specify log path as parameter 5: Enter valuefor 5: D:\oracle\product\10.2.0\db_2\RDBMS\log
对于在官网下载和安装的Oracle Database 11g
,其已安装HR,若要使用首先需按照下列步骤进行解锁
二、 完成下面的查询,记录查询命令和结果。
-
查询HR方案种有哪些表,列出表名
-
设置行宽为160,每页行数为40
-
查询employees表中所有薪水在3000到6000元之间的员工编号、姓、名、受聘日期、工作代号、薪水、经理代号、部门号,按部门号升序排列,同一部门按员工编号降序排列,使用如下语句:
select employee_id, first_name, last_name, hire_date, job_id, salary, manager_id, department_id from HR.employees where salary > 3000 and salary<6000 order by department_id asc,employee_id desc;
-
查询每个部门的人数、平均薪水、最高薪水、最低薪水,按部门编号升序排列,使用如下语句
select department_id, avg(salary), max(salary), min(salary), count(employee_id) from HR.employees where salary > 3000 and salary < 6000 group by department_id order by department_id asc;
-
查询first_name的第三个字母是t的员工编号,first_name,电话号码,部门编号,部门名称,使用语句
select EMPLOYEE_ID, FIRST_NAME, PHONE_NUMBER, HR.EMPLOYEES.DEPARTMENT_ID, DEPARTMENT_NAME from HR.DEPARTMENTS, HR.EMPLOYEES where HR.EMPLOYEES.FIRST_NAME like '_t%' and HR.DEPARTMENTS.DEPARTMENT_ID = HR.EMPLOYEES.DEPARTMENT_ID;
-
在job_history表中查询任职时间超过1年的员工编号,任职历时月份(保留整数),工作代号,部门代号。使用语句:
select EMPLOYEE_ID, round(months_between(END_DATE, START_DATE)) 任职历时月份, JOB_ID, DEPARTMENT_ID from HR.JOB_HISTORY where round(months_between(END_DATE, START_DATE)) > 12;
-
查询每个部门经理的员工编号、姓名、薪水、部门号。
select distinct Man_1.EMPLOYEE_ID, Man_1.FIRST_NAME, Man_1.LAST_NAME, Man_1.SALARY, Man_1.DEPARTMENT_ID from HR.EMPLOYEES Man_1 inner join HR.EMPLOYEES Man_2 on Man_1.EMPLOYEE_ID = Man_2.MANAGER_ID;