目录
一,建立表结构
1 建立表
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;
二,插入数据
2 插入数据
三,实现要求
3 要求示例
3.1、显示所有职工的基本信息。
select *from worker;
3.2、查询所有职工所属部门的部门号,不显示重复的部门号。
# 使用select查询以部门号分组,将所有名字根据部门号字段全部展示出来。
select `部门号`,group_concat(`姓名`) from worker group by `部门号`;
3.3、求出所有职工的人数。
#使用count对姓名进行计数,从而达到对表内的数据进行计数,进而得出员工人数(as起到起别名作用)
select count(`姓名`) as '职工人数'from worker;
3.4、列出最高工和最低工资。
#使用聚合函数对select查出的语句进行处理,as起到起别名的效果,用max,min取出最高与最低工资。
select max(`工资`) as '最高工资',min(`工资`) as '最低工资'from worker;
3.5、列出职工的平均工资和总工资。
使用聚合函数对select查出的语句进行处理,求出他的总工资和平均工资。
#使用聚合函数对select查出的语句进行处理,求出他的总工资和平均工资。
select avg(`工资`) as '平均工资',sum(`工资`) as '总工资' from worker;
3.6、创建一个只有职工号、姓名和参加工作的新表,名为工作日期表。
创建一个新表,新表的数据来自于select从旧表中查处的数据。
#创建一个新表,新表的数据来自于select从旧表中查处的数据
create table `工作日期表` select `职工号`,`姓名`,`工作时间` from worker;
3.7、列出所有姓刘的职工的职工号、姓名和出生日期。
#对题目进行操作得出该表中没有刘姓员工,所以该结果为空。
select `职工号`,`姓名`,`出生日期` from worker where `姓名` like '刘%';
3.8、列出1960年以前出生的职工的姓名、参加工作日期。
#先查出字段结果,在用where进行判断,拿出条件相符的结果
select `姓名`,`工作时间` as '参加工作时间' from worker where '出生日期' < '1960-1-1';
3.9、列出工资在3500-4800之间的所有职工姓名。
在该表中应该拿出工资在3500-4800之间的员工姓名
select `姓名` from worker where `工资` >= 3500 and `工资` <= 4800;
3.10、列出所有王姓和李姓的职工姓名。
对题目进行分析,和该表比较应该拿出所有李姓和王姓的员工,并使用like进行模糊查询,如果查询名字中包含王的话则用(%王%)
select `姓名` from worker where `姓名` like '李%' or `姓名` like '王%';
3.11、列出所有部门号为2和3的职工号、姓名、党员否。
和上述查询方法一样,在where后用条件判断。
select `姓名`,`职工号`,`政治面貌` from worker where( `部门号` = 103 or `部门号` = 102) and `政治面貌` = '党员';
3.12、将职工表worker中的职工按出生的先后顺序排序。
select `职工号`, `姓名` from worker order by `出生日期` desc;
3.13、显示工资最高的前3名职工的职工号和姓名。
该语句用上了 order by + desc 进行了排序,并且最后在limit后将数据分成了两部分,从0开始,每次取三个数据。
select `职工号`, `姓名` from worker order by `工资` desc limit 0 ,3;
3.14、求出各部门党员的人数。
该语句用count(*)对政治面貌 为党员的进行了一个计数,求出党员人数,和所在部门号
select `部门号` ,count(*) from worker where `政治面貌`='党员'group by `部门号` having count(*)>1;
3.15、统计各部门的工资和平均工资
用聚合函数对数据进行处理,并展现出来,并且用求和和取平均值将需要的结果展现出来。
select sum(`工资`),avg(`工资`) from worker group by `部门号`;
3.16、列出总人数大于4的部门号和总人数。
用count对姓名进行计数,用来统计人数,并且以部门号进行分组,在此之前先求出来满足人数大于4人的条件。
select `部门号` as '部门' ,count(`姓名`) as '人数' from worker group by `部门号` havingg count(`姓名`) >= 4 ;
四,实验总结
4 总结
- 当使用SELECT语句时,可以使用多个关键字和子句来实现不同的功能。以下是SELECT语句的常见用法总结:
- 选择列: 使用SELECT子句后跟要检索的列名,可以选择一列或多列。例如: SELECT 列1, 列2 FROM 表名;
- 检索所有列: 使用通配符 * 可以选择表中的所有列。例如: SELECT * FROM 表名;
- 指定条件: 使用WHERE子句来添加条件,筛选符合条件的记录。例如: SELECT 列1, 列2 FROM 表名 WHERE 条件;
- 排序数据: 使用ORDER BY子句按照指定的列对结果进行排序,默认是升序。可以使用DESC关键字进行降序排序。例如: SELECT 列1, 列2 FROM 表名 ORDER BY 列1 DESC;
- 消除重复数据: 使用DISTINCT关键字可以去除结果中的重复记录。例如: SELECT DISTINCT 列 FROM 表名;
- 计算列: 使用计算表达式可以在查询的结果中计算新的列。例如: SELECT 列1, 列2, 列1 + 列2 AS 新列 FROM 表名;
- 使用聚合函数: 使用聚合函数如SUM、AVG、COUNT等对一列或多列进行计算。例如: SELECT SUM(列1) FROM 表名;
- 连接表: 使用JOIN子句可以将多个表连接起来,并根据指定的条件进行匹配。例如: SELECT 列1, 列2 FROM 表1 JOIN 表2 ON 表1.列 = 表2.列;
- 分组数据: 使用GROUP BY子句可以对结果进行分组,并对每个组应用聚合函数。例如: SELECT 列1, SUM(列2) FROM 表名 GROUP BY 列1;
- 过滤分组: 使用HAVING子句对分组的结果进行条件过滤,类似于WHERE子句。例如: SELECT 列1, SUM(列2) FROM 表名 GROUP BY 列1 HAVING SUM(列2) > 100;
- 子查询: SELECT语句可以嵌套在另一个SELECT语句中,作为子查询使用。例如: SELECT 列1, (SELECT 列2 FROM 表2 WHERE 条件) FROM 表1;
- 这些是SELECT语句的常见用法,可以根据具体需求进行灵活组合和扩展。