– 部门表
CREATE TABLE dept (
id INT PRIMARY KEY PRIMARY KEY, – 部门id
dname VARCHAR(50), – 部门名称
loc VARCHAR(50) – 部门位置
);
– 添加4个部门
INSERT INTO dept(id,dname,loc) VALUES
(10,‘教研部’,‘北京’),
(20,‘学工部’,‘上海’),
(30,‘销售部’,‘广州’),
(40,‘财务部’,‘深圳’);
– 职务表,职务名称,职务描述
CREATE TABLE job (
id INT PRIMARY KEY,
jname VARCHAR(20),
description VARCHAR(50)
);
– 添加4个职务
INSERT INTO job (id, jname, description) VALUES
(1, ‘董事长’, ‘管理整个公司,接单’),
(2, ‘经理’, ‘管理部门员工’),
(3, ‘销售员’, ‘向客人推销产品’),
(4, ‘文员’, ‘使用办公软件’);
– 1.计算员工的日薪(按30天),保留二位小数
– 2.计算出员工的年薪,并且以年薪排序 降序
– 3.找出奖金少于5000或者没有获得奖金的员工的信息
– 4.返回员工职务名称及其从事此职务的最低工资
– 5.返回工龄超过10年,且2月份入职的员工信息 year month
– 6.返回与 林冲 同一年入职的员工
– 7.返回每个员工的名称及其上级领导的名称
– 8.返回工资为二等级(工资等级表)的职员名字(员工表)、部门名称(部门表)
– 9.涨工资:董事长2000 经理1500 其他800
-- 1.计算员工的日薪(按30天),保留二位小数
SELECT TRUNCATE(salary/30,2) FROM emp;
-- 2.计算出员工的年薪,并且以年薪排序 降序
SELECT * FROM emp;
SELECT salary*12 + IFNULL(bonus,0) AS 年薪 FROM emp ORDER BY 年薪 DESC;
-- 3.找出奖金少于5000或者没有获得奖金的员工的信息
SELECT * FROM emp WHERE bonus<5000 OR bonus IS NULL;
-- 4.返回员工职务名称及其从事此职务的最低工资
-- 4.1 确定表和连接条件 2个表 员工表和职务表
SELECT * FROM emp e , job j WHERE e.job_id=j.id;
-- 4.2 分组 统计
SELECT j.jname , MIN(salary)
FROM emp e , job j
WHERE e.job_id=j.id
GROUP BY j.jname;
-- 5.返回工龄超过10年,且2月份入职的员工信息 year month
SELECT * FROM emp WHERE DATEDIFF(NOW() , joindate)/365>10 AND MONTH(joindate)='02';
-- 6.返回与 林冲 同一年入职的员工
-- 6.1 查询林冲入职年份
SELECT YEAR(joindate) FROM emp WHERE ename='林冲';
SELECT * FROM emp WHERE YEAR(joindate)= (林冲入职的年份 2011);
-- 6.2 查询对应年份的职工
# 案例结果
SELECT * FROM emp WHERE YEAR(joindate)=
(
SELECT YEAR(joindate) FROM emp WHERE ename='林冲'
);
-- 7.返回每个员工的名称及其上级领导的名称
#自关联查询:自己表中的一个字段 关联自己表中的另外一个字段
#select * from A inner join B on 关联条件
# e 表示员工表 em 表示上级领导的表
SELECT e.ename,e.mgr, em.id,em.ename FROM emp e
INNER JOIN emp em ON e.mgr = em.id;
-- 8.返回工资为二等级(工资等级表)的职员名字(员工表)、部门名称(部门表)
-- 8.1 确定查询表和连接条件 3个表
SELECT * FROM emp e , dept d , `salarygrade` s
WHERE e.dept_id = d.id AND e.salary BETWEEN s.losalary AND s.hisalary;
-- 8.2 确定显示字段
SELECT e.ename , d.dname , s.grade
FROM emp e , dept d , `salarygrade` s
WHERE e.dept_id = d.id AND e.salary BETWEEN s.losalary AND s.hisalary;
-- 8.3 确定业务条件
SELECT e.ename , d.dname , s.grade
FROM emp e , dept d , `salarygrade` s
WHERE e.dept_id = d.id AND e.salary BETWEEN s.losalary AND s.hisalary
AND s.grade = 2;
-- 9.涨工资:董事长2000 经理1500 其他800
SELECT * FROM emp;
SELECT * FROM job;
-- 9.1 确定几张表连接条件 2个表
SELECT * FROM emp e , job j
WHERE e.job_id = j.id
-- 9.2 确定显示字段
SELECT e.ename,j.jname , e.salary
FROM emp e , job j
WHERE e.job_id = j.id;
#涨工资:董事长2000 经理1500 其他800
SELECT e.ename,j.jname , e.salary 现有的工资,
CASE j.jname
WHEN '董事长' THEN e.salary+2000
WHEN '经理' THEN e.salary+1500
ELSE e.salary+800
END AS 涨工资之后
FROM emp e , job j
WHERE e.job_id = j.id;