【实验目的】
- 掌握SELECT语句的基本语法;
- 掌握子查询和连接查询等多表查询的表示;
- 掌握视图的创建;
- 掌握视图的查询和修改。
【实验内容摘要】
1. SELECT命令的基本操作:
(1)查询表Employees中的部门号和性别,要求结果没有重复行;
select distinct dno,ssex from employees;
(2)查询月收入高于2000元的员工号码;
select sno from salary where income>2000;
(3)查询财务部所有员工的号码和姓名,并将显示的列名用其中文含义表示;
select sno as '编号',sname as '姓名' from employees where dno=(select dno from departments where dname='财务部');
(4)查询员工的姓名、住址和收入水平,2000元以下的显示为低收入,2000~3000元的显示为中等收入,3000元以上的显示为高收入;
SELECT sname,address, CASE WHEN income<2000 THEN '低收入'
WHEN income BETWEEN 2000 AND 3000 THEN '中等收入'
WHEN income>3000 THEN '高收入' END AS 收入水平
FROM employees,salary WHERE employees.sno=salary.sno;
(5)查询财务部员工的最高和最低实际收入。
select max(actincome) as '最高实际收入',min(actincome) as '最低实际收入' from employees,departments,salary where employees.sno=salary.sno and employees.dno=employees.dno and dname='财务部';
2. SELECT命令的高级操作:
(1)使用INTO子句,创建“男员工”表,包括编号和姓名;
-- 男员工表
CREATE TABLE 男员工表 (
sno char(6) NOT NULL primary key,
sname varchar(10) NOT NULL
);
-- Records of 男员工表
INSERT INTO 男员工表 VALUES ('000001', '王林'),
('010008', '伍容华'),('020010', '王向容'),('102201', '刘明'),
('102208', '朱俊'),('111006', '张石兵'),('210678', '林涛'),
('302566', '李玉珉'),('308759', '叶凡');
(2)查询所有年龄比研发部员工年龄都大的员工的姓名;
select sname from employees where dno in(select dno from departments where dname!='研发部') and bir<= ALL (select bir from employees where dno in(select dno from departments where dname='研发部'))
(3)查询每个员工的情况及其具体工作部门名的情况,并按出生时间从小到大排列;
select employees.*,departments.dname from employees,
departments where employees.dno=departments.dno
order by bir asc;
(4)按员工的学历分组,列出不同学历的员工人数。
select edu,count(edu) as '人数' from employees group by edu;
3. 视图的操作:
(1)创建视图DS_VIEW,视图包含Departments表的全部列;
(2)创建视图Employees_VIEW,视图包含员工号码、姓名和实际收入(RealIncome)三列;
(3)向视图DS_VIEW中插入一个行数据“6,广告部,广告业务”,并使用SELECT命令查看视图DS_VIEW和表Departments中发生的变化。
(4)对视图Employees_view执行插入和删除数据的操作,观察结果。