当前位置: 首页 > news >正文

数据库第二次作业

作业思路
1、按要求把数据库和表建好,录入信息
mysql> create database wei_tow;
Query OK, 1 row affected (0.01 sec)
mysql> use wen_tow;
Database changed
CREATE TABLE t_worker (
department_id INT(11) NOT NULL COMMENT '部门号',
worker_id INT(11) PRIMARY KEY NOT NULL COMMENT '职工号',
worker_date DATE NOT NULL COMMENT '工作时间',
wages FLOAT(8,2) NOT NULL COMMENT '工资',
name VARCHAR(20) NOT NULL COMMENT '姓名',
politics VARCHAR(10) NOT NULL DEFAULT '群众' COMMENT '政治面貌',
birth_date DATE NOT NULL COMMENT '出生日期'
);
mysql> desc t_worker;
+---------------+-------------+------+-----+---------+-------+
| Field         | Type        | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+-------+
| department_id | int         | NO   |     | NULL    |       |
| worker_id     | int         | NO   | PRI | NULL    |       |
| worker_date   | date        | NO   |     | NULL    |       |
| wages         | float(8,2)  | NO   |     | NULL    |       |
| name          | varchar(20) | NO   |     | NULL    |       |
| politics      | varchar(10) | NO   |     | 群众    |       |
| birth_date    | date        | NO   |     | NULL    |       |
+---------------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)
mysql> insert into t_worker value (101,1001,'2015-5-4',7500.00,'张春燕','群众','1990-7-1');
Query OK, 1 row affected (0.01 sec)
mysql> insert into t_worker values(101,1002,'2019-2-6',5200.00,'李名博','团员','1994-2-8');
Query OK, 1 row affected (0.01 sec)
mysql> insert into t_worker values (102,1003,'2008-1-4',10500.00,'王博涵','党员','1994-9-5');
Query OK, 1 row affected (0.01 sec)
mysql> insert into t_worker values(102,1004,'2016-10-10',5500.00,'赵小军','群众',,'1994-9-5');
Query OK, 1 row affected (0.01 sec)
mysql> insert into t_worker values(102,1005,'2014-4-1',8800.00,'钱有财','党员','1992-12-30');
Query OK, 1 row affected (0.01 sec)
mysql> insert into t_worker values(103,1006,'2019-5-5',5500.00,'孙菲菲','党员','1996-9-2');
Query OK, 1 row affected (0.01 sec)

2、按照题意写代码

2.1 显示所有职工的基本信息
mysql> select * from t_worker;
+---------------+-----------+-------------+----------+--------+----------+------------+
| department_id | worker_id | worker_date | wages    | name   | politics | birth_date |
+---------------+-----------+-------------+----------+--------+----------+------------+
|           101 |      1001 | 2015-05-04  |  7500.00 | 张春雁 | 群众     | 1990-07-01 |
|           101 |      1002 | 2019-02-06  |  5200.00 | 李名博 | 团员     | 1994-02-08 |
|           102 |      1003 | 2008-01-04  | 10500.00 | 王博涵 | 党员     | 1994-09-05 |
|           102 |      1004 | 2016-10-10  |  5500.00 | 赵小军 | 群众     | 1994-09-05 |
|           102 |      1005 | 2014-04-01  |  8800.00 | 钱有财 | 党员     | 1992-12-30 |
|           103 |      1006 | 2019-05-05  |  5500.00 | 孙菲菲 | 党员     | 1996-09-02 |
+---------------+-----------+-------------+----------+--------+----------+------------+
6 rows in set (0.00 sec)

2.2 查询所有职工所属部门的部门号,不显示重复的部门号
mysql> select distinct department_id from t_worker;
+---------------+
| department_id |
+---------------+
|           101 |
|           102 |
|           103 |
+---------------+


2.3 求出所有职工的人数
mysql> select count(*) as total_employess from t_worker;
+-----------------+
| total_employess |
+-----------------+
|               6 |
+-----------------+
1 row in set (0.01 sec)

