MYSQL数据库系统第6次实验 数据表查询综合实验

创建新冠疫情期间企业复工复产信息数据库(rwork),其中包含两张表,分别是疫情记录表(ep)、企业复工复产记录表(ew),两张表的结构如表1和表2:

  1. 创建rwork数据库,按照表1和表2结构创建ep和ew数据表,要求ew表的外键与ep表的主键字段使用级联更新和级联删除。
    在这里插入图片描述
mysql> create table ep(
    -> pid int primary key not null auto_increment comment'地区编号',
    -> rname varchar(20) not null unique comment'地区名称',
    -> fnum int default 0 comment '现存确诊人数',
    -> rnum int default 0 comment'累计确诊人数',
    -> cnum int default 0 comment'治愈人数',
    -> dnum int default 0 comment'死亡人数',
    -> pdate DateTime default now() comment'发布时间'
    -> );
Query OK, 0 rows affected (1.53 sec)

在这里插入图片描述

mysql> create table ew(
    -> wid varchar(20) primary key comment'工商注册号',
    -> ename varchar(100) not null comment'企业名称',
    -> pid int not null comment'所在地区',
    -> tel varchar(11) not null comment'联系电话',
    -> linkman varchar(10) not null comment'联系人',
    -> total int default 0 comment'员工总人数',
    -> rcount int default 0 comment'复工人数',
    -> tcount int default 0 comment'核酸检测人数',
    -> infect int default 0 comment'感染隔离人数',
    -> rdate datetime comment'复查时间',
    -> foreign key(pid) references ep (pid)
    -> on delete cascade
    -> on update cascade
    -> );
Query OK, 0 rows affected (1.49 sec)

2.分别在ep和ew数据表中添加以下记录:
(1)ep表记录
(‘广东’,7,1637,1622,8);
(‘北京’,297,891,585,9);
(‘香港’,95,1197,1095,7);
(‘上海’,24,706,675,7);
(‘甘肃’,21,162,139,2);
(‘四川’,11,589,575,3);
(‘台湾’,5,447,435,7);

注意:我们的评论数据中存在emoji表情,而这些表情是按照四个字节一个单位进行编码的,而我们通常使用的utf-8编码在mysql数据库中默认是按照3个字节一个单位进行编码的,正是这个原因导致将数据存入mysql数据库的时候出现错误。

把一张表里所有的字段编码都改成 utfmb4

