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的部门号和总人数。
1、显示所有职工的基本信息:
select * from worker;
2、查询所有职工所属部门的部门号,不显示重复的部门号:
select distinct ` 部门号` from worker;
3、求出所有职工的人数:
select count ( ` 姓名` ) from worker;
4、列出最高和最低工资:
select ` 工资` from worker order by ` 工资` desc limit 0 , 1 ;
select ` 工资` from worker order by ` 工资` asc limit 0 , 1 ;
5、列出职工的平均工资和总工资
select avg ( ` 工资` ) from worker;
select sum ( ` 工资` ) from worker;
select avg ( ` 工资` ) 平均工资, sum ( ` 工资` ) 总工资 from worker;
6、创建一个只有职工号、姓名和参加工作的新表,名为工作日期表:
create table ` 工作日期` (
` 职工号` int ( 11 ) NOT NULL ,
` 姓名` varchar ( 20 ) NOT NULL ,
` 工作时间` date NOT NULL ,
PRIMARY KEY ( ` 职工号` )
) ENGINE = InnoDB DEFAULT CHARSET = utf8 ROW_FORMAT= DYNAMIC;
9、列出1960年以前出生的职工的姓名、参加工作日期:
SELECT datediff( now ( ) , ` 出生日期` ) as age FROM worker;
SELECT TIMESTAMPDIFF( year , ` 出生日期` , NOW ( ) ) as age FROM worker;
10、列出工资在1000-2000之间的所有职工姓名:
select ` 姓名` from worker where ` 工资` between 3000 and 5000 ;
select ` 姓名` , ` 工资` from worker where ` 工资` between 3000 and 5000 ;
11、列出所有陈姓和李姓的职工姓名:
select ` 姓名` from worker where ( ` 姓名` like '陈%' ) or ( ` 姓名` like '李%' ) ;
12、列出所有部门号为2和3的职工号、姓名、党员否:
select * from worker where find_in_set( '党员' , 政治面貌) ;
select * from worker where locate( '党员' , 政治面貌) ;
select ` 职工号` , ` 姓名` , ( locate( '党员' , 政治面貌) ) as ` 是(1)否(0)党员` from worker where ` 部门号` = 102 or ` 部门号` = 103 ;
13、将职工表worker中的职工按出生的先后顺序排序:
select * FROM worker ORDER BY ` 出生日期` ;
14、显示工资最高的前3名职工的职工号和姓名
select ` 职工号` , ` 姓名` from worker ORDER BY ` 工资` desc limit 0 , 3 ;
15、求出各部门党员的人数:
SELECT ` 部门号` from worker WHERE ` 政治面貌` = '党员' ;
select ` 部门号` , count ( ` 部门号` ) from worker GROUP BY ` 部门号` ;
select ` 部门号` , sum ( locate( '党员' , 政治面貌) ) 党员数 from worker GROUP BY ` 部门号` ;
16、统计各部门的工资和平均工资:
select ` 部门号` , sum ( 工资) 总工资, avg ( 工资) 平均工资 from worker GROUP BY ` 部门号` ;
17、列出总人数大于4的部门号和总人数:
select ` 部门号` , count ( 姓名) 总人数 from worker GROUP BY ` 部门号` HAVING count ( 姓名) > 2 ;
select ` 部门号` , count ( 姓名) 总人数 from worker GROUP BY ` 部门号` HAVING count ( 姓名) > 4 ;