Mysql基础(五)

单表查询补充

1. 包含 in 的用法
查询员工表中工资是 1100,1300,2950 的员工姓名和工资
Select 姓名列,工资列 from 员工表 where 工资 = 1100 or 工资= 1300 or 工资 = 2950; ---- 老套路

Select 姓名列,工资列 from 员工表 where 工资 in (1100, 1300,2950);

2. 范围值 between … and…的用法(between A and B 在 A 到 B 之间包含 A 和 B)
查询员工表中工资在 1000 到 3000 的员工姓名和工资,包含 1000和 3000

Select 姓名列,工资列 from 员工表 where 工资 >= 1000 and 工资 <= 3000;

Select 姓名列,工资列 from 员工表 where 工资 between 1000and 3000;

3. sql 语句中 null 的用法

(1) 在一般情况下 where 条件语句中如果要判断是否为空,不能用=或!= 需要用 is 或 is not

查询员工表中津贴为空的员工工号和姓名

Select 工号列,姓名列 from 员工表 where 津贴 is null;

(2)在一般情况下 where 条件语句以外的地方,例如设置成 null,不能用 is 需要用=
把指定员工的津贴清空

Update 员工表 set 津贴 = null where 姓名列 = XX;

4. 聚合函数
求最大值 max() 求最小值 min() 求平均值 avg() 求和 sum()统计计数 count()

四舍五入 round(m,n) —> m 是需要处理的数据,n 是保留多少位小数

截取字符串
substr(需要处理的字符串,m,n) —>从需要处理的字符串中的第 m 个开始截取 n 个

Left(需要处理的字符串,m) —>从左开始截取显示 m 个

Right(需要处理的字符串,m) —>从右开始截取显示 m 个

去重关键字 distinct 对一列起效

查询员工表中最高工资是多少 — 只是返回的一个值
Select max(工资列) from 员工表;

查询员工表中最低工资是多少 — 只是返回的一个值
Select min(工资列) from 员工表;

查询员工表中的整体平均工资是多少
Select avg(工资列) from 员工表;

查询员工表中的整体平均工资四舍五入保留两位小数
Select round(avg(工资列), 2) from 员工表;

查询员工表中一个月的工资总和是多少
Select sum(工资列) from 员工表;

查询员工表中一共有多少员工
Select count(*) from 员工表;

注意:count()计数函数不会统计 null 的数据行.

查询员工表中分别有哪些年份入职了员工,显示年份即可
Select distinct substr(入职日期列, 1 ,4) from 员工表;

分组查询:group by
Group 意思是组,分组
By 通过…
Group by 通过…分组

当题目中出现每个,各个,不同的此类字眼时,几乎都会用到分组函数.

查询每个部门的平均工资
Select avg(工资列),部门列 from 员工表 group by 部门列;

分组后的筛选 having
查询每个部门的平均工资,结果显示平均工资高于 2000 的部门和平均工资
Select avg(工资列),部门列 from 员工表 group by 部门列 having avg(工资列) > 2000;

Where 和 having 的区别
Where 能够对分组前的数据进行筛选
Having 是对 group by 分组后的数据进行筛选
Having 后面可以跟列名也可以跟函数名
Where 不能对分组后的数据进行筛选
Where 后面不能跟函数名

对查询结果进行排序 order by
Order 有顺序和排序的意思
By 是通过什么…
Order by 就是通过…排序

查询员工姓名,按照工资升序排序
Select 姓名列,工资列 from 员工表 order by 工资列 asc;

查询员工姓名,按照工资降序排序
Select 姓名列,工资列 from 员工表 order by 工资列 desc;

Order by 后的截取显示 limit

查询员工工资的前三位,不考虑并列.
Select 姓名列,工资列 from 员工表 order by 工资列 desc limit 3;

模糊匹配查询 like
第一个匹配占位符%,匹配任意个任意字符,也可以是 0 个

查询员工表中名字包含 A 的员工姓名
Select 姓名列 from 员工表 where 姓名列 like ‘%A%’;

查询员工表中名字是 X 开头的员工姓名
Select 姓名列 from 员工表 where 姓名列 like ‘X%’;

查询员工表中名字是 L 结尾的员工姓名
Select 姓名列 from 员工表 where 姓名列 like ‘%L’;

第二个匹配占位符_,匹配一个任意字符

查询员工表中名字是 A 开头且五个字符的员工姓名
Select 姓名列 from 员工表 where 姓名列 like ‘A____’;

查询员工表中名字刚好是三个字符的员工姓名
Select 姓名列 from 员工表 where 姓名列 like ‘___’;

查询员工表中名字刚好 7 个字符且是 R 结尾的员工姓名
Select 姓名列 from 员工表 where 姓名列 like ‘______R’;

查询员工表中名字是 5 个字符的且名字的第三个是 H 的员工姓名
Select 姓名列 from 员工表 where 姓名列 like ‘H’;

多字段排序
Order by 列名 1, 列名 2
一般在 sql 题上会说的比较清楚比如:
查询员工表中的员工姓名,已工资降序排序,如果工资相同,以年龄升序排序.
Select 姓名列 from 员工表 order by 工资列 desc, 年龄列;

多字段分组
Group by 列名 1, 列名 2
一般在 sql 题上也会很明显:
查询不同部门不同岗位的员工平均工资
Select avg(工资列), 岗位列, 部门列 from 员工表 group by 部门列, 岗位列;

子查询
子查询就是查询里面嵌套查询

第一种用法,将子查询语句当成是一张临时表来使用,子查询语句出现的位置在紧跟在 from 后面的

查询 manager 岗位中工资高于 2450 的员工姓名和工资
select 别名.姓名列, 别名.工资列 from (select * from 员工表where 岗位 = ‘MANAGER’) [as] 别名 where 别名.工资列 > 2450;

第二种用法,将子查询语句当成是某个条件的值来使用,子查询语句出现的位置一般是在 where 后面
Select 姓 名 列 , 工 资 列 from 员工 表 where 工资列 = (select max(工资列) from 员工表) or 工资列 = (select min(工资列) from 员工表);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值