MySQL数据库的单表查询--select命令的使用

在MySQL数据库中select语句用于查询数据表的内容,其中对于用户所有的不同的要求可以做到不同的查询结果。

例如:我们创作如下数据表

//创建一个名为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;
//进行查询
desc worker;

//为所创作的数据表中插入数据
INSERT INTO `worker` (`部门号`, `职工号`, `工作时间`, `工资`, `政治面貌`, `姓名`, `出生日期`)
VALUES (101, 1001, '2015-05-04', 3500.00, '群众', '张三', '1990-07-01');
INSERT INTO `worker` (`部门号`, `职工号`, `工作时间`, `工资`, `政治面貌`, `姓名`, `出生日期`)
VALUES (101, 1002, '2017-02-06', 3200.00, '团员', '李四', '1997-02-08');
INSERT INTO `worker` (`部门号`, `职工号`, `工作时间`, `工资`, `政治面貌`, `姓名`, `出生日期`)
VALUES (102, 1003, '2011-01-04', 8500.00, '党员', '王亮', '1983-06-08');
INSERT INTO `worker` (`部门号`, `职工号`, `工作时间`, `工资`, `政治面貌`, `姓名`, `出生日期`)
VALUES (102, 1004, '2016-10-10', 5500.00, '群众', '赵六', '1994-09-05');
INSERT INTO `worker` (`部门号`, `职工号`, `工作时间`, `工资`, `政治面貌`, `姓名`, `出生日期`)
VALUES (102, 1005, '2014-04-01', 4800.00, '党员', '钱七', '1992-12-30');
INSERT INTO `worker` (`部门号`, `职工号`, `工作时间`, `工资`, `政治面貌`, `姓名`, `出生日期`)
VALUES (102, 1006, '2017-05-05', 4500.00, '党员', '孙八', '1996-09-02');
//进行查询
select * from worker;    # 这就是select语句中最基础的运用,负责查看worker数据表中所有数据

查询结果如下:即可以显示所有员工的基本信息

 

 1、查询所有职工所属部门的部门号,不显示重复的部门号。

select distinct `部门号` from worker;
//distinct关键字可以从查询结果中清除重复行

查询结果如下

 2、求出所有职工的人数。 

select count(*) as `职工人数` from `worker`;
//这将从 worker 表中计算出所有行的数量,并将计算结果作为 职工人数 列返回。 count(*) 用于计算行的数量,并且 as 关键字用于给计算结果设置别名

查询结果如下

 

3、列出最高工和最低工资。

select max(`工资`) as `最高工资`, min(`工资`) as `最低工资` from `worker`;
//这将从 worker 表中选择最高工资和最低工资,并将它们分别作为最高工资和最低工资列返回。在此查询中,max 和 min 聚合函数用于计算工资列中的最大值和最小值。

查询结果如下:

 4、列出职工的平均工资和总工资。 

select avg(`工资`) as `平均工资`, sum(`工资`) as `总工资` from `worker`;
//这将从 worker 表中计算出工资的平均值和总和,并将它们分别作为 平均工资 和 总工资 列返回。在此查询中,avg 和 sum 聚合函数用于计算工资列的平均值和总和。

查询结果如下:

5、 创建一个只有职工号、姓名和参加工作的新表,名为工作日期表。

//创建名为工作日期的新表 
create table `工作日期` (`职工号` int(11) not null, `姓名` int(11) not null, `参加工作` int(11) not null);
//查询表结构
desc `工作日期`;

查询结果如下:

6、 显示所有女职工的年龄。

//首先为worker表中加入性别一栏
alter table `worker` add column `性别` varchar(10);
//然后进行查看
desc worker;

//插入性别一栏后,插入每个职员的性别
 UPDATE `worker` SET `性别` = CASE WHEN `姓名` = '张三' THEN '男' WHEN `姓名` = '李四' THEN '女' WHEN `姓名` = '王亮' THEN '男' WHEN `姓名` = '赵六' THEN '男' WHEN `姓名` = '钱七' THEN '女' WHEN `姓名` = '孙八' THEN '男' END;
//进行查看
select * from worker;

 查看结果如下:

//显示所有女职工的年龄
select timestampdiff(year, `出生日期`, curdate()) as `年龄` from `worker` where `性别` = '女';
//这将返回 worker 表中所有性别为女性员工的年龄,使用 timestampdiff 函数计算当前日期与出生年月之间的年份差值,并使用 curdate() 函数获取当前日期

查询结果如下:

7、 列出所有姓刘的职工的职工号、姓名和出生日期。

//插入一个姓刘的职工信息
insert into `worker` (`部门号`, `职工号`, `工作时间`, `工资`, `政治面貌`, `姓名`, `出生日期`, `性别`) values (103, 1007, '2015-06-06', 5500.00, '党员', '刘九', '1991-03-11', '男');
//进行查看
select * from worker;

查看结果如下:

//此时,查看worker表中的所有姓刘的职员信息
select * from `worker` where `姓名` like '刘%';

 查看信息如下:

8、列出1960年以前出生的职工的姓名、参加工作日期。

 select '姓名', '工作时间'
    -> from `worker`
    -> where year('出生日期') < 1960;
//因为没有1960年以前出生的职工

所以显示如下:

9、 列出工资在1000-2000之间的所有职工姓名。
 

select '姓名'
    -> from `worker`
    -> where '工资' >= 1000 and '工资' <= 2000;
//数据中没有工资在1000到2000之间的职工

所以显示如下:

10、 列出所有陈姓和李姓的职工姓名。

 select `姓名`
    -> from `worker`
    -> where `姓名` like '陈%' or `姓名` like '李%';
//worder表中只有姓李的职员

查询结果如下:

11、 列出所有部门号为2和3的职工号、姓名、党员否。

select `职工号`, `姓名`, `政治面貌` from `worker` where `部门号` in (102, 103);

查询结果如下;

12、将职工表worker中的职工按出生的先后顺序排序。

elect * from `worker` order by 出生日期;

 查询结果如下:

13、显示工资最高的前3名职工的职工号和姓名。

select 职工号, 姓名 from `worker` order by 工资 desc limit 3;

 显示结果如下:

14、求出各部门党员的人数。 

select 部门号,count(*) as 党员人数 from `worker` where 政治面貌='党员' group by 部门号;

 显示结果如下:

15、统计各部门的工资和平均工资 

select 部门号, sum(工资) as 工资总和, avg(工资) as 平均工资 from `worker` group by 部门号;

 显示结果如下:

16、列出总人数大于4的部门号和总人数。

 select 部门号, count(*) as 总人数 from worker group by 部门号 having count(*) > 4;
//因为没有总人数大于4的部门所以

 显示结果如下:

 以上便是几种select语句的使用方法

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值