0
点赞
收藏
分享

微信扫一扫

员工管理系统数据库设计

曾宝月 2022-04-01 阅读 36
mysqlsql
department_idname
1财务部
2人事部
3市场部
  • 5.创建“工资”表,表名为:t_salary,字段为:
select `t_salary`.`employee_id` AS `员工编号`,
(((((`t_salary`.`base_salary` + `t_salary`.`pension`) + `t_salary`.`allowance`) + `t_salary`.`bonus`) - `t_salary`.`deduct`) - `t_salary`.`tax`) AS `实际工资` 
 from `t_salary`
-- 1)查询所有员工的基本信息
SELECT * FROM t_empoyee

-- 2)查询所有市场部员工的基本信息
SELECT * FROM t_empoyee 
WHERE department_id = (SELECT department_id FROM t_department WHERE name = '市场部')

-- 3)查询出所有人事部员工的姓名和入职时间
SELECT `name`,rzsj FROM t_empoyee 
WHERE department_id = (SELECT department_id FROM t_department WHERE name = '人事部')

-- 4)查询出所有男员工的基本信息
SELECT *FROM t_empoyee WHERE sex = '男'

-- 5)查询出所有女员工的姓名、出生年月和所在部门
SELECT t2.name,birthday,t1.name 
FROM t_department t1 
RIGHT JOIN t_empoyee t2 ON t1.department_id = t2.department_id 
WHERE sex = '女'

-- 6)查询出所有入职时间在 2000 年以后的女员工的员工编号、姓名和入职时间
SELECT employee_id,`name`,rzsj FROM t_empoyee WHERE YEAR(rzsj)>2000 AND sex = '女'

-- 7)查询出所有员工的员工编号、姓名、入职时间和工龄(注:只考虑整年数,取得当前系统日期的是 now() 函数,取得日期的年份是 date_format() 函数
 SELECT employee_id,`name`,rzsj,(YEAR(NOW()) - YEAR(rzsj)) 工龄 FROM t_empoyee
 
-- 8)查询出所有姓名是两个字的员工基本信息
SELECT * FROM t_empoyee WHERE `name` LIKE'__'

-- 9)查询出所有姓李的员工的基本信息
SELECT * FROM t_empoyee WHERE `name` LIKE'李%'
-- 正则表达式
SELECT * FROM t_empoyee WHERE `name` REGEXP '^.{2}$'

-- 10)查询出财务处的所有的党员
SELECT t2.name FROM t_department t1 
RIGHT JOIN t_empoyee t2 ON t1.department_id = t2.department_id 
WHERE t1.name = '财务部' AND sfdy = '1'

-- 11)查询所有的女党员
SELECT name FROM t_empoyee WHERE sex = '女'AND sfdy = '1'

-- 12)查询出所有出生年月在 1960 以前的员工
SELECT name FROM t_empoyee WHERE YEAR(birthday) < 1960

-- 13)查询出所有员工的姓名和年龄(注意:是年龄不是出生日期)
SELECT name,(YEAR(NOW()) - YEAR(birthday)) AS 年龄 FROM t_empoyee

-- 14)查询出所有籍贯是北京市或天津市的员工信息(使用 or 和 in 分别查询)
SELECT * FROM t_empoyee WHERE jiguan = '北京市' OR jiguan = '天津市'
SELECT * FROM t_empoyee WHERE jiguan IN ('北京市' ,'天津市')

-- 15)查询出所有籍贯不是天津市的员工信息(使用 not 和 <> 分别查询)
SELECT * FROM t_empoyee WHERE jiguan  NOT IN ('天津市')
SELECT * FROM t_empoyee WHERE jiguan  <> '天津市'

-- 16)查询出所有籍贯不是天津市也不是北京市的员工信息(使用 and 和 not in 分别查询)
SELECT * FROM t_empoyee WHERE jiguan != '北京市' AND jiguan != '天津市'
SELECT * FROM t_empoyee WHERE jiguan  NOT IN ('天津市','北京市')

-- 17)查询出员工编号在 5-10 之间的员工信息(使用 and 和 between 分别查询)
SELECT * FROM t_empoyee WHERE employee_id BETWEEN 5 AND 10