2.4 列出最高工和最低工资
mysql> select max(wages) as max_wage,min(wages) as min_wage from t_worker;
+----------+----------+
| max_wage | min_wage |
+----------+----------+
| 10500.00 |  5200.00 |
+----------+----------+
1 row in set (0.00 sec)

2.5 列出职工的平均工资和总工资
mysql> select avg(wages) as avg_wage,sum(wages) as sum_wage from t_worker;
+-------------+----------+
| avg_wage    | sum_wage |
+-------------+----------+
| 7166.666667 | 43000.00 |
+-------------+----------+
1 row in set (0.00 sec)

2.6 创建一个只有职工号、姓名和参加工作的新表,名为工作日期表
mysql> create table work_name_table as select worker_id,name,department_id from t_worker;
Query OK, 6 rows affected (0.04 sec)
Records: 6  Duplicates: 0  Warnings: 0
mysql> select * from work_name_table;
+-----------+--------+---------------+
| worker_id | name   | department_id |
+-----------+--------+---------------+
|      1001 | 张春雁 |           101 |
|      1002 | 李名博 |           101 |
|      1003 | 王博涵 |           102 |
|      1004 | 赵小军 |           102 |
|      1005 | 钱有财 |           102 |
|      1006 | 孙菲菲 |           103 |
+-----------+--------+---------------+
6 rows in set (0.00 sec)

2.7 显示所有党员的年龄
mysql> select name,timestampdiff(year,birth_date,curdate()) as age from t_worker;
+--------+------+
| name   | age  |
+--------+------+
| 张春雁 |   35 |
| 李名博 |   31 |
| 王博涵 |   30 |
| 赵小军 |   30 |
| 钱有财 |   32 |
| 孙菲菲 |   28 |
+--------+------+
6 rows in set (0.00 sec)
注意:
TIMESTAMPDIFF 是 MySQL 中用于计算两个日期或时间之间差值的函数,语法为:
TIMESTAMPDIFF(unit, start_datetime, end_datetime)
作用:返回 end_datetime 与 start_datetime 之间按指定单位(unit)计算的差值。
常用单位:SECOND(秒)、MINUTE(分钟)、HOUR(小时)、DAY(天)、MONTH(月)、YEAR(年)等。

CURDATE() 是 MySQL 中的一个内置函数,用于返回当前的日期。它的返回值格式通常为 YYYY-MM-DD(例如:2025-07-15),具体格式可能受 MySQL 服务器配置影响

2.8 列出工资在 4000 - 8000 之间的所有职工姓名
mysql> select name from t_worker where wages between 4000 and 8000;
+--------+
| name   |
+--------+
| 张春雁 |
| 李名博 |
| 赵小军 |
| 孙菲菲 |
+--------+
4 rows in set (0.00 sec)

2.9 列出所有孙姓和李姓的职工姓名
mysql> select name from t_worker where name like '李%' or name like '孙%';
+--------+
| name   |
+--------+
| 李名博 |
| 孙菲菲 |
+--------+
2 rows in set (0.00 sec)

2.10 列出所有部门号为 102 和 103 且不是党员的职工号、姓名
mysql> select worker_id,name from t_worker where department_id in(102,103) and politics !='党员';

mysql> select worker_id,name from t_worker where department_id in(102,103) and politics !='党员';
+-----------+--------+
| worker_id | name   |
+-----------+--------+
|      1004 | 赵小军 |
+-----------+--------+
1 row in set (0.00 sec)

2.11 将职工表 t_worker 中的职工按出生的先后顺序排序
mysql> select name,birth_date from t_worker order by birth_date;
+--------+------------+
| name   | birth_date |
+--------+------------+
| 张春雁 | 1990-07-01 |
| 钱有财 | 1992-12-30 |
| 李名博 | 1994-02-08 |
| 王博涵 | 1994-09-05 |
| 赵小军 | 1994-09-05 |
| 孙菲菲 | 1996-09-02 |
+--------+------------+
6 rows in set (0.00 sec)

其基本语法为:SELECT 列名 FROM 表名 ORDER BY 列名 [ASC|DESC],其中 ASC 表示升序(默认,可省略),DESC 表示降序。

