(如有错误,欢迎指正!)
1.select语句查询
(1)查询employees表员工部门号和性别,要求消除重复行。
mysql>select distinct 员工部门号,性别from employees;
+—————–+——–+
| 员工部门号|性别|
+—————–+——–+
| 2 | 1 |
| 1 | 1 |
| 1 | 0 |
| 5 | 1 |
| 3 | 0 |
| 3 | 1 |
| 4 | 1 |
| 4 | 0 |
+—————–+——–+
8 rows in set (0.03 sec)
(2)计算salary表每个雇员的实际收入(实际收入=收入-支出)。
mysql> select (收入-支出) as实际收入from salary;
+——————–+
| 实际收入|
+——————–+
| 1977.7100524902344 |
| 1494.5899963378906 |
| 2662 |
| 2167.679931640625 |
| 2384.2298889160156 |
| 1880 |
| 2978.459991455078 |
| 1907.4300079345703 |
| 2119 |
| 2770.499954223633 |
| 2332.8999786376953 |
| 1958.14990234375 |
+——————–+
12 rows in set (0.00 sec)
(3)查询employees表中员工的姓名和性别,要求sex值为1时,显示为‘男’,为0时显示为‘女’。
mysql>Select 姓名,
case
when 性别=1 then "男"
when 性别=0 then "女"
end as 性别
from employees;
+———–+——–+
| 姓名|性别|
+———–+——–+
| 王林|男|
| 伍容华|男|
| 王向容|男|
| 李丽|女|
| 刘明|男|
| 朱俊|男|
| 钟敏|女|
| 张石兵|男|
| 林涛|男|
| 李玉珉|男|
| 叶凡|男|
| 陈林琳|女|
+———–+——–+
12 rows in set (0.00 sec)
(4)查询employees表每个雇员的地址和电话,列标题要求显示为 address 和 telephone。
mysql> select 地址asadress, 电话号码 as telephone from employees;
+——————–+———–+
| adress | telephone |
+——————–+———–+
| 中山路32-1-508 | 83355668 |
| 北京东路100-2 | 83321321 |
| 四牌楼10-0-108 | 83792361 |
| 中山东路102-2 | 83413301 |
| 虎距路100-2 | 83606608 |
| 牌楼巷5-3-106 | 84708817 |
| 中山路10-3-105 | 83346722 |
| 解放路34-1-203 | 84563418 |
| 中山北路24-35 | 83467336 |
| 热和路209-3 | 58765991 |
| 北京西路3-7-52 | 83308901 |
| 汉中路120-4-12 | 84468158 |
+——————–+———–+
12 rows in set (0.00 sec)
(5)计算salary表中员工月收入的平均数。
mysql> select avg(收入)as月平均收入 from salary;
+——————-+
| 月平均收入 |
+——————-+
| 2375.566640218099 |
+——————-+
1 row in set (0.00 sec)
(6)计算所有员工的总支出。
mysql>select sum(支出) as 总支出 from salary;
+——————–+
| 总支出 |
+——————–+
| 1874.1499786376953 |
+——————–+
1 row in set (0.00 sec)
(7)显示女雇主的地址和电话。
mysql> select 姓名,地址,电话号码from employees where性别=0;
+———–+——————-+————–+
| 姓名|地址|电话号码|
+———–+——————-+————–+
| 李丽|中山东路102-2 | 83413301 |
| 钟敏|中山路10-3-105 | 83346722 |
| 陈林琳|汉中路120-4-12 | 84468158 |
+———–+——————-+————–+
3 rows in set (0.00 sec)
(8)计算员工总数。
mysql> select count(*) from employees;
+———-+
| count(*) |
+———-+
| 12 |
+———-+
1 row in set (0.00 sec)
(9)显示员工的最高收入和最低收入。
mysql> Select max(收入),min(收入) from salary;
+——————+——————–+
| max(收入) | min(收入) |
+——————+——————–+
| 3259.97998046875 | 1582.6199951171875 |
+——————+——————–+
1 row in set (0.00 sec)
2.条件查询
(1)显示月收入高于2000元员工的员工号。
mysql> select 员工编号from salary where收入>2000;
+————–+
| 员工编号|
+————–+
| 000001 |
| 020010 |
| 020018 |
| 102201 |
| 108991 |
| 210678 |
| 302566 |
| 308759 |
| 504209 |
+————–+
9 rows in set (0.00 sec)
(2)查询1970年以后的员工的姓名和地址。
mysql>select 姓名,地址from employees where出生日期>"1970-1-1";
+———–+——————–+
| 姓名|地址|
+———–+——————–+
| 伍容华|北京东路100-2 |
| 王向容|四牌楼10-0-108 |
| 刘明|虎距路100-2 |
| 钟敏|中山路10-3-105 |
| 张石兵|解放路34-1-203 |
| 林涛|中山北路24-35 |
| 叶凡|北京西路3-7-52 |
+———–+——————–+
7 rows in set (0.00 sec)
(3)显示工作年限三年以上(包含3年)、学历在本科以上(包含本科)的男性员工的信息。
mysql> select * from employeeswhere 工作年限>=3 and (学历="本科" or学历="硕士") and性别= 1;
+————–+———–+——–+————–+——–+————–+——————-+————–+—————–+
| 员工编号|姓名|学历|出生日期|性别|工作年限|地址|电话号码|员工部门号|
+————–+———–+——–+————–+——–+————–+——————-+————–+—————–+
| 010008 | 伍容华|本科| 1976-03-28 | 1 | 3 |北京东路100-2 | 83321321 | 1 |
| 102201 | 刘明|本科| 1972-10-18 | 1 | 3 |虎距路100-2 | 83606608 | 5 |
| 302566 | 李玉珉|本科| 1968-09-20 | 1 | 3 |热和路209-3 | 58765991 | 4 |
+————–+———–+——–+————–+——–+————–+——————-+————–+—————–+
3 rows in set (0.00 sec)
(4)查找员工中倒数第二个数字为0的员工的姓名、地址和学历。
mysql>select 姓名,地址,学历from employees where员工编号like "%0_";
+———–+——————-+——–+
| 姓名|地址|学历|
+———–+——————-+——–+
| 王林|中山路32-1-508 |大专|
| 伍容华|北京东路100-2 |本科|
| 刘明|虎距路100-2 |本科|
| 朱俊|牌楼巷5-3-106 |硕士|
| 张石兵|解放路34-1-203 |本科|
| 陈林琳|汉中路120-4-12 |大专|
+———–+——————-+——–+
6 rows in set (0.00 sec)
(5)查询月收入在2000-3000元的员工。
mysql> select * from salary where 收入>=2000 and收入<=3000;
+————–+———+——–+
| 员工编号|收入|支出|
+————–+———+——–+
| 000001 | 2100.8 | 123.09 |
| 020010 | 2860 | 198 |
| 020018 | 2347.68 | 180 |
| 102201 | 2569.88 | 185.65 |
| 210678 | 2240 | 121 |
| 302566 | 2980.7 | 210.2 |
| 308759 | 2531.98 | 199.08 |
| 504209 | 2066.15 | 108 |
+————–+———+——–+
8 rows in set (0.00 sec)
3.多表查询
(1)查询王林的基本情况和所工作的部门名称。
mysql> select * from employees e,departments d where e.员工部门号=d.部门编号and姓名="王林";
+————–+——–+——–+————–+——–+————–+——————-+————–+—————–+————–+—————–+——–+
| 员工编号|姓名|学历|出生日期|性别|工作年限|地址|电话号码|员工部门号|部门编号|部门名称|备注|
+————–+——–+——–+————–+——–+————–+——————-+————–+—————–+————–+—————–+——–+
| 000001 | 王林|大专| 1966-01-23 | 1 | 8 |中山路32-1-508 | 83355668 | 2 | 2 |人力资源部| NULL |
+————–+——–+——–+————–+——–+————–+——————-+————–+—————–+————–+—————–+——–+
1 row in set (0.00 sec)
(2)查询财务部、研发部、市场部的员工信息。(预习和学习子查询相关知识)
mysql>select * from employees e,departments d where e.员工部门号=d.部门编号and (部门名称="财务部" or部门名称="市场部" or部门名称="研发部");
+————–+———–+——–+————–+——–+————–+——————–+————–+—————–+————–+
| 员工编号|姓名|学历|出生日期|性别|工作年限|地址|电话号码|员工部门号|部门名称|
+————–+———–+——–+————–+——–+————–+——————–+————–+—————–+————–+
| 010008 | 伍容华|本科| 1976-03-28 | 1 | 3 |北京东路100-2 | 83321321 | 1 |财务部|
| 020010 | 王向容|硕士| 1982-12-09 | 1 | 2 |四牌楼10-0-108 | 83792361 | 1 |财务部|
| 020018 | 李丽|大专| 1960-07-30 | 0 | 6 |中山东路102-2 | 83413301 | 1 |财务部|
| 302566 | 李玉珉|本科| 1968-09-20 | 1 | 3 |热和路209-3 | 58765991 | 4 |研发部|
| 308759 | 叶凡|本科| 1978-11-18 | 1 | 2 |北京西路3-7-52 | 83308901 | 4 |研发部|
| 504209 | 陈林琳|大专| 1969-09-03 | 0 | 5 |汉中路120-4-12 | 84468158 | 4 |研发部|
| 102201 | 刘明|本科| 1972-10-18 | 1 | 3 |虎距路100-2 | 83606608 | 5 |市场部|
| 102208 | 朱俊|硕士| 1965-09-28 | 1 | 2 |牌楼巷5-3-106 | 84708817 | 5 |市场部|
| 111006 | 张石兵|本科| 1974-10-01 | 1 | 1 |解放路34-1-203 | 84563418 | 5 |市场部|
+————–+———–+——–+————–+——–+————–+——————–+————–+—————–+————–+
9 rows in set (0.00 sec)
(3)查询每个雇员的基本情况和薪水情况。
(找到两种方法)
mysql> Select * from employees join salary using(员工编号);
mysql> Select * from employees e,salary s where e.员工编号=s.员工编号;
+————–+———–+——–+————–+——–+————–+——————–+————–+—————–+———+——–+
| 员工编号|姓名|学历|出生日期|性别|工作年限|地址|电话号码|员工部门号|收入|支出|
+————–+———–+——–+————–+——–+————–+——————–+————–+—————–+———+——–+
| 000001 | 王林|大专| 1966-01-23 | 1 | 8 |中山路32-1-508 | 83355668 | 2 | 2100.8 | 123.09 |
| 010008 | 伍容华|本科| 1976-03-28 | 1 | 3 |北京东路100-2 | 83321321 | 1 | 1582.62 | 88.03 |
| 020010 | 王向容|硕士| 1982-12-09 | 1 | 2 |四牌楼10-0-108 | 83792361 | 1 | 2860 | 198 |
| 020018 | 李丽|大专| 1960-07-30 | 0 | 6 |中山东路102-2 | 83413301 | 1 | 2347.68 | 180 |
| 102201 | 刘明|本科| 1972-10-18 | 1 | 3 |虎距路100-2 | 83606608 | 5 | 2569.88 | 185.65 |
| 102208 | 朱俊|硕士| 1965-09-28 | 1 | 2 |牌楼巷5-3-106 | 84708817 | 5 | 1980 | 100 |
| 108991 | 钟敏|硕士| 1979-08-10 | 0 | 4 |中山路10-3-105 | 83346722 | 3 | 3259.98 | 281.52 |
| 111006 | 张石兵|本科| 1974-10-01 | 1 | 1 |解放路34-1-203 | 84563418 | 5 | 1987.01 | 79.58 |
| 210678 | 林涛|大专| 1977-04-02 | 1 | 2 |中山北路24-35 | 83467336 | 3 | 2240 | 121 |
| 302566 | 李玉珉|本科| 1968-09-20 | 1 | 3 |热和路209-3 | 58765991 | 4 | 2980.7 | 210.2 |
| 308759 | 叶凡|本科| 1978-11-18 | 1 | 2 |北京西路3-7-52 | 83308901 | 4 | 2531.98 | 199.08 |
| 504209 | 陈林琳|大专| 1969-09-03 | 0 | 5 |汉中路120-4-12 | 84468158 | 4 | 2066.15 | 108 |
+————–+———–+——–+————–+——–+————–+——————–+————–+—————–+———+——–+
12 rows in set (0.01 sec)
(4)查询研发部在1970年以前的员工姓名和薪水情况。
mysql> select e.姓名,s.收入,s.支出
from employees e,salary s,departments d
where e.员工部门号=d.部门编号
and e.员工编号=s.员工编号
and d.部门名称="研发部"
and e.出生日期
+———–+———+——–+
| 姓名|收入|支出|
+———–+———+——–+
| 李玉珉| 2980.7 | 210.2 |
| 陈林琳| 2066.15 | 108 |
+———–+———+——–+
2 rows in set, 1 warning (0.00 sec)
(5)查询employees表中员工的姓名、住址和收入水平,要求2000元以下显示为‘低收入’,2000-3000显示为‘中等收入’,3000元以上显示为‘高收入’。
mysql> select 姓名,地址,
case
when 收入<2000 then "低收入"
when 收入>3000 then "高收入"
when 收入>2000 and收入<3000 then "中等收入"
end as "收入等级"
from employees,salary
where employees.员工编号=salary.员工编号;
+———–+——————–+————–+
| 姓名|地址|收入等级|
+———–+——————–+————–+
| 王林|中山路32-1-508 |中等收入|
| 伍容华|北京东路100-2 |低收入|
| 王向容|四牌楼10-0-108 |中等收入|
| 李丽|中山东路102-2 |中等收入|
| 刘明|虎距路100-2 |中等收入|
| 朱俊|牌楼巷5-3-106 |低收入|
| 钟敏|中山路10-3-105 |高收入|
| 张石兵|解放路34-1-203 |低收入|
| 林涛|中山北路24-35 |中等收入|
| 李玉珉|热和路209-3 |中等收入|
| 叶凡|北京西路3-7-52 |中等收入|
| 陈林琳|汉中路120-4-12 |中等收入|
+———–+——————–+————–+
12 rows in set (0.00 sec)
4.分类汇总与排序
(1)按部门列出该部门的员工人数。
mysql>select d.部门名称,count(e.姓名) as "员工总人数"
from employees e,departments d
where e.员工部门号=d.部门编号group by d.部门名称;
+—————–+—————–+
| 部门名称|员工总人数|
+—————–+—————–+
| 人力资源部| 1 |
| 市场部| 3 |
| 研发部| 3 |
| 经理办公室| 2 |
| 财务部| 3 |
+—————–+—————–+
5 rows in set (0.00 sec)
(2)分别统计男性员工和女性员工人数。
mysql> select count(*) as "人数",
case
when 性别=1 then "男"
when 性别=0 then "女"
end as 性别
from employees group by 性别;
+——–+——–+
| 人数|性别|
+——–+——–+
| 3 | 女|
| 9 | 男|
+——–+——–+
2 rows in set, 1 warning (0.00 sec)
(3)查找雇员数超过2人的部门名称和员工数量。
mysql> selectd.部门名称, count(e.姓名)as "员工总人数"
from employees e,departments d
where e.员工部门号=d.部门编号
group by d.部门名称
having count(*)>2 ;
+————–+—————–+
| 部门名称|员工总人数|
+————–+—————–+
| 市场部| 3 |
| 研发部| 3 |
| 财务部| 3 |
+————–+—————–+
3 rows in set (0.00 sec)
(4)按员工学历分组统计各种学历人数。
mysql> select 学历,count(*) as人数
from employees
group by 学历;
+——–+——–+
| 学历|人数|
+——–+——–+
| 大专| 4 |
| 本科| 5 |
| 硕士| 3 |
+——–+——–+
3 rows in set (0.00 sec)
(5)将员工信息按出生日期从大到小排序。
mysql> select * from employees order by 出生日期;
+————–+———–+——–+————–+——–+————–+——————–+————–+—————–+
| 员工编号|姓名|学历|出生日期|性别|工作年限|地址|电话号码|员工部门号|
+————–+———–+——–+————–+——–+————–+——————–+————–+—————–+
| 020018 | 李丽|大专| 1960-07-30 | 0 | 6 |中山东路102-2 | 83413301 | 1 |
| 102208 | 朱俊|硕士| 1965-09-28 | 1 | 2 |牌楼巷5-3-106 | 84708817 | 5 |
| 000001 | 王林|大专| 1966-01-23 | 1 | 8 |中山路32-1-508 | 83355668 | 2 |
| 302566 | 李玉珉|本科| 1968-09-20 | 1 | 3 |热和路209-3 | 58765991 | 4 |
| 504209 | 陈林琳|大专| 1969-09-03 | 0 | 5 |汉中路120-4-12 | 84468158 | 4 |
| 102201 | 刘明|本科| 1972-10-18 | 1 | 3 |虎距路100-2 | 83606608 | 5 |
| 111006 | 张石兵|本科| 1974-10-01 | 1 | 1 |解放路34-1-203 | 84563418 | 5 |
| 010008 | 伍容华|本科| 1976-03-28 | 1 | 3 |北京东路100-2 | 83321321 | 1 |
| 210678 | 林涛|大专| 1977-04-02 | 1 | 2 |中山北路24-35 | 83467336 | 3 |
| 308759 | 叶凡|本科| 1978-11-18 | 1 | 2 |北京西路3-7-52 | 83308901 | 4 |
| 108991 | 钟敏|硕士| 1979-08-10 | 0 | 4 |中山路10-3-105 | 83346722 | 3 |
| 020010 | 王向容|硕士| 1982-12-09 | 1 | 2 |四牌楼10-0-108 | 83792361 | 1 |
+————–+———–+——–+————–+——–+————–+——————–+————–+—————–+
12 rows in set (0.01 sec)