-- 18)查询出所有员工的实际工资和员工编号
-- 没用视图之前繁琐
SELECT (base_salary + pension + allowance + bonus -deduct -tax )AS 实际工资,employee_id FROM t_salary

-- 19)查询出所有实际工资在 3000-3500 之间的员工编号和税收
SELECT  employee_id,tax FROM t_salary WHERE(base_salary + pension + allowance + bonus -deduct -tax ) BETWEEN 3000 AND 3500

-- 20)查询出所有籍贯为空的员工的基本信息
SELECT * FROM t_empoyee WHERE jiguan = ' '

-- 21)查询出姓李并且第二个字是“玉”或者“艺”字的员工
SELECT * FROM t_empoyee WHERE NAME LIKE'_玉' OR  NAME LIKE '_艺'

-- 22)查询出姓李并且第二个字不是“玉”或者“艺”字的员工
SELECT * FROM t_empoyee WHERE  NAME LIKE'李%' and (NAME NOT LIKE'_玉' AND  NAME NOT LIKE '_艺')

-- 23)查询出所有不姓“李”的员工的信息
SELECT * FROM t_empoyee WHERE  NAME NOT LIKE'李%'

-- 24)查询出名字中没有“少”字的员工
SELECT * FROM t_empoyee WHERE  NAME NOT LIKE'%少%'

-- 25)现在每个员工都要拿出自己实际工资的百分之 8 作为住房公积金使用,查询出所有员工的员工编号的应拿出的公积金
-- 用视图简化繁琐,视图就当成表一样使用就可以
-- SELECT employee_id,(base_salary + pension + allowance + bonus -deduct -tax ) * 0.08 AS 住房公积金 FROM t_salary 
SELECT employee_id 员工编号,实际工资*0.08 AS 住房公积金 FROM t_salary t1 
 INNER JOIN sjgz t2 ON t1.employee_id = t2.员工编号
-- 1)新添加 16 号员工的信息,其它字段值自定
INSERT INTO t_empoyee (employee_id,`name`,sex,birthday,sfdy,rzsj,department_id,jiguan) VALUES('16',`name`,sex,birthday,sfdy,rzsj,department_id,jiguan)

-- 2)删除 1950 年以前的员工信息
DELETE * FROM t_empoyee WHERE YEAR(birthday)<1950

-- 3)工资的调整:
-- a)1-5 号员工,基本工资增加200
UPDATE t_salary t1 set base_salary = base_salary + 200 WHERE employee_id BETWEEN 1 AND 5 

-- b)6-10 号员工,基本工资增加百分之十,津贴增加 50
 UPDATE t_salary set base_salary = base_salary * 1.1 ,pension = pension +50  WHERE employee_id BETWEEN 6 AND 10 

-- c)11 号以上员工,基本工资增加 150,津贴增加 30,补助增加 20
 UPDATE t_salary set base_salary = base_salary +150,pension = pension + 30,allowance = allowance + 20  WHERE employee_id >11
 
-- d)所有员工奖金增加 80
 UPDATE t_salary SET bonus  = bonus + 80

-- e)有“扣除”项的员工,没有奖金
 UPDATE t_salary SET bonus  = 0 WHERE deduct != 0
-- 1)按基本工资由大到小显示所有员工的员工编号和实际工资
SELECT employee_id , base_salary AS 基本工资 FROM t_salary ORDER  BY 基本工资 DESC

-- 2)按实际工资由大到小显示所有员工的员工编号和实际工资
SELECT employee_id,实际工资 FROM t_salary t1 
INNER JOIN sjgz t2 ON t1.employee_id = t2.员工编号 ORDER  BY 实际工资 DESC

-- 3)按部门升序显示员工的员工编号和实际工资
SELECT t1.employee_id ,实际工资 FROM t_empoyee t1 
INNER JOIN sjgz t2 ON t1.employee_id = t2.员工编号 ORDER BY t1.department_id ASC

-- 4)求出所有员工的基本工资的和
SELECT SUM(base_salary) AS 基本工资和 FROM t_salary

