数据库的查询(一答)

(如有错误,欢迎指正!)

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 地址 as  adress, 电话号码 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 employees where 工作年限>=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.出生日期<"1970" ;

 

+-----------+---------+--------+

 

| 姓名      | 收入    | 支出   |

 

+-----------+---------+--------+

 

| 李玉珉    |  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)分别统计男性员工和女性员工人数。

 

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> select  d.部门名称, 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)

 

数据库的查询(一答)

上一篇:一、工具类DBUtil——数据库连接


下一篇:存储引擎Innodb