素材: 表名:worker-- 表中字段均为中文,比如 部门号 工资 职工号 参加工作 等
CREATE TABLE `worker` (
`部门号` int(11) NOT NULL,
`职工号` int(11) NOT NULL,
`工作时间` date NOT NULL,
`工资` float(8,2) NOT NULL,
`政治面貌` varchar(10) NOT NULL DEFAULT '群众',
`姓名` varchar(20) NOT NULL,
`出生日期` date NOT NULL,
PRIMARY KEY (`职工号`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
INSERT INTO `worker` (`部门号`, `职工号`, `工作时间`, `工资`, `政治面貌`, `姓名`, `出生
日期`) VALUES (101, 1001, '2015-5-4', 3500.00, '群众', '张三', '1990-7-1');
INSERT INTO `worker` (`部门号`, `职工号`, `工作时间`, `工资`, `政治面貌`, `姓名`, `出生
日期`) VALUES (101, 1002, '2017-2-6', 3200.00, '团员', '李四', '1997-2-8');
INSERT INTO `worker` (`部门号`, `职工号`, `工作时间`, `工资`, `政治面貌`, `姓名`, `出生
日期`) VALUES (102, 1003, '2011-1-4', 8500.00, '党员', '王亮', '1983-6-8');
INSERT INTO `worker` (`部门号`, `职工号`, `工作时间`, `工资`, `政治面貌`, `姓名`, `出生
日期`) VALUES (102, 1004, '2016-10-10', 5500.00, '群众', '赵六', '1994-9-5');
INSERT INTO `worker` (`部门号`, `职工号`, `工作时间`, `工资`, `政治面貌`, `姓名`, `出生
日期`) VALUES (102, 1005, '2014-4-1', 4800.00, '党员', '钱七', '1992-12-30');
INSERT INTO `worker` (`部门号`, `职工号`, `工作时间`, `工资`, `政治面貌`, `姓名`, `出生
日期`) VALUES (102, 1006, '2017-5-5', 4500.00, '党员', '孙八', '1996-9-2');
练习:
1、显示所有职工的基本信息。
2、查询所有职工所属部门的部门号,不显示重复的部门号。
3、求出所有职工的人数。
4、列出最高工和最低工资。
5、列出职工的平均工资和总工资。
6、创建一个只有职工号、姓名和参加工作的新表,名为工作日期表。
7、显示所有女职工的年龄。
8、列出所有姓刘的职工的职工号、姓名和出生日期。
9、列出1960年以前出生的职工的姓名、参加工作日期。
10、列出工资在1000-2000之间的所有职工姓名。
11、列出所有陈姓和李姓的职工姓名。
12、列出所有部门号为2和3的职工号、姓名、党员否。
13、将职工表worker中的职工按出生的先后顺序排序。
14、显示工资最高的前3名职工的职工号和姓名。
15、求出各部门党员的人数。
16、统计各部门的工资和平均工资
17、列出总人数大于4的部门号和总人数。
mysql> create table worker(
-> dept_id int comment '部门号',
-> worker_no int primary key auto_increment comment '员工编号',
-> hire_date datetime not null comment '入职时间',
-> salary int not null comment '薪资',
-> worker_face varchar(30) not null comment '政治面貌',
-> worker_name varchar(30) not null comment '姓名',
-> worker_age tinyint not null check (worker_age >= 18),
-> brith_date datetime not null comment '出生日期'
-> )ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
Query OK, 0 rows affected, 1 warning (0.03 sec)
这里少添加了一项
mysql> alter table worker add worker_job varchar(30);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
此时,我们就可以查看表的结构,也就是添加数据的方式
mysql> desc worker;
+-------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+----------------+
| dept_id | int | YES | MUL | NULL | |
| worker_no | int | NO | PRI | NULL | auto_increment |
| hire_date | datetime | NO | | NULL | |
| salary | int | NO | | NULL | |
| worker_face | varchar(30) | NO | | NULL | |
| worker_name | varchar(30) | NO | | NULL | |
| worker_age | tinyint | NO | | NULL | |
| brith_date | datetime | NO | | NULL | |
| worker_job | varchar(30) | YES | | NULL | |
+-------------+-------------+------+-----+---------+----------------+
9 rows in set (0.01 sec)
mysql> create table department(
-> dept_id int primary key auto_increment comment '部门编号',
-> dept_name varchar(50) not null comment '部门名称'
-> )auto_increment=1001;
Query OK, 0 rows affected (0.04 sec)
mysql> alter table worker add constraint worker_dept_fk foreign key (dept_id) references department(dept_id);
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> insert into department values(null,'科技部'),(null,'后勤部'),(null,'财务部'),(null,'法务部');
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
添加完成后,我们就可以查看表的结构
mysql> select *from department;
+---------+-----------+
| dept_id | dept_name |
+---------+-----------+
| 1001 | 科技部 |
| 1002 | 后勤部 |
| 1003 | 财务部 |
| 1004 | 法务部 |
+---------+-----------+
4 rows in set (0.00 sec)
这样,就方便我们在表中添加数据。
mysql> insert into worker values(1001,null,'2008-08-15',5000,'党员','樊富田','20','1991-01-11','工程师');
Query OK, 1 row affected (0.01 sec)
mysql> insert into worker values(1001,null,'2008-06-14',6000,'党员','哈思瑗','19','1992-03-15','工程师');
Query OK, 1 row affected (0.01 sec)
mysql> insert into worker values(1001,null,'2009-05-24',5200,'群众','李言','21','1991-02-15','工程师');
Query OK, 1 row affected (0.01 sec)
mysql> insert into worker values(1002,null,'2008-05-14',4200,'群众','张三','21','1992-07-15','保洁');
Query OK, 1 row affected (0.01 sec)
mysql> insert into worker values(1002,null,'2010-05-14',4200,'群众','杨幂','31','1982-07-15','保洁');
Query OK, 1 row affected (0.01 sec)
mysql> insert into worker values(1002,null,'2011-09-14',4000,'群众','张韶涵','25','1987-04-25','保洁');
Query OK, 1 row affected (0.01 sec)
mysql> insert into worker values(1002,null,'2013-01-14',5000,'群众','杨洋','26','1986-10-25','保安');
Query OK, 1 row affected (0.00 sec)
mysql> insert into worker values(1003,null,'2014-02-18',9000,'党员','赵丽颖','26','1989-11-25','秘书长');
Query OK, 1 row affected (0.01 sec)
mysql> insert into worker values(1003,null,'2014-05-17',8000,'群众','刘诗诗','27','1990-12-23','副秘书长');
Query OK, 1 row affected (0.01 sec)
mysql> insert into worker values(1003,null,'2015-04-19',8500,'群众','迪丽热巴','30','1992-04-13','司机');
Query OK, 1 row affected (0.00 sec)
mysql> insert into worker values(1003,null,'2016-05-20',8200,'群众','古力娜扎','31','1982-04-13','小蜜');
Query OK, 1 row affected (0.01 sec)
mysql> insert into worker values(1004,null,'2012-06-10',11200,'群众','肖战','30','1992-07-17','法务助理');
Query OK, 1 row affected (0.01 sec)
mysql> insert into worker values(1004,null,'2013-04-10',10200,'群众','郑爽','32','1994-04-14','法务专员');
Query OK, 1 row affected (0.00 sec)
mysql> insert into worker values(1004,null,'2013-09-19',10500,'群众','岳云鹏','29','1987-05-14','法务主管');
Query OK, 1 row affected (0.01 sec)
mysql> insert into worker values(1004,null,'2014-04-19',10000,'党员','郭德纲','45','1977-07-14','法务总监');
Query OK, 1 row affected (0.01 sec)
这时候,我们就可以查看worker表中的数据了:
mysql> select *from worker;
+---------+-----------+---------------------+--------+-------------+-------------+------------+---------------------+------------+
| dept_id | worker_no | hire_date | salary | worker_face | worker_name | worker_age | brith_date | worker_job |
+---------+-----------+---------------------+--------+-------------+-------------+------------+---------------------+------------+
| 1001 | 1 | 2008-08-15 00:00:00 | 5000 | 党员 | 樊富田 | 20 | 1991-01-11 00:00:00 | 工程师 |
| 1001 | 2 | 2008-06-14 00:00:00 | 6000 | 党员 | 哈思瑗 | 19 | 1992-03-15 00:00:00 | 工程师 |
| 1001 | 3 | 2009-05-24 00:00:00 | 5200 | 群众 | 李言 | 21 | 1991-02-15 00:00:00 | 工程师 |
| 1002 | 4 | 2008-05-14 00:00:00 | 4200 | 群众 | 张三 | 21 | 1992-07-15 00:00:00 | 保洁 |
| 1002 | 5 | 2010-05-14 00:00:00 | 4200 | 群众 | 杨幂 | 31 | 1982-07-15 00:00:00 | 保洁 |
| 1002 | 6 | 2011-09-14 00:00:00 | 4000 | 群众 | 张韶涵 | 25 | 1987-04-25 00:00:00 | 保洁 |
| 1002 | 7 | 2013-01-14 00:00:00 | 5000 | 群众 | 杨洋 | 26 | 1986-10-25 00:00:00 | 保安 |
| 1003 | 8 | 2014-02-18 00:00:00 | 9000 | 党员 | 赵丽颖 | 26 | 1989-11-25 00:00:00 | 秘书长 |
| 1003 | 9 | 2014-05-17 00:00:00 | 8000 | 群众 | 刘诗诗 | 27 | 1990-12-23 00:00:00 | 副秘书长 |
| 1003 | 10 | 2015-04-19 00:00:00 | 8500 | 群众 | 迪丽热巴 | 30 | 1992-04-13 00:00:00 | 司机 |
| 1003 | 11 | 2016-05-20 00:00:00 | 8200 | 群众 | 古力娜扎 | 31 | 1982-04-13 00:00:00 | 小蜜 |
| 1004 | 12 | 2012-06-10 00:00:00 | 11200 | 群众 | 肖战 | 30 | 1992-07-17 00:00:00 | 法务助理 |
| 1004 | 13 | 2013-04-10 00:00:00 | 10200 | 群众 | 郑爽 | 32 | 1994-04-14 00:00:00 | 法务专员 |
| 1004 | 14 | 2013-09-19 00:00:00 | 10500 | 群众 | 岳云鹏 | 29 | 1987-05-14 00:00:00 | 法务主管 |
| 1004 | 15 | 2014-04-19 00:00:00 | 10000 | 党员 | 郭德纲 | 45 | 1977-07-14 00:00:00 | 法务总监 |
+---------+-----------+---------------------+--------+-------------+-------------+------------+---------------------+------------+
15 rows in set (0.00 sec)
mysql> select *from worker;
+---------+-----------+---------------------+--------+-------------+-------------+------------+---------------------+------------+
| dept_id | worker_no | hire_date | salary | worker_face | worker_name | worker_age | brith_date | worker_job |
+---------+-----------+---------------------+--------+-------------+-------------+------------+---------------------+------------+
| 1001 | 1 | 2008-08-15 00:00:00 | 5000 | 党员 | 樊富田 | 20 | 1991-01-11 00:00:00 | 工程师 |
| 1001 | 2 | 2008-06-14 00:00:00 | 6000 | 党员 | 哈思瑗 | 19 | 1992-03-15 00:00:00 | 工程师 |
| 1001 | 3 | 2009-05-24 00:00:00 | 5200 | 群众 | 李言 | 21 | 1991-02-15 00:00:00 | 工程师 |
| 1002 | 4 | 2008-05-14 00:00:00 | 4200 | 群众 | 张三 | 21 | 1992-07-15 00:00:00 | 保洁 |
| 1002 | 5 | 2010-05-14 00:00:00 | 4200 | 群众 | 杨幂 | 31 | 1982-07-15 00:00:00 | 保洁 |
| 1002 | 6 | 2011-09-14 00:00:00 | 4000 | 群众 | 张韶涵 | 25 | 1987-04-25 00:00:00 | 保洁 |
| 1002 | 7 | 2013-01-14 00:00:00 | 5000 | 群众 | 杨洋 | 26 | 1986-10-25 00:00:00 | 保安 |
| 1003 | 8 | 2014-02-18 00:00:00 | 9000 | 党员 | 赵丽颖 | 26 | 1989-11-25 00:00:00 | 秘书长 |
| 1003 | 9 | 2014-05-17 00:00:00 | 8000 | 群众 | 刘诗诗 | 27 | 1990-12-23 00:00:00 | 副秘书长 |
| 1003 | 10 | 2015-04-19 00:00:00 | 8500 | 群众 | 迪丽热巴 | 30 | 1992-04-13 00:00:00 | 司机 |
| 1003 | 11 | 2016-05-20 00:00:00 | 8200 | 群众 | 古力娜扎 | 31 | 1982-04-13 00:00:00 | 小蜜 |
| 1004 | 12 | 2012-06-10 00:00:00 | 11200 | 群众 | 肖战 | 30 | 1992-07-17 00:00:00 | 法务助理 |
| 1004 | 13 | 2013-04-10 00:00:00 | 10200 | 群众 | 郑爽 | 32 | 1994-04-14 00:00:00 | 法务专员 |
| 1004 | 14 | 2013-09-19 00:00:00 | 10500 | 群众 | 岳云鹏 | 29 | 1987-05-14 00:00:00 | 法务主管 |
| 1004 | 15 | 2014-04-19 00:00:00 | 10000 | 党员 | 郭德纲 | 45 | 1977-07-14 00:00:00 | 法务总监 |
+---------+-----------+---------------------+--------+-------------+-------------+------------+---------------------+------------+
15 rows in set (0.00 sec)
mysql> select dept_id,avg(salary),worker_name from worker group by dept_id,worker_name;
+---------+-------------+-------------+
| dept_id | avg(salary) | worker_name |
+---------+-------------+-------------+
| 1001 | 5000.0000 | 樊富田 |
| 1001 | 6000.0000 | 哈思瑗 |
| 1001 | 5200.0000 | 李言 |
| 1002 | 4200.0000 | 张三 |
| 1002 | 4200.0000 | 杨幂 |
| 1002 | 4000.0000 | 张韶涵 |
| 1002 | 5000.0000 | 杨洋 |
| 1003 | 9000.0000 | 赵丽颖 |
| 1003 | 8000.0000 | 刘诗诗 |
| 1003 | 8500.0000 | 迪丽热巴 |
| 1003 | 8200.0000 | 古力娜扎 |
| 1004 | 11200.0000 | 肖战 |
| 1004 | 10200.0000 | 郑爽 |
| 1004 | 10500.0000 | 岳云鹏 |
| 1004 | 10000.0000 | 郭德纲 |
+---------+-------------+-------------+
15 rows in set (0.00 sec)
mysql> select dept_id,count(worker_name) from worker group by dept_id;
+---------+--------------------+
| dept_id | count(worker_name) |
+---------+--------------------+
| 1001 | 3 |
| 1002 | 4 |
| 1003 | 4 |
| 1004 | 4 |
+---------+--------------------+
4 rows in set (0.00 sec)
mysql> select dept_id,max(salary) from worker group by dept_id;
+---------+-------------+
| dept_id | max(salary) |
+---------+-------------+
| 1001 | 6000 |
| 1002 | 5000 |
| 1003 | 9000 |
| 1004 | 11200 |
+---------+-------------+
4 rows in set (0.00 sec)
mysql> select dept_id,main(salary) from worker group by dept_id;
ERROR 1305 (42000): FUNCTION mydb.main does not exist
mysql> select dept_id,min(salary) from worker group by dept_id;
+---------+-------------+
| dept_id | min(salary) |
+---------+-------------+
| 1001 | 5000 |
| 1002 | 4000 |
| 1003 | 8000 |
| 1004 | 10000 |
+---------+-------------+
4 rows in set (0.00 sec)
mysql> select dept_id,avg(salary*12) from worker group by dept_id;
+---------+----------------+
| dept_id | avg(salary*12) |
+---------+----------------+
| 1001 | 64800.0000 |
| 1002 | 52200.0000 |
| 1003 | 101100.0000 |
| 1004 | 125700.0000 |
+---------+----------------+
4 rows in set (0.00 sec)
mysql> select dept_id,sum(salary) from worker group by dept_id;
+---------+-------------+
| dept_id | sum(salary) |
+---------+-------------+
| 1001 | 16200 |
| 1002 | 17400 |
| 1003 | 33700 |
| 1004 | 41900 |
+---------+-------------+
4 rows in set (0.00 sec)
mysql> create table employee(
-> emp_no int primary key auto_increment comment '员工编号',
-> emp_name varchar(30) not null comment '员工姓名',
-> emp_job varchar(30) not null comment '参加工作'
-> );
Query OK, 0 rows affected (0.04 sec)
mysql> select worker_no,worker_name,brith_date from worker where worker_name like'张%';
+-----------+-------------+---------------------+
| worker_no | worker_name | brith_date |
+-----------+-------------+---------------------+
| 4 | 张三 | 1992-07-15 00:00:00 |
| 6 | 张韶涵 | 1987-04-25 00:00:00 |
+-----------+-------------+---------------------+
2 rows in set (0.00 sec)
mysql> select worker_name,worker_no,hire_date from worker where brith_date > '1987-04-25';
+-------------+-----------+---------------------+
| worker_name | worker_no | hire_date |
+-------------+-----------+---------------------+
| 樊富田 | 1 | 2008-08-15 00:00:00 |
| 哈思瑗 | 2 | 2008-06-14 00:00:00 |
| 李言 | 3 | 2009-05-24 00:00:00 |
| 张三 | 4 | 2008-05-14 00:00:00 |
| 赵丽颖 | 8 | 2014-02-18 00:00:00 |
| 刘诗诗 | 9 | 2014-05-17 00:00:00 |
| 迪丽热巴 | 10 | 2015-04-19 00:00:00 |
| 肖战 | 12 | 2012-06-10 00:00:00 |
| 郑爽 | 13 | 2013-04-10 00:00:00 |
| 岳云鹏 | 14 | 2013-09-19 00:00:00 |
+-------------+-----------+---------------------+
10 rows in set (0.00 sec)
mysql> select worker_name from worker where salary > 4000 and salary < 8000;
+-------------+
| worker_name |
+-------------+
| 樊富田 |
| 哈思瑗 |
| 李言 |
| 张三 |
| 杨幂 |
| 杨洋 |
+-------------+
6 rows in set (0.00 sec)
mysql> select worker_name from worker where worker_name like'李%' or worker_name like'张%';
+-------------+
| worker_name |
+-------------+
| 李言 |
| 张三 |
| 张韶涵 |
+-------------+
3 rows in set (0.00 sec)
mysql> select dept_id,worker_name,worker_face from worker where dept_id in (1002,1003);
+---------+-------------+-------------+
| dept_id | worker_name | worker_face |
+---------+-------------+-------------+
| 1002 | 张三 | 群众 |
| 1002 | 杨幂 | 群众 |
| 1002 | 张韶涵 | 群众 |
| 1002 | 杨洋 | 群众 |
| 1003 | 赵丽颖 | 党员 |
| 1003 | 刘诗诗 | 群众 |
| 1003 | 迪丽热巴 | 群众 |
| 1003 | 古力娜扎 | 群众 |
+---------+-------------+-------------+
8 rows in set (0.00 sec)
mysql> select worker_name,hire_date,salary from worker order by hire_date;
+-------------+---------------------+--------+
| worker_name | hire_date | salary |
+-------------+---------------------+--------+
| 张三 | 2008-05-14 00:00:00 | 4200 |
| 哈思瑗 | 2008-06-14 00:00:00 | 6000 |
| 樊富田 | 2008-08-15 00:00:00 | 5000 |
| 李言 | 2009-05-24 00:00:00 | 5200 |
| 杨幂 | 2010-05-14 00:00:00 | 4200 |
| 张韶涵 | 2011-09-14 00:00:00 | 4000 |
| 肖战 | 2012-06-10 00:00:00 | 11200 |
| 杨洋 | 2013-01-14 00:00:00 | 5000 |
| 郑爽 | 2013-04-10 00:00:00 | 10200 |
| 岳云鹏 | 2013-09-19 00:00:00 | 10500 |
| 赵丽颖 | 2014-02-18 00:00:00 | 9000 |
| 郭德纲 | 2014-04-19 00:00:00 | 10000 |
| 刘诗诗 | 2014-05-17 00:00:00 | 8000 |
| 迪丽热巴 | 2015-04-19 00:00:00 | 8500 |
| 古力娜扎 | 2016-05-20 00:00:00 | 8200 |
+-------------+---------------------+--------+
15 rows in set (0.00 sec)
这里的order默认是按升序排序,如果想要降序,在末尾加desc即可。