-- 5)求出所有员工的实际工资的和
-- SELECT SUM(base_salary + pension + allowance + bonus -deduct -tax) as 实际工资和 FROM t_salary
SELECT SUM(实际工资) 实际工资和 FROM sjgz

-- 6)求出 5-10 号没有被扣除工资的员工的基本工资和
SELECT SUM(base_salary) AS 基本工资和 FROM t_salary WHERE deduct = 0;

-- 7)求出所有员工基本工资的平均工资
SELECT AVG(base_salary) AS 平均工资 FROM t_salary

-- 8)求出所有员工实际工资的平均工资
SELECT AVG(实际工资) AS 平均工资 FROM sjgz

-- 9)统计出女工的数目
SELECT count(employee_id) AS 女工数目 FROM t_empoyee WHERE sex = '女'

-- 10)统计出天津的女工个数
SELECT count(employee_id) AS 天津女工数目 FROM t_empoyee WHERE jiguan = '天津市'
AND sex = '女'

-- 11)统计出本月被扣除工资的员工数和扣除的总金额
SELECT COUNT(employee_id) AS 被扣工资的员工数, SUM(deduct) AS 扣除总金额 FROM t_salary

-- 12)统计出实际工资大于 3000 的员工数
SELECT COUNT(employee_id) AS 实际工资大于3k的员工数 
FROM t_salary t1 
INNER JOIN sjgz t2  ON t1.employee_id = t2.员工编号 WHERE 实际工资>3000

-- 13)统计出员工的最大工龄
SELECT MAX(YEAR(NOW())-YEAR(birthday))最大年龄 FROM t_empoyee

-- 14)统计出女员工的最小年龄
SELECT MIN(YEAR(NOW())-YEAR(birthday))女工最小年龄 FROM t_empoyee WHERE sex ='女'

-- 15)统计出天津女党员的最大年龄
SELECT MAX(YEAR(NOW())-YEAR(birthday))天津女党员最大年龄 FROM t_empoyee WHERE sex ='女' AND sfdy = '1' AND jiguan = '天津市'

-- 16)统计出各部门最高的工龄
 SELECT MAX(YEAR(NOW())-YEAR(rzsj))最高工龄 FROM t_empoyee GROUP BY department_id
 
-- 17)统计出最大的男工和女工的年龄
SELECT MAX(YEAR(NOW())-YEAR(rzsj))  FROM t_empoyee GROUP BY sex

-- 18)统计出各部门的员工数
SELECT COUNT(employee_id) 各部门员工数 FROM t_empoyee GROUP BY department_id

-- 19)列出各部门的女工数
SELECT COUNT(employee_id)各部门的女工数 FROM t_empoyee WHERE sex = '女' GROUP BY department_id 

-- 20)列出各部门的男工数和女工数
SELECT COUNT(employee_id) FROM t_empoyee GROUP BY department_id ,sex

-- 21)列出员工数超过3人的部门号和员工数
SELECT department_id,COUNT(employee_id) AS 员工数量 FROM t_empoyee GROUP BY department_id 
HAVING 员工数量 > 3

-- 22)列出女工数超过1人的部门号和女工数
SELECT department_id,COUNT(employee_id)AS 各部门女工人数 FROM t_empoyee WHERE  sex = '女'
GROUP BY department_id HAVING 各部门女工人数 > 1
-- 1)显示出所有员工的姓名和部门名
SELECT t_empoyee.`name` 姓名,t_department.`name` 部门姓名 
FROM t_empoyee 
INNER JOIN t_department ON t_empoyee.department_id=t_department.department_id

-- 2)按部门升序显示出所有员工的姓名和部门名
SELECT t1.`name` 姓名,t2.`name` 部门姓名 
FROM t_empoyee t1 
INNER JOIN t_department t2 ON t1.department_id=t2.department_id 
ORDER BY t2.department_id
 
-- 3)显示出所有员工的姓名、基本工资和入职时间
SELECT t2.`name` 姓名,base_salary 基本工资,rzsj 入职时间 
FROM t_salary t1 
INNER JOIN t_empoyee t2 ON t1.employee_id = t2.department_id