2.12 显示工资最高的前 3 名职工的职工号和姓名
mysql> select worker_id,name from t_worker order by wages desc limit 3;
+-----------+--------+
| worker_id | name   |
+-----------+--------+
|      1003 | 王博涵 |
|      1005 | 钱有财 |
|      1001 | 张春雁 |
+-----------+--------+
3 rows in set (0.00 sec)

ORDER BY wages DESC 和 LIMIT 3 是 SQL 查询中用于排序和限制结果的语句,组合起来的作用是:
ORDER BY wages DESC:按照 wages(工资)这一列的值进行降序排序(即从高到低排列)。
LIMIT 3:只返回排序后的前 3 条记录。

2.13 求出各部门党员的人数
mysql> select department_id,count(*) as party_member_count 
from t_worker 
where politics = '党员' 
group by department_id;
+---------------+--------------------+
| department_id | party_member_count |
+---------------+--------------------+
|           102 |                  2 |
|           103 |                  1 |
+---------------+--------------------+
2 rows in set (0.00 sec)

SELECT department_id, COUNT(*) AS party_member_count
选取 department_id(部门 ID)作为分组依据。
使用 COUNT(*) 统计每个分组中的记录数(即党员人数),并将结果命名为 party_member_count。
FROM t_worker
从 t_worker 表中获取数据。
WHERE politics = '党员'
过滤条件:仅统计政治面貌为 "党员" 的员工。
GROUP BY department_id
按 department_id 分组,确保每个部门的统计结果独立显示。

2.14 统计各部门的工资和平均工资并保留 2 位小数
mysql> select department_id,sum(wages) as sum_department,round(avg(wages),2) as round_department 
from t_worker 
group by department_id;
+---------------+----------------+------------------+
| department_id | sum_department | round_department |
+---------------+----------------+------------------+
|           101 |       12700.00 |             6350 |
|           102 |       24800.00 |          8266.67 |
|           103 |        5500.00 |             5500 |
+---------------+----------------+------------------+
3 rows in set (0.00 sec)

http://www.lryc.cn/news/588966.html

相关文章:

  • 【Python练习】044. 编写一个函数,实现快速排序算法
  • 本地电脑安装Dify|内网穿透到公网
  • 开源AI应用开发平台Dify系列(一)
  • YOLO融合CFFormer中的FeatureCorrection_s2c模块
  • 多租户SaaS系统中设计安全便捷的跨租户流程共享
  • 遥感数据与作物生长模型同化及在作物长势监测与估产中的应用
  • 弗兰肯斯坦式的人工智能与GTM策略的崩溃
  • 运维效率提升利器:grep、sed、awk详解与实战练习指南
  • (LeetCode 面试经典 150 题) 383. 赎金信 (哈希表)
  • AR眼镜:重塑医学教育,开启智能教学新时代
  • 配置使用SSH与VScode进行连接
  • dockerfile 最佳实践
  • 如何解决服务器频繁重启的问题?
  • 流媒体直播分发服务器
  • 基于深度学习的LSTM、GRU对大数据交通流量分析与预测的研究
  • Python初学者笔记第十二期 -- (集合与字典编程练习题)
  • 信息学奥赛一本通 1552:【例 1】点的距离
  • 短剧小程序的「技术革命」:从「粗放生长」到「精准运营」
  • MySQL中的“引擎“是什么意思
  • 【算法-BFS 解决最短路问题】探索BFS在图论中的应用:最短路径问题的高效解法
  • UnitTest测试框架的基本使用方法(详细介绍)
  • Ubuntu24 辅助系统-屏幕键盘的back按键在网页文本框删除不正常的问题解决方法
  • 博客项目 laravel vue mysql 第六章 文章功能
  • WPF中的ListBox详解
  • QTableView鼠标双击先触发单击信号
  • 3. ArrayList与LinkedList的区别
  • Redis的下载安装+基础操作+redis客户端的安装
  • Java :List,LinkedList,ArrayList
  • 23种设计模式--#1工厂模式
  • CodeRush AI 助手进驻 Visual Studio:AiGen/AiFind 亮相(一)