MySQL笔记

本文详细介绍了如何使用SQL语句进行薪资级别与员工年龄的分析,包括条件判断、排序、分页、聚合函数及分组统计的应用。通过具体案例展示了不同薪资范围的员工分类、年龄最大与最小的员工查询、各部门薪资比较等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 case()

(姓名,目前薪资,薪资评价)。 (01000(含1000):实习生,10003000(含3000):试用期) 30005000(含5000):普通技工,50008000(含8000):管理层) 8000以上的:公司高层)

select 姓名,目前薪资,
case
when 目前薪资<=1000 then ‘实习期’
when 目前薪资>1000 and 目前薪资<=3000 then ‘试用期’
when 目前薪资>3000 and 目前薪资<=5000 then ‘普通技工’
when 目前薪资>5000 and 目前薪资<=8000 then ‘管理层’
else
‘公司高层’
end 薪资评价
from 员工

2 order by

从选课表中查询按课程号的升序,同一课程按成绩降序排列

select * from 选课 order by 课程号 asc,成绩 desc

[asc|desc]:asc代表升序,desc代表降序

  • order by 字段 其后的[asc|desc] 可省,如省略,则代表asc (默认升序)
  • order by 可以针对多个字段进行排序,如:order by 字段1 desc,字段2 asc
    但优先第一个字段排序
  • order by 后可以使用字段的索引来进行排序(索引是从1开始)
    order by 子句中可以使用 “别名”

对于Northwind数据库中的员工表进行查询,要求如下:

  • 显示字段:姓名,出生日期,年龄
  • 按年龄进行降序排列

select 姓名,出生日期,year(now())-year(出生日期) as 年龄 from 员工 order by 年龄 desc
等价于:
select 姓名,出生日期,year(now())-year(出生日期) as 年龄 from 员工 order by 出生日期 asc

在上面这个查询的基础上找出年龄最大的员工是谁?

select 姓名,出生日期,year(now())-year(出生日期) as 年龄 from 员工 order by 出生日期 asc limit 1

在上面这个查询的基础上找出年龄最小的员工是谁?

select 姓名,出生日期,year(now())-year(出生日期) as 年龄 from 员工 order by 出生日期 desc limit 1

查找出订货明细表中销售金额最大的那笔订单.

select 订单号码,单价数量(1-折扣) as 总金额 from 订货明细 order by 总金额 desc limit 1

3 limit()的用法

SELECT * FROM table LIMIT skip,pagesize
select 员工编号,姓名 from 员工 limit 20,10

page pagesize
select 员工编号,姓名 from 员工 limit (page-1)*pagesize,pagesize

取员工表第一页的数据(每页5条记录)
page=1,pagesize=5
select 员工编号,姓名 from 员工 limit 0,5

取员工表第二页的数据(每页5条记录)
select 员工编号,姓名 from 员工 limit 5,5

取员工表第三页的数据(每页5条记录)
select 员工编号,姓名 from 员工 limit 9,5

4 count()的用法

从学生表中查询各个专业的人数
select 专业,count(*) as 人数 from 学生 group by 专业

从学生表中统计每个专业男女生人数

select 专业,性别,count(*) as 人数 from 学生 group by 专业,性别

从学生表中查询超过2个人专业。

select 专业,count(*) as 人数 from 学生 group by 专业 having 人数>2

统计哪个专业没有女生。
select distinct 专业 from 学生 where 专业 not in ( select 专业 from 学生 group by 专业,性别 having 性别=‘女’)

select distinct 专业 from 学生 where 专业 not in (select distinct 专业 from 学生 where 性别=‘女’)

6 聚合函数

COUNT()函数
SUM()函数
AVG()函数
MAX()函数
MIN()函数

我想知道公司有多少个员工?
select count(*) from 员工
等价于:
select count(员工编号) from 员工

统计员工表中发放员工工资总和
select sum(目前薪资) as 工资总额 from 员工

统计本公司员工平均工资是多少。
select avg(目前薪资) as 平均工资 from 员工

统计本公司最高薪资是多少?最低薪资是多少
select max(目前薪资) as 最高工资 from 员工
select min(目前薪资) as 最低工资 from 员工

统计本公司的基本信息(人数,月工资发放总额,员工平均工资,月最高工资,月最低工资)
select count(*) as 人数,sum(目前薪资) as 工资总额,avg(目前薪资) as 平均工资,max(目前薪资) as 最高工资,min(目前薪资) as 最低工资 from 员工

我想知道本公司月薪最高的员工是哪位?
select 员工姓名,部门,目前薪资 from 员工 where 目前薪资 = max(目前薪资)

我想知道本公司月薪最低的员工是哪位?
select 姓名,部门,目前薪资 from 员工 where 目前薪资=(select min(目前薪资) as 最低工资 from 员工)

本公司年龄最大的员工是哪位?

select 姓名,部门,出生日期 from 员工 where 出生日期=(select min(出生日期) from 员工)

另一种实现方式:
select 姓名,部门,year(now())-year(出生日期) as 年龄 from 员工 where
year(now())-year(出生日期)=(select max(year(now())-year(出生日期) ) from 员工)

查询出生产制造部员工的最高工资
select max(目前薪资) from 员工 where 部门=‘生产制造部’

查询出比生产造部员工最高工资还要高的其他部门员工工资情况
select 姓名,部门,目前薪资 where 目前薪资>(生产制造部员工的最高工资)
select 姓名,部门,目前薪资 from 员工 where 目前薪资>(select max(目前薪资) from 员工 where 部门=‘生产制造部’) and 部门!=‘生产制造部’

查询比生产制造部平均工资还要高的其他部门员工的工资情况
select 姓名,部门,目前薪资 from 员工 where 目前薪资>(生产制造部员工的平均工资) and
部门!=‘生产制造部’

生产制造部员工的平均工资:select avg(目前薪资) from 员工 where 部门=‘生产制造部’

select 姓名,部门,目前薪资 from 员工 where 目前薪资>(select avg(目前薪资) from 员工 where 部门=‘生产制造部’) and
部门!=‘生产制造部’

7 group by

统计出生产制造部中女性员工的人数
select 部门,性别,count(*) as 人数 from 员工 where 部门=‘生产制造部’ and 性别=-1

统计出生产制造部中员工的人数(另一种写法)
select 部门,
case 性别
when 0 then ‘男’
when -1 then ‘女’
end as sex ,count(*) as 人数 from 员工 group by 部门,性别 having 部门=‘生产制造部’ and 性别=-1

select 部门,
case 性别
when 0 then ‘男’
when -1 then ‘女’
end as sex ,count(*) as 人数 from 员工 group by 部门,性别 having 部门=‘生产制造部’ and sex=‘女’

更复杂的示例:
select 部门,
case 性别
when 0 then ‘男’
when -1 then ‘女’
end as sex ,婚姻状况, count(*) as 人数 from 员工 group by 部门,性别,婚姻状况 having 部门=‘生产制造部’ and sex=‘女’ and 婚姻状况=-1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值