-- 4)显示出所有员工的姓名、年龄、部门和实际工资
SELECT t1.`name`姓名,YEAR(NOW())-YEAR(birthday)年龄,t3.`name` 部门,实际工资 
FROM t_empoyee t1 
INNER JOIN t_salary t2 ON  t1.employee_id = t2.employee_id
INNER JOIN t_department t3 ON t1.department_id = t3.department_id 
INNER JOIN sjgz t4 ON t1.employee_id = t4.员工编号
	
-- 5)显示出所有被扣工资的员工姓名和被扣金额
SELECT t2.`name` 姓名,deduct 被扣金额 
FROM t_salary t1 INNER JOIN t_empoyee t2 ON t1.employee_id = t2.employee_id

-- 6)按部门升序显示员工的姓名、所在部门和实际工资
SELECT t1.`name` 姓名,t3.`name` 所在部门,实际工资 
FROM t_empoyee t1 
INNER JOIN t_salary t2 ON  t1.employee_id = t2.employee_id
INNER JOIN t_department t3 ON t1.department_id = t3.department_id 
INNER JOIN sjgz t4 ON t1.employee_id = t4.员工编号
ORDER BY t1.department_id

-- 7)按部门名升序、实际工资降序显示部门名称、员工编号和实际工资
SELECT t1.employee_id 员工编号,t3.`name` 所在部门,实际工资 
FROM t_empoyee t1 
INNER JOIN t_salary t2 ON  t1.employee_id = t2.employee_id
INNER JOIN t_department t3 ON t1.department_id = t3.department_id 
INNER JOIN sjgz t4 ON t1.employee_id = t4.员工编号
ORDER BY t3.`name`,实际工资 DESC

-- 8)统计出天津籍员工的最高实际工资
SELECT MAX(实际工资)AS 最高实际工资 FROM t_salary t1 
INNER JOIN t_empoyee t2 ON t1.employee_id = t2.employee_id
INNER JOIN sjgz t3 ON t1.employee_id = t3.员工编号
WHERE jiguan = '天津市'
-- 1)显示出工龄最大的员工姓名和工龄
-- DATEDIFF 查询所给的两个日期之间间隔的天数
SELECT `name`姓名 ,MAX(YEAR(NOW())-YEAR(rzsj))工龄 FROM t_empoyee
WHERE DATEDIFF(NOW(),rzsj) = (SELECT MAX(DATEDIFF(NOW(),rzsj)) FROM t_empoyee)

-- 2)统计出所有北京籍员工的工资总和
SELECT SUM(base_salary)工资总和 
FROM t_salary t1 
INNER JOIN  t_empoyee t2 ON t1.employee_id = t2.employee_id
WHERE jiguan = '北京市'

-- 3)统计出所有女员工的平均工资
SELECT avg(base_salary)平均工资 
FROM t_salary t1 
INNER JOIN  t_empoyee t2 ON t1.employee_id = t2.employee_id
WHERE sex = '女'

-- 4)统计出所有天津女党员的最低工资
SELECT MIN(base_salary)最低工资工资 
FROM t_salary t1 
INNER JOIN  t_empoyee t2 ON t1.employee_id = t2.employee_id
WHERE jiguan = '天津市' AND sfdy = '1'

-- 5)查询所有市场部员工的基本信息
SELECT * FROM t_empoyee t1 
INNER JOIN t_department t2 ON t1.department_id = t2.department_id 
WHERE t2.`name` = '市场部'

-- 6)显示出最小的女员工的姓名和年龄
SELECT `name`姓名,MIN(YEAR(NOW())-YEAR(birthday))年龄 FROM t_empoyee

-- 7)统计出实际工资最高的北京籍员工的姓名和实际工资
SELECT t1.`name`姓名,Max(实际工资)最高实际工资 
FROM t_empoyee t1 
INNER JOIN t_salary t2 ON t1.employee_id = t2.employee_id
INNER JOIN sjgz t3 ON t1.employee_id = t3.员工编号 
WHERE jiguan = '北京市'

-- 8)显示出年龄最大的天津女党员
SELECT MAX(YEAR(NOW())-YEAR(birthday)) 年龄最大的天津女党员 
FROM t_empoyee 
WHERE jiguan = '天津市' AND sfdy = '1'

