创建数据表格
insert into employees values
('000001','王琳','大专','1966-01-23','男',7,'中山路32-1-508',83355668,2),
('010008','吴荣华','本科','1976-3-28','男',3,'北京东路100-2',83321321,1),
('020010','王向荣','硕士','1982-12-9','女',2,'四牌楼10-0-108',83792361,1),
('020018','李丽','大专','11960-7-30','女',6,'中三东路102-2',83413301,1),
('102201','刘明','本科','1972-10-18','女',3,'虎踞路100-2',83606608,5),
('102208','朱骏','硕士','1965-9-28','男',2,'派娄祥5-3-106',84708817,5),
('108991','钟敏','硕士','1979-8-10','女',4,'中山东路10-3-105',83346722,3),
('111006','张世兵','本科','1974-10-4','男',1,'解放路34-1-203',84563418,5),
('210678','林涛','大专','1977-4-2','男',2,'中山北路24-35',83467736,3),
('302566','李玉铭','本科','1968-9-20','男',3,'热河路209-3',58765991,4),
('308759','叶凡','本科','1978-11-18','女',2,'北京西路3-7-52',83308901,4),
('504209','程琳琳','大专','1969-9-3','女',5,'汉中路120-4-12',84468158,4);
insert into Salary values('000001',2100.8,123.09),
('010008',1582.62,88.03),
('020010',2860,198),
('020018',2347.68,180),
('102201',2569.88,185.65),
('102208',1980,100),
('108991',3259.98,281.52),
('111006',1987.01,79.58),
('210678',2240,121),
('302566',2980.7,210.2),
('308759',2351.98,199.08),
('504209',2100.8,123.09);
insert into Departments values (1,'财务部',null),
(2,'人力资源部',null),
(3,'经理办公室',null),
(4,'研发部',null),
(5,'市场部',null);
1、SELECT 语句的基本使用
1.1、查询Employees表的员工部门号和性别,要求消除重复行。
select distinct 员工部门号,性别
from employees;
1.2、计算每个雇员的实际收入(实际收入=收入-支出)。
select 员工编号,收入-支出 as '实际收入'
from salary;
1.3、查询Employees表中员工的 姓名和性别,要求性别值为男时 显示1,为女 时显示0
select 姓名,
case
when 性别='男' then '1'
when 性别='女' then '0'
end as sex
from employees;
1.4、查询每个雇员的地址和电话号码,显示列的标题为address、telephone。
select 地址 as 'address',电话号码 as 'telephone'
from employees;
1.5、计算Salary表中 员工月收入的平均数
select avg(收入),sum(收入)
from salary;
1.6、计算所有 员工的总支出。
select sum(支出) from salary;
1.7、显示 女雇员的地址和电话号码。
select 地址,电话号码
from employees
where 性别='女';
1.8、计算员工总数 。
select count(*) as '员工总数'
from employees;
1.9、显示最高收入和最低 收入的员工的员工编号。
select 员工编号
from salary
where 收入 in(select max(收入) from salary);
select 员工编号
from salary
where 收入 in(select min(收入) from salary);
2、条件查询
2.1、显示月收入高于2000元的员工编号。
select 员工编号
from salary
where 收入>2000;
2.2、查询1970年以后出生的员工 的姓名和地址。
select 姓名,地址
from employees
where 出生日期>'1970-1-1';
2.3、显示工作年限3年以上(含3年)、学历在本科以上(含本科)的男性员工的信息。
select * from employees
where 工作年限>=3 and (学历='本科' or 学历='硕士') and 性别='男';
2.4、查找员工编号中倒数第 2个数字为0的 姓名、地址和学历。
select 姓名,地址,学历
from employees
where 员工编号 like '%0_';
2.5、查询月收入在2000~3000元的员工编号。
select 员工编号
from salary
where 收入>2000 and 收入<3000;
3、多表查询
3.1、查询 “王琳”的基本情况和 所工作的部门名称。
select employees.*,departments.部门名称
from employees join departments on employees.员工部门号=departments.部门编号
where employees.姓名='王琳';
3.2、查询财务部、研发部 、市场部的员工信息。
select employees.*,departments.部门名称
from employees join departments
on employees.员工部门号=departments.部门编号
where departments.部门名称 in ('财务部','研发部','市场部');
select employees.*,departments.部门名称
from employees join departments
on employees.员工部门号=departments.部门编号
where departments.部门名称='财务部' or departments.部门名称='研发部'or departments.部门名称='市场部';
3.3、查询每个雇员的基本情况和薪水情况。
select employees.*,salary.*
from employees join salary on salary.员工编号=employees.员工编号;
3.4、查询研发部在1970年以前出生的员工姓名和薪水情况。
select employees.姓名,salary.*
from employees,departments,salary
where employees.出生日期<'1970-1-1' and departments.部门名称='研发部'
and departments.部门编号=employees.员工部门号 and employees.员工编号=salary.员工编号;
SELECT e.姓名,s.* FROM employees e,salary s,departments d
WHERE e.员工编号=s.员工编号 AND e.员工部门号=d.部门编号
AND e.出生日期 < '1970' AND 部门名称='研发部';
3.5、查询员工的姓名、住址和收入水平,要求2000元以下显示为 低收入,2000~3000元显示为 中等收入,3000元以上时显示为 高收入。
select 姓名,地址,salary.收入,
case
when salary.收入 <2000 then '低收入'
when salary.收入 >2000 and salary.收入<3000 then '中等收入'
when salary.收入 >3000 then '高收入'
end as '收入水平'
from employees,salary
where salary.员工编号=employees.员工编号;
4、分类汇总与排序
4.1、按部门列出该部门工作的员工人数。
select departments.部门名称,count(*) as '人数'
from departments,employees
where employees.员工部门号=departments.部门编号
group by 部门名称;
4.2、分别统计男性员工和女性员工人数。
select count(*),
case
when 性别='男' then '男'
when 性别='女' then '女'
end as '性别'
from employees group by 性别;
4.3、查找雇员数超过2人的部门名称和员工数量。
select departments.部门名称,count(*)
from employees join departments on employees.员工部门号=departments.部门编号
group by 员工部门号 having count(employees.员工部门号)>2;
4.4、按员工学历分组统计各种学历人数。
select employees.学历,count(*) as '人数'
from employees
group by 学历;
4.5、将员工信息按出生日期从大到小排序。
select *
from employees
order by 出生日期 desc ;
4.6、将员工薪水按收入多少从小到大排序。
select salary.收入
from salary
order by 收入 asc;
4.7、按员工的工作年限分组,统计各个工作年限的人数,并按人数从小到大排序。
select employees.工作年限,count(*) as '人数'
from employees
group by 工作年限
order by count(*) asc ;