实训5:
Desc Employees;
问题:ERROR 1146 : Table 'test.empartment' doesn't exist
PC运行无问题,猜测上课机房软件问题的原因
1. SELECT语句的基本使用
• 查询Employees表的员工部门号和性别,要求消除重复行
SELECT `员工部门号`,`性别`
FROM employees;
要求消除重复行
SELECT DISTINCT  `员工部门号`,`性别`
FROM employees;
书本例子:显示表中所有列
SELECT*FROM Employees;
AS子句可更改查询结果的列名:
SELECT 书名 AS name,作者 AS auther,出版社 AS publisher
FROM Book
WHERE 图书类别=’计算机’;
• 计算每个雇员的实际收入(实际收入=收入-支出)
SELECT 员工编号,收入-支出 AS 实际收入
FROM salary; 
③查询Employees表中员工的姓名和性别,要求性别值为1时显示为"男",为0时显示为”女”
  SELECT 姓名,
  CASE
  WHEN 性别 = 0 THEN ‘女’
  ELSE ‘男’
  END AS 性别
  FROM Employees;
问题:1054 - Unknown column '‘男’' in 'field list'
发现:文本下书写的英文模式的’’到MySQL查询中时仍然需要重新输入下英文模式的’’,不然会出现1054错误,但有时文本中的英文模式复制过去正常运行
解决方案:在查询中的英文模式中再输入下’’
• 查询每个雇员的地址和电话号码,显示的列标题为adress、telephone
SELECT 地址 AS adress,电话号码 AS telephone  
FROM Employees;
• 计算Salary表中员工月收入的平均数
SELECT AVG (收入)员工月收入的平均数
FROM Salary;
问题:1054 - Unknown column 'AVG' in 'field list'
发现:问题为(收入)此处括号用成了中文模式的
解决方案:将()修改为英文模式便解决了
• 计算所有员工的总支出
SELECT SUM(支出) AS 所有员工的总支出
FROM Salary;
• 显示女雇员的地址和电话号码
SELECT 地址,电话号码
FROM Employees;
WHERE 性别 = 0;
• 计算员工总数
SELECT COUNT(*)AS’员工数’
FROM Employees;
• 显示最高收入和最低收入的员工的员工编号
SELECT  MAX(收入),MIN(收入)
FROM Salary;
问题:如何让它显示员工编号
解决方案:
1. 条件查询
• 显示月收入高于2000元的员工编号
SELECT 员工编号,
收入 from salary where 收入>=2000;
• 查询1970年以后出生的员工的姓名和地址
SELECT 姓名,地址,出生日期
from employees where 出生日期>=’1970’;
问题解决:’’到查询中时修改下
• 显示工作年限3年以上(含3年)、学历在本科以上(含本科)的男性员工的信息
select 姓名,性别,工作年限,学历
from employees where 性别='1' and 工作年限>=3 and 学历='本科';
• 查找员工编号中倒数第2个数字为0的姓名、地址和学历
select 员工编号,姓名,地址,学历
 from employees where 员工编号 like '%0_';
• 查询月收入在2000元—3000元的员工编号
select 姓名,收入
from salary join employees on (salary.员工编号=employees.员工编号) where 收入>=2000 and 收入<=3000;
1. 多表查询
• 查询“李丽”的基本情况和所工作的部门名称
select distinct * from employees
join department on (employees.员工部门号=department.部门编号)
join salary on (employees.员工编号=salary.员工编号) where 姓名='李丽';
• 查询财务部、研发部、市场部的员工信息
select * from department
 join employees on(employees.员工部门号=department.部门编号)
where 部门名称='财务部' or 部门名称='研发部' or 部门名称='市场部';
• 查询每个雇员的基本情况和薪水情况
select distinct * from employees
 join salary on(employees.员工编号=salary.员工编号);
• 查询研发部在1970年以前出生的员工姓名和薪水情况
select 姓名,出生日期,部门名称,收入,支出 from employees
join salary on(employees.员工编号=salary.员工编号)
 join department on(employees.员工部门号=department.部门编号)
 where 部门名称='研发部' and 出生日期>'1970';
• 查询员工的姓名、住址和收入水平,要求2000元以下显示为“低收入”,2000元—3000元显示为“中等收入”,3000元以上时显示为“高收入”
select 姓名,地址,case when 收入<2000 then '低收入' when 收入>=2000
and 收入<=3000 then '中等收入'
 else '高收入'
end as 收入水平 from employees
join salary on(employees.员工编号=salary.员工编号);
1. 分类汇总与排序
• 按部门列出该部门工作的员工人数
select 部门名称,count(*) from department
 join employees on(employees.员工部门号=department.部门编号)
 group by 部门名称;
• 分别统计男性员工和女性员工人数
select 性别,count(*) from employees group by 性别;
• 查找雇员数超过2人的部门名称和员工数量
select 部门名称,count(*) as 员工人数 from department
 join employees on(employees.员工部门号=department.部门编号)
group by 部门名称 having count(*)>2;
• 按员工学历分组统计各种学历人数
select 学历,count(*) from employees group by 学历;
• 将员工信息按出生日期从大到小排序
select * from employees order by 出生日期 desc;
• 将员工薪水按收入多少从小到大排序
select 姓名,收入 from employees
 join salary on(employees.员工编号=salary.员工编号) order by 收入;
• 按员工的工作年限分组,统计各个工作年限的人数,并按人数从小到大排序
select 工作年限,count(*) from employees group by 工作年限 order by count(*);

思考题5:

对XSCJ数据库完成以下查询:



查询XS表中各个同学的姓名、专业名和总学分

select 姓名,专业名,总学分 from XS;


查询XS表中计算机系同学的学号、姓名和总学分,结果中各列的标题分别指定为number、name和mark。

select 学号 as number,姓名 as name,总学分 as mark from XS

where 专业名='计算机';

查询xs表中计算机系各同学的学号、姓名和总学分,对其总学分按以下规则进行替换:若总学分为空值,替换为“尚未选课”;若总学分小于50,替换为“不及格”;若总学分在50~52之间,替换为“合格”;若总学分大于52,替换为优秀。列标题更改为”等级“。

select 学号,姓名,总学分,
case when 总学分 is null then '尚未选课'
when 总学分<50 then '不及格'
when 总学分>=50 and 总学分<=52 then '合格'
when 总学分>52 then '优秀' end as 等级 from XS where 专业名='计算机';
按120分计算成绩,显示XS_KC 表中学号为081101的学生课程信息。
select *,姓名,round(成绩*1.2,2)
as 120分值的成绩 from XS_KC join xs using(学号) where 学号='081101';



对XS表只选择专业名和总学分,消除结果集中的重复行。

select distinct 专业名,总学分 from XS;
select distinct 专业名,总学分 from XS;