-- 9)显示出基本工资比天津市最高工资高的所有员工
SELECT t1.`name` 
FROM t_empoyee t1 
INNER JOIN t_salary t2 ON t1.employee_id = t2.employee_id 
WHERE base_salary >(SELECT MAX(base_salary)  
FROM t_salary t3
INNER JOIN t_empoyee t4 ON t3.employee_id = t4.employee_id 
WHERE jiguan = '天津市')

-- 10)显示出实际工资比总体平均工资低的女员工
 SELECT t1.`name` 
 FROM t_empoyee t1 
 INNER JOIN t_salary t2 ON t1.employee_id = t2.employee_id 
 INNER JOIN sjgz t3 ON t1.employee_id = t3.员工编号
 WHERE sex = '女' AND 实际工资 < (SELECT AVG(实际工资) FROM sjgz)

-- 11)显示出人数最多的部门的所有员工信息
SELECT * FROM t_empoyee 
WHERE department_id 
IN(SELECT department_id FROM t_empoyee GROUP BY department_id HAVING COUNT(*) >= 
ALL (SELECT COUNT(*) FROM t_empoyee GROUP BY department_id))

-- 12)显示出工资最高的员工的姓名,性别,籍贯和所在部门名称
SELECT t1.`name`,sex,jiguan,t3.`name`所在部门名称
FROM t_empoyee t1 
INNER JOIN t_salary t2 ON  t1.employee_id = t2.employee_id
INNER JOIN t_department t3 ON t1.department_id = t3.department_id 
INNER JOIN sjgz t4 ON t1.employee_id = t4.员工编号
WHERE (实际工资) = (SELECT MAX(实际工资) FROM sjgz)

-- 13)显示出比天津市入职最晚的员工入职还晚的员工

SELECT name FROM t_empoyee WHERE rzsj>ALL(SELECT rzsj FROM t_empoyee WHERE jiguan = '天津市' )

-- 14)显示出比‘刘新’工资高的所有员工姓名和实际工资

SELECT t1.`name`, 实际工资
FROM t_empoyee t1 
INNER JOIN t_salary t2 ON t1.employee_id = t2.employee_id 
INNER JOIN sjgz t3 ON t1.employee_id = t3.员工编号
WHERE 实际工资 > (SELECT 实际工资 FROM sjgz t4 INNER JOIN t_empoyee t5 ON t4.员工编号 = t5.employee_id WHERE t5.`name` = '刘新')

-- 15)显示出奖金和“李艺”一样多的员工姓名和所在部门名称
SELECT t1.`name`, t3.`name`  
FROM t_empoyee t1 
INNER JOIN t_salary t2 ON  t1.employee_id = t2.employee_id
INNER JOIN t_department t3 ON t1.department_id = t3.department_id 
WHERE bonus = (SELECT bonus FROM t_salary t3 INNER JOIN t_empoyee t4 ON t3.employee_id = t4.employee_id WHERE t4.`name` = '李艺')

-- 16)给所有市场部的员工增加200元的基本工资
UPDATE t_salary t2, t_empoyee t1, t_department t3
SET base_salary = base_salary +200
WHERE  t3.department_id = t1.department_id AND t1.employee_id = t2.employee_id AND
t3.`name` = '市场部'	
	
-- 17)所有非天津籍员工的补助增加100元作为思乡补助
UPDATE t_salary t2, t_empoyee t1, t_department t3
SET allowance = allowance+100
WHERE  t3.department_id = t1.department_id AND t1.employee_id = t2.employee_id AND
jiguan !='天津市'

-- 18)删除所有上海籍员工的基本信息(注意删除的次序)
DELETE* FROM t_salary t2, t_empoyee t1, t_department t3
WHERE  t3.department_id = t1.department_id AND t1.employee_id = t2.employee_id AND jiguan = '上海市'

-- 19)辞退扣除最多的员工

DELETE * FROM t_salary t2, t_empoyee t1, t_department t3
WHERE  t3.department_id = t1.department_id AND t1.employee_id = t2.employee_id AND deduct = (DELETE MAX(deduct) FROM t_salary)

举报

相关推荐

0 条评论