Cool
Cool
Published on 2021-04-28 / 27 Visits
0
0

Mysql作业和练习(二练)

-- 1、创建数据库:day02_test02_company CREATE DATABASE day02_test02_company;-- 创建部门 CREATE TABLE department ( depid INT PRIMARY KEY,-- 部门编号 depname VARCHAR ( 50 ),-- 部门名称 deinfo VARCHAR ( 100 ) -- 部门简介 ) -- B. 雇员表(emoloyee):雇员编号(empid), 姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 CREATE TABLE emoloyee ( empid INT PRIMARY KEY,-- 雇员编号 雇员编号为主键; name VARCHAR ( 50 ),-- 姓名 sex VARCHAR ( 50 ) DEFAULT '男',-- 性别 性别默认为男; title VARCHAR ( 50 ),-- 职称 birthday date,-- 出生日期 depid INT,-- 所在部门编号 FOREIGN KEY ( depid ) REFERENCES department ( depid ) ON UPDATE CASCADE ON DELETE SET NULL );-- 设置外建 ) -- 创建工资表 CREATE TABLE salary ( empid INT ,-- 雇员编号() basesalary INT,-- 基本工资(), titlesalary INT,-- 职务工资() 其中雇员编号为主键。 deduction INT-- 扣除()

) -- 3.给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为( ON UPDATE CASCADE 和 ON DELETE CASCADE)

ALTER TABLE salary ADD FOREIGN KEY (empid) REFERENCES emoloyee ( empid ) ON UPDATE CASCADE ON DELETE CASCADE; -- 添加部门表数据 INSERT INTO department VALUES (111,'生产部',NULL), (222,'销售部',NULL), (333,'人事部','人力资源管理');

-- 添加雇员表 INSERT INTO emoloyee VALUES (1001,'张三',DEFAULT,'高级工程师','1975-1-1',111), (1002,'李四','女','助工','1985-1-1',111), (1003,'王五','男','工程师','1978-11-11',222), (1004,'张六',DEFAULT,'工程师','1999-1-1',222);

-- 添加工资表 INSERT INTO salary VALUES (1001,2200,1100,200), (1002,1200,200,NULL), (1003,2900,700,200), (1004,1950,700,150); -- 5、查询出每个雇员的雇员编号,姓名,职称,所在部门名称,应发工资(基本工资+职务工资),实发工资(基本工资+职务工资-扣除)。 SELECT emoloyee.empid,name,title,depname, basesalary+titlesalary AS "应发工资", basesalary+titlesalary-IFNULL(deduction,0) AS "实发工资" FROM department INNER JOIN emoloyee INNER JOIN salary ON department.depid = emoloyee.depid AND emoloyee.empid = salary.empid;

-- 6、查询销售部门的雇员姓名及其基本工资 SELECT name,basesalary FROM department INNER JOIN emoloyee INNER JOIN salary ON department.depid = emoloyee.depid AND emoloyee.empid = salary.empid WHERE department.depname = '销售部'; -- 7、查询姓“张”且年龄小于40的员工的全部信息和年龄 SELECT *,YEAR(CURRENT_DATE())-YEAR(birthday) AS "年龄" FROM emoloyee WHERE name LIKE '张%' AND YEAR(CURRENT_DATE())-YEAR(birthday)<40;

-- 8、查询所有男员工的基本工资和职务工资 SELECT basesalary,titlesalary FROM emoloyee INNER JOIN salary ON emoloyee.empid = salary.empid WHERE emoloyee.sex = '男'; -- 9、查询基本工资低于2000的员工姓名和职称、所在部门名称 SELECT name,title,depname FROM department INNER JOIN emoloyee INNER JOIN salary ON department.depid = emoloyee.depid AND emoloyee.empid = salary.empid WHERE basesalary < 2000;

-- 10、查询员工总数

SELECT COUNT() FROM emoloyee; -- 11、查询部门总数 SELECT COUNT() FROM department;

-- 12、查询应发工资的平均工资和最高工资、最低工资 SELECT AVG(basesalary+titlesalary) AS "平均应发工资", MAX(basesalary+titlesalary) AS "最高应发工资", MIN(basesalary+titlesalary) AS "最低应发工资" FROM salary;

-- 13、按照部门统计应发工资的平均工资 SELECT depid,AVG(basesalary+titlesalary) FROM emoloyee INNER JOIN salary ON emoloyee.empid = salary.empid GROUP BY emoloyee.depid;

-- 14、找出部门基本工资的平均工资低于2000的 SELECT depid,AVG(basesalary) FROM emoloyee INNER JOIN salary ON emoloyee.empid = salary.empid GROUP BY emoloyee.depid HAVING AVG(basesalary)<2000;

-- 15、按照员工编号、姓名、基本工资、职务工资、扣除,并按照职务升序排列,如果职务工资相同,再按照基本工资升序排列

-- 16、查询员工编号、姓名,出生日期,及年龄段,其中如果80年之前出生的,定为”老年“;80后定为”中年“,90后定为”青壮年“ SELECT empid,name,birthday, CASE WHEN YEAR(birthday)<1980 THEN '老年' WHEN YEAR(birthday)<1990 THEN '中年' ELSE '青壮年' END "年龄段" FROM emoloyee;

-- 17、查询所有的员工信息,和他所在的部门名称 SELECT emp.*,depname FROM emoloyee emp LEFT JOIN department dep ON emp.depid = dep.depid;

-- 18、查询所有部门信息,和该部门的员工信息 SELECT dep.,emp. FROM emoloyee emp RIGHT JOIN department dep ON emp.depid = dep.depid;

-- 19、查询所有职位中含“工程师”的男员工的人数 SELECT COUNT(*) FROM emoloyee WHERE sex='男' AND title LIKE '%工程师%';

-- 20、查询每个部门的男生和女生的人数和平均基本工资 SELECT dep.depid,sex,COUNT(*),AVG(basesalary) FROM department dep INNER JOIN emoloyee INNER JOIN salary ON dep.depid = emoloyee.depid AND emoloyee.empid = salary.empid GROUP BY dep.depid,sex;


Comment