alter table `你的表` convert to character set utf8mb4;
mysql>   alter table `ep` convert to character set utf8mb4;
Query OK, 0 rows affected (1.33 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> insert into ep (rname,fnum,rnum,cnum,dnum)
    -> values ('广东',7,1637,1622,8),
    ->  values ('北京',297,891,585,9),
    -> ('香港',95,1197,1095,7),
    ->  ('上海',24,706,675,7),
    ->  ('甘肃',21,162,139,2),
    ->  ('四川',11,589,575,3),
    ->  ('台湾',5,447,435,7);
Query OK, 6 rows affected (0.10 sec)
Records: 6  Duplicates: 0  Warnings: 0

mysql> select * from ep;
+-----+-------+------+------+------+------+---------------------+
| pid | rname | fnum | rnum | cnum | dnum | pdate               |
+-----+-------+------+------+------+------+---------------------+
|   1 | 广东  |    7 | 1637 | 1622 |    8 | 2021-06-01 14:23:26 |
|   2 | 北京  |  297 |  891 |  585 |    9 | 2021-06-01 14:25:32 |
|   3 | 香港  |   95 | 1197 | 1095 |    7 | 2021-06-01 14:25:32 |
|   4 | 上海  |   24 |  706 |  675 |    7 | 2021-06-01 14:25:32 |
|   5 | 甘肃  |   21 |  162 |  139 |    2 | 2021-06-01 14:25:32 |
|   6 | 四川  |   11 |  589 |  575 |    3 | 2021-06-01 14:25:32 |
|   7 | 台湾  |    5 |  447 |  435 |    7 | 2021-06-01 14:25:32 |
+-----+-------+------+------+------+------+---------------------+
7 rows in set (0.00 sec)

(2)ew表记录
(‘GZ101’,‘广东金晶科电子股份有限公司’,1,‘13745291034’,‘张长卫’,2345,2342,2123,3,‘2020-6-10’);
(‘GZ102’,‘广州立白企业集团有限公司’,1,‘13524791734’,‘王扶林’,1126,1121,1126,0,‘2020-5-8’);
(‘HZ103’,‘惠州市惠城区创美灯饰加工厂’,1,‘13414687273’,‘刘文忠’,873,842,324,2,‘2020-5-23’);
(‘BJ101’,‘北京暖通空调公司’,2,‘13834577264’,‘吴志强’,727,720,727,0,‘2020-5-28’);
(‘BJ102’,‘北京启晖生物科技有限公司’,2,‘13726747288’,‘张丽楠’,560,534,534,0,‘2020-5-28’);
(‘SH101’,‘上海特斯拉工厂’,4,‘13885231704’,‘王长林’,1234,1130,1130,0,‘2020-2-10’);

mysql> alter table `ew` convert to character set utf8mb4;
Query OK, 0 rows affected (1.86 sec)
Records: 0  Duplicates: 0  Warnings: 0


mysql>  insert into ew (wid,ename,pid,tel,linkman,total,rcount,tcount,infect,rdate)
    -> values
    ->  ('GZ101','广东金晶科电子股份有限公司',1,'13745291034','张长卫',2345,2342,2123,3,'2020-6-10'),
    ->  ('GZ102','广州立白企业集团有限公司',1,'13524791734','王扶林',1126,1121,1126,0,'2020-5-8'),
    ->  ('HZ103','惠州市惠城区创美灯饰加工厂',1,'13414687273','刘文忠',873,842,324,2,'2020-5-23'),
    ->  ('BJ101','北京暖通空调公司',2,'13834577264','吴志强',727,720,727,0,'2020-5-28'),
    ->  ('BJ102','北京启晖生物科技有限公司',2,'13726747288','张丽楠',560,534,534,0,'2020-5-28'),
    ->  ('SH101','上海特斯拉工厂',4,'13885231704','王长林',1234,1130,1130,0,'2020-2-10');
Query OK, 6 rows affected (0.88 sec)
Records: 6  Duplicates: 0  Warnings: 0

在这里插入图片描述
3、查询已复工的广州企业的全部信息。(说明:企业编号含有‘GZ’字符串的记录即为广州企业)

mysql> select *
    -> from ew
    -> where wid like '%GZ%';

在这里插入图片描述
4、查询累计确诊人数大于全部地区平均累计确诊人数的地区名称rname、累计确诊人数rnum、死亡人数dnum;

mysql> select rname 地区人数,rnum 累计确诊人数,dnum 死亡人数
    -> from ep
    -> where rnum>(select avg(rnum) from ep);
+----------+--------------+----------+
| 地区人数 | 累计确诊人数 | 死亡人数 |
+----------+--------------+----------+
| 广东     |         1637 |        8 |
| 北京     |          891 |        9 |
| 香港     |         1197 |        7 |
+----------+--------------+----------+
3 rows in set (0.00 sec)

5、查询复工比例大于90%的企业的名称,所在地区名称rname,企业名称ename,复工率,查询结果按照复工率降序排列,所有查询结果字段用中文别名。(说明:复工率=(复工人数rcount /企业总人数total)>0.9)

mysql>  select ename as 企业名称,rname as 所在地区,(rcount/total)*100 as 复工率
    -> from ep
    -> join ew
    -> on ep.pid=ew.pid
    -> where (rcount/total)>0.9
    -> order by 复工率 desc;
+----------------------------+----------+---------+
| 企业名称                   | 所在地区 | 复工率  |
+----------------------------+----------+---------+
| 广东金晶科电子股份有限公司 | 广东     | 99.8721 |
| 广州立白企业集团有限公司   | 广东     | 99.5560 |
| 北京暖通空调公司           | 北京     | 99.0371 |
| 惠州市惠城区创美灯饰加工厂 | 广东     | 96.4490 |
| 北京启晖生物科技有限公司   | 北京     | 95.3571 |
| 上海特斯拉工厂             | 上海     | 91.5721 |
+----------------------------+----------+---------+
6 rows in set (0.00 sec)

6、查询企业复工人数平均值大于700的地区,结果显示地区编码、地区名称、企业复工人数最大值、最小值、平均值,所有查询结果字段用中文别名;
法1:

mysql>  select ep.pid 地区编码,rname 地区名称,
    -> max(rcount) 企业复工人数平均值,
    -> min(rcount) as 企业复工人数最小值,
    -> avg(rcount) as 企业复工人数平均值
    -> from ep
    -> inner join ew
    -> on ep.pid=ew.pid
    -> group by ep.pid
    -> having avg(rcount)>700;
+----------+----------+--------------------+--------------------+--------------------+
| 地区编码 | 地区名称 | 企业复工人数平均值 | 企业复工人数最小值 | 企业复工人数平均值 |
+----------+----------+--------------------+--------------------+--------------------+
|        1 | 广东     |               2342 |                842 |          1435.0000 |
|        4 | 上海     |               1130 |               1130 |          1130.0000 |
+----------+----------+--------------------+--------------------+--------------------+
2 rows in set (0.00 sec)

法2:

mysql>  select t1.pid as 地区编码,
    -> rname as 地区名,
    -> 企业复工人数平均值,
    -> 企业复工人数最大值,
    -> 企业复工人数最小值
    -> from
    -> (select pid,
    -> avg(rcount) as 企业复工人数平均值,
    -> max(rcount) as 企业复工人数最大值,
    -> min(rcount) as 企业复工人数最小值
    -> from ew
    -> group by pid
    -> having avg(rcount)>700)t1
    -> left join ep t2
    -> on t1.pid=t2.pid;
+----------+--------+--------------------+--------------------+--------------------+
| 地区编码 | 地区名 | 企业复工人数平均值 | 企业复工人数最大值 | 企业复工人数最小值 |
+----------+--------+--------------------+--------------------+--------------------+
|        1 | 广东   |          1435.0000 |               2342 |                842 |
|        4 | 上海   |          1130.0000 |               1130 |               1130 |
+----------+--------+--------------------+--------------------+--------------------+
2 rows in set (0.00 sec)

7、修改广东省治愈人数cnum增加10%,累计确诊人数rnum增加8%。

mysql>  update ep set cnum=cnum+0.1*cnum,
    -> rnum=rnum+0.08*rnum
    -> where rname like '%广东%';
Query OK, 1 row affected (0.87 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql>  select * from ep
    -> where ep.pid=1;
+-----+-------+------+------+------+------+---------------------+
| pid | rname | fnum | rnum | cnum | dnum | pdate               |
+-----+-------+------+------+------+------+---------------------+
|   1 | 广东  |    7 | 1768 | 1784 |    8 | 2021-06-01 14:23:26 |
+-----+-------+------+------+------+------+---------------------+
1 row in set (0.00 sec)

8、复制企业复产记录表ew生成新数据表,表名为ew6,然后从ew6表中删除核酸检测率低于50%(即:核酸检测人数tcount / rcount复工人数<0.5)的企业记录。

mysql> create table ew6 as select * from ew;
Query OK, 6 rows affected (1.72 sec)
Records: 6  Duplicates: 0  Warnings: 0

mysql> delete from ew6
    -> where tcount/rcount<0.5;
Query OK, 1 row affected (0.87 sec)

mysql> select * from ew6;

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面我将为您介绍如何进行MySQL数据库表的数据查询操作实验。 首先,我们需要连接到MySQL数据库。在终端中输入以下命令: ``` mysql -u username -p ``` 其中,username是您的MySQL用户名。按回车键后,系统会提示您输入密码。输入密码后,按回车键即可连接到MySQL数据库。 在连接成功后,我们需要选择要查询数据库。输入以下命令: ``` use database_name; ``` 其中,database_name是您要查询数据库名称。 接着,我们可以使用SELECT语句来查询数据。以下是一个基本的SELECT语句: ``` SELECT * FROM table_name; ``` 其中,table_name是您要查询的表格名称。这个语句将会查询表格中的所有数据。 如果您只想查询特定的列,可以将列名称替换为*。例如: ``` SELECT column1, column2, column3 FROM table_name; ``` 这个语句将会查询表格中的column1、column2和column3列的数据。 如果您只想查询满足特定条件的数据,可以使用WHERE子句。例如,以下语句将会查询表格中age大于等于18岁的数据: ``` SELECT * FROM table_name WHERE age >= 18; ``` 除了WHERE子句,您还可以使用ORDER BY子句来按照特定列的值对数据进行排序。例如,以下语句将会按照age列的值从小到大对数据进行排序: ``` SELECT * FROM table_name ORDER BY age ASC; ``` 最后,查询结束后,您可以使用exit命令来退出MySQL数据库: ``` exit; ``` 希望这些信息能够对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值