重庆博达建设集团股份有限公司网站桂林生活网租房
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的部门号和总人数。
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、显示所有职工的基本信息。
      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;
7、列出1960年以前出生的职工的姓名、参加工作日期。
# datediff()用于计算两个日期之间的天数
 -- datediff函数,返回值是相差的天数,不能定位到小时、分钟和秒
 SELECT datediff(now(),`出生日期` ) as age FROM worker;        
 # TIMESTAMPDIFF函数,有参数设置,可以精确到天(DAY)、小时(HOUR),分钟(MINUTE)和秒(SECOND)
 -- 使用起来比datediff函数更加灵活。对于比较的两个时间,时间小的放在前面,时间大的放在后面。
 SELECT TIMESTAMPDIFF(year,`出生日期`,NOW()) as age FROM worker;
8、列出工资在1000-2000之间的所有职工姓名。
       select `姓名` from worker where `工资` between 3000 and 5000;
        select `姓名`,`工资` from worker where `工资` between 3000 and 5000;
  
 9、列出所有陈姓和李姓的职工姓名。
       select `姓名` from worker where (`姓名` like'陈%') or (`姓名` like'李%');
 10、列出所有部门号为2和3的职工号、姓名、党员否。
select  * from worker where find_in_set('党员',政治面貌);
 select  * from worker where locate('党员',政治面貌);
 # locate() 查找某个字段里面是否有某个某个字符串 是(1)否(0)
 select `职工号`,`姓名`,(locate('党员',政治面貌)) as `是(1)否(0)党员` from worker where `部门号`=102 or `部门号`=103;
1、将职工表worker中的职工按出生的先后顺序排序。
select * FROM worker ORDER BY `出生日期`;
12、显示工资最高的前3名职工的职工号和姓名。
        select `职工号`,`姓名` from worker ORDER BY `工资` desc limit 0,3; 
 13、求出各部门党员的人数。
SELECT `部门号` from worker WHERE `政治面貌`='党员';
 select `部门号`,count(`部门号`) from worker  GROUP BY `部门号`;
 # locate() 查找某个字段里面是否有某个某个字符串 是(1)否(0
 select `部门号`,sum(locate('党员',政治面貌)) 党员数  from worker  GROUP BY `部门号`;
14、统计各部门的工资和平均工资
select `部门号`,sum(工资) 总工资,avg(工资) 平均工资 from worker GROUP BY `部门号`;
15、列出总人数大于4的部门号和总人数。
select `部门号`,count(姓名) 总人数 from worker  GROUP BY `部门号` HAVING count(姓名) >2 ; 
 select `部门号`,count(姓名) 总人数 from worker  GROUP BY `部门号` HAVING count(姓名) >4 ; 
  
