目录
一、windows中选择一种方式安装Mysql8.0
二、新建产品库mydb6_product
1. 新建3张表如下:
1)employees表
2)orders表
3)invoices表
三、新建员工库mydb8_worker,添加自定义表内容并插入数据
1. 新建库表
2. 插入数据
3. 完成以下查询
1)显示所有职工的基本信息。
2)查询所有职工所属部门的部门号,不显示重复的部门号。
3)求出所有职工的人数。
4)列出最高工和最低工资。
5)列出职工的平均工资和总工资。
6)创建一个只有职工号、姓名和参加工作时间的新表,名为工作日期表。
7)显示所有党员的年龄。
8)列出工资在4000-8000之间的所有职工姓名。
9)列出所有孙姓和李姓的职工姓名。
10)列出所有部门号为102和103且不是党员的职工号、姓名。
11)将职工表t_worker中的职工按出生的先后顺序排序。
12)显示工资最高的前3名职工的职工号和姓名。
13)求出各部门党员的人数。
14)统计各部门的工资和平均工资并保留2位小数。
15)列出总人数大于等于3的部门号和总人数。
一、windows中选择一种方式安装Mysql8.0
- 具体步骤见Mysql栏上文
二、新建产品库mydb6_product
mysql> create database mydb6_product;
Query OK, 1 row affected (0.04 sec)mysql> show databases;
1. 新建3张表如下:
1)employees表
-
列1:id,整型,主键
-
列2:name,字符串,最大长度50,不能为空
-
列3: age,整型
-
列4:gender,字符串,最大长度10,不能为空,默认值“unknown”
-
列5: salary,浮点型
mysql> use mydb6_product; # 使用库
Database changed# 建表
mysql> create table employees(-> id int primary key,-> name varchar(50) not null,-> age int,-> gender varchar(10) not null default 'unknown',-> salary float-> );
Query OK, 0 rows affected (0.03 sec)mysql> desc employees; # 查看
2)orders表
-
列1:id,整型,主键
-
列2:name,字符串,最大长度100,不能为空
-
列3: price,浮点型
-
列4: quantity,整型
-
列S:category,字符串,最大长度50
mysql> create table orders(-> id int primary key,-> name varchar(100) not null,-> price float,-> quantity int,-> category varchar(50)-> );
Query OK, 0 rows affected (0.03 sec)mysql> desc orders; # 查看
3)invoices表
-
列1:number,整型,主键自增长
-
列2:order_id,整型,外键关联到orders表的id列
-
列3:in_date:日期型
-
列4:total_amount:浮点型,要求数据大于0
mysql> create table invoices( -> number int auto_increment primary key, -> order_id int,-> in_date date, -> total_amount float check(total_amount>0), -> foreign key(order_id) refereences orders(id) on delete restrict on update cascade -> );
Query OK, 0 rows affected (0.03 sec)mysql> desc invoices; # 查看
三、新建员工库mydb8_worker,添加自定义表内容并插入数据
1. 新建库表
# 创建数据库
mysql> create database mydb8_worker;
Query OK, 1 row affected (0.01 sec)
# 使用库
mysql> use mydb8_worker;
Database changed
# 创建数据表
mysql> 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 '工资',-> politics varchar(10) not null default '群众' comment '政治面貌',-> name varchar(20) not null comment '姓名',-> borth_date date not null comment '出生日期'-> );
Query OK, 0 rows affected, 3 warnings (0.02 sec)# 查看表结构
mysql> desc t_worker;
2. 插入数据
mysql> insert into t_worker values(101,1001,'2015-5-4',7500.00,'群众','张三','1990-7-1');
mysql> insert into t_worker values(101,1002,'2019-3-5',5200.00,'团员','李四','1995-3-7');
mysql> insert into t_worker values(102,1003,'2008-1-4',10500.00,'党员','王五','1983--5-8');
mysql> insert into t_worker values(102,1004,'2016-10-10',5500.00,'群众','赵六','1994-9-5');
mysql> insert into t_worker values(102,1005,'2014-4-1',8800.00,'党员','钱七','1992-12-30');
mysql> insert into t_worker values(103,1006,'2019-5-5',5500.00,'党员','孙八','1996-9-2');# 查看
mysql> select * from t_worker;
3. 完成以下查询
1)显示所有职工的基本信息。
mysql> select * from t_worker;
2)查询所有职工所属部门的部门号,不显示重复的部门号。
mysql> select distinct department_id from t_worker;
3)求出所有职工的人数。
mysql> select count(*) as '职工总人数' from t_worker;
4)列出最高工和最低工资。
mysql> select -> max(wages) as '最高工资',-> min(wages) as '最低工资'-> from t_worker;
5)列出职工的平均工资和总工资。
mysql> select-> avg(wages) as '平均工资',-> sum(wages) as '总工资'-> from t_worker;
6)创建一个只有职工号、姓名和参加工作时间的新表,名为工作日期表。
mysql> create table work_date_table as -> select worker_id, name,worker_date -> from t_worker;
Query OK, 6 rows affected (0.01 sec)
Records: 6 Duplicates: 0 Warnings: 0
7)显示所有党员的年龄。
mysql> select name,timestampdiff(year,borth_date,curdate()) as '年龄' from t_worker where politics='党员';
8)列出工资在4000-8000之间的所有职工姓名。
mysql> select name from t_worker where wages between 4000 and 8000;
9)列出所有孙姓和李姓的职工姓名。
mysql> select name from t_worker where name like '孙%' or name like '李%';
10)列出所有部门号为102和103且不是党员的职工号、姓名。
mysql> select worker_id,name from t_worker where department_id in(102,103) and polittics!='党员';
11)将职工表t_worker中的职工按出生的先后顺序排序。
mysql> select * from t_worker order by borth_date;
12)显示工资最高的前3名职工的职工号和姓名。
mysql> select worker_id,name from t_worker order by wages desc limit 3;
13)求出各部门党员的人数。
mysql> select department_id,count(*) as '部门人数' from t_worker where politics='.' group by department_id;
14)统计各部门的工资和平均工资并保留2位小数。
mysql> select department_id,sum(wages) as '各部门总资',round(avg(wages),2) as '各部门平均工资' from t_worker group by department_id;
15)列出总人数大于等于3的部门号和总人数。
mysql> select department_id,count(*) as '总人数' from t_worker group by department_iid having count(*) >=3;