现在,我们将创建一个视图,将员工的姓名、部门和工资信息组合在一起。
CREATE VIEW EmployeeSalaryView AS
SELECT e.FirstName, e.LastName, e.Department, s.MonthlySalary
FROM Employees e
JOIN Salary s ON e.EmployeeID = s.EmployeeID;
通过这个视图,我们可以轻松地获取员工的姓名、部门和工资信息,而不必编写复杂的联接查询。
下面是通过查询视图获得的结果:
SELECT * FROM EmployeeSalaryView;
结果如下:
在这个例子中,我们创建了一个视图(EmployeeSalaryView),它将员工表和工资表联接起来,并返回了员工的姓名、部门和工资信息。通过查询视图,我们可以方便地获取这些信息。
至少,写第一次复杂的查询sql 放到视图里了,以后对于不同的复杂查询,可以减少第二次 三次…写复杂sql的过程。
一次费事,方便多次。
这个例子展示了视图的好处:
隐藏底层数据表:外部程序无需了解实际的数据结构,只需要访问视图即可获取所需信息。
只读访问:外部程序无法通过视图直接修改数据,保证数据的完整性和安全性。
重用 SQL 语句:通过创建视图,复杂的联接查询被封装在视图中,外部程序可以直接访问视图以获取所需的数据。
数据格式化:视图可以返回与实体数据表不同的数据格式,例如在这个例子中,将员工表和工资表联接并返回一个包含员工姓名、部门和工资的结果集。
这个例子只是一个简单的演示,实际应用中,视图可以用于更复杂的查询和数据处理需求。
(1)设计视图
1) 建立一个名为V_CX_ZG的视图,功能是从职工信息表中查询非汉族的职工记录,并按出生日期排序。(该视图用于“固定条件查询”功能)
MYSQL>CREATE OR REPLACE VIEM V_CX_ZG AS SELECT NATIONAL,BRITH FROM EMPLOYEE WHERE NATIONAL NOT IN('汉') GROUP BY BRITH;
MYSQL>SELECT * FROM V_CX_ZG;
2) 建立一个名为V_CX_GZ的视图,功能是从工资档案表中查询岗位工资和补贴都高于500元的记录,要求显示出部门名称、姓名、性别、职称、基本工资、岗位工资、补贴和奖金,并按部门和基本工资的降序排列。(该视图用于“固定条件查询”功能)
MYSQL>CREATE OR REPLACE VIEW V_CX_GZ AS SELECT A.DEPARTMENT_NAME,A.EMPLOYEE_NAME,A.GENDER,A.TITLE,B.BASIC_WAGE,B.POST_WAGE,B.SUBSIDIES,B.FUND FROM EMPLOYEE A LEFT JOIN WAGE B ON (A.EMPLOYEE_ID=B.EMPLOYEE_ID) WHERE (B.POST_WAGE >500) AND (B.SUBSIDIES >500);
MYSQL>SELECT * FROM V_CX_GZ;
3) 建立一个所有职工工资统计视图V_ZGGZTJ,计算所有人员的基本工资的总和、平均值、最大值和最小值。(该视图用于“数据统计”功能)
MYSQL>CREATE OR REPLACE VIEW V_ZGGZTJ AS SELECT SUM(BASIC_WAGE),AVG(BASIC_WAGE),MAX(BASIC_WAGE),MIN(BASIC_WAGE) FROM WAGE;
MYSQL>SELECT * FROM V_ZGGZTJ;
4) 建立一个各部门人数统计的视图V_BMTJ,功能是从职工信息表中统计各部门的人数。(该视图用于“数据统计”功能)
MYSQL>CREATE OR REPLACE VIEW V_BMTJ AS SELECT DEPARTMENT_NAME,COUNT(DEPARTMENT_ANEM) FROM EMPLOYEE GROUP BY DEPARTMENT_NAME;
MYSQL>SELECT * FROM V_BMTJ;
5) 建立一个各类职称人数统计的视图V_ZCTJ,功能是从职工信息表中统计各类职称的人数。(该视图用于“数据统计”功能)
MYSQL>CREATE OR REPLACE VIEW V_ZCTJ AS SELECT TITLE,COUNT(TITLE) FROM EMPLOYEE GROUP BY TITLE;
MYSQL>SELECT * FROM V_ZCTJ;
6) 建立一个各民族人数统计的视图V_MZTJ,功能是从职工信息表中统计各民族的人数。(该视图用于“数据统计”功能)
MYSQL>CREATE OR REPLACE VIEW V_MZTJ AS SELECT NATIONAL,COUNT(NATIONAL) FROM EMPLOYEE GROUP BY NATIONAL;
MYSQL>SELECT * FROM V_MZTJ;
7)建立一个职工工资视图V_ZGGZ,功能是从职工信息、工资档案和工资发放三个表中查询所有职工的工资情况,其中包括部门名、姓名、性别、职称、基本工资、岗位工资、补贴、奖金、应得工资、其他加、其他扣、实发工资、发放日期。(其中:应得工资=基本工资+岗位工资+补贴+奖金+其他加;实发工资=基本工资+岗位工资+补贴+奖金+其他加-其他扣。)(该视图用于“选择条件查询”功能)
内部查询
MYSQL>CREATE OR REPLACE VIEW V_ZGGZ AS SELECT EMPLOYEE.DEPARTMENT_NAME,EMPLOYEE.EMPLOYEE_NAME,EMPLOYEE.GENDER,EMPLOYEE.TITLE,WAGE.BASIC_WAGE,WAGE.POST_WAGE,WAGE.SUBSICDIES,WAGE.FUND,WAGE.BASIC_WAGE+WAGE.POST_WAGE+WAGE.SUBSIDIES+WAGE.FUND+PWAGE.BAISE_WAGE AS TOTAL_WAGE,PWAGE.RAISE_WAGE,PWAGE.CUT_WAGE,WAGE.BASIC_WAGE+WAGE.POST_WAGE+WAGE.SUBSIDIES+WAGE.FUND+PWAGE.RAISE_WAGE-PWAGE.CUT_WAGE AS WAGES FROM EMPLOYEE INNER JOIN WAGE ON EMPLOYEE.EMPLOYEE_ID=WAGE.EMPLOYEE_ID INNER JOIN PWAGE ON WAGE.EMPLOYEE_ID=PWAGE.EMPLOYEE_ID;
MYSQL>SELECT * FROM V_ZGGZ;
8) 建立一个月工资汇总视图V_YGZHZ,功能是从视图V_ZGGZ中统计每个月发放的基本工资、岗位工资、补贴、奖金、其他加、应得工资、其他扣、实发工资的总和。 (该视图用于“数据统计”功能)
MYSQL>CREATE OR REPLACE VIEW V_YGZHZ AS SELECT SUM(BASIC_WAGE),SUM(POST_WAGE),SUM(SUBSIDIES),SUM(FUND),SUM(RAISE_WAGE),SUM(TOTAL_WAGE),SUM(WAGES) FROM V_ZGGZ;
MYSQL>SELECT * FROM V_YGZHZ;
9) 建立一个部门工资汇总视图V_BMGZHZ,功能是从视图V_ZGGZ中统计各个部门的基本工资、岗位工资、补贴、奖金、其他加、应得工资、其他扣、实发工资的总和。(该视图用于“数据统计”功能)
MYSQL>CREATE OR REPLACE VIEW V_BMGZHZ AS SELECT SUM(BASIC_WAGE),SUM(POST_WAGE),SUM(SUBSIDIES),SUM(FUND),SUM(RAISE_WAGE),SUM(TOTAL_WAGES),SUM(CUT_WAGE),SUM(WAGES) FROM V_ZGGZ GROUP BY DEPARTMENT_NAME;
MYSQL>SELECT * FROM V_BMGZHZ;