训练营数据库day02

模糊查询

LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。

可以和通配符(%、_)配合使用,其中"%"表示0或多个任意的字符,"_"表示一个任意的字符

语法:SELECT 列 | * FROM 表名 WHERE 列名 LIKE 值

示例:

-- 25.查询emp表中姓名中以"刘"字开头的员工,显示员工姓名。

-- 姓名中的第一个字必须是'刘',后面的都无所谓

select name from emp where name like '刘%';

-- 26.查询emp表中姓名中包含"涛"字的员工,显示员工姓名。

-- '%涛%'包含: 以'涛'开头,以'涛'结尾,或者'涛'在中间的某一个位置

select name from emp where name like '%涛%';

-- 27.查询emp表中姓名以"刘"开头,并且姓名为两个字的员工,显示员工姓名。

-- '刘_'表示以'刘'开头,并且姓名长度为2

```select name from emp where name like '刘_';`

-- '刘__'表示以'刘'开头,并且姓名长度为3

select name from emp where name like '刘__';

多行函数查询

多行函数也叫做聚合(聚集)函数,根据某一列或所有列进行统计。

常见的多行函数有:

多行函数

作用

COUNT( 列名 | * )

统计结果集中指定列的记录的行数。

MAX( 列名 )

统计结果集中某一列值中的最大值

MIN( 列名 )

统计结果集中某一列值中的最小值

SUM( 列名 )

统计结果集中某一列所有值的和

AVG( 列名 )

统计结果集中某一列值的平均值

提示:
(1)多行函数不能用在where子句中

(2)多行函数和是否分组有关,分组与否会直接影响多行函数的执行结果。

(3)多行函数在统计时会对null值进行过滤,直接将null值丢弃,不参与统计。

-- 28.统计emp表中薪资大于3000的员工个数

-- 查询薪资大于3000的员工有哪些

select * from emp where sal>3000;

-- 统计上面的查询结果有多少行记录(也就是薪资大于3000的员工个数)

select count(*) from emp where sal>3000; -- 7
select count(id) from emp where sal>3000; -- 7
select count(bonus) from emp where sal>3000; -- 6(有误差,因为null值不参与统计)

-- 29.求emp表中的最高薪资

-- 求员工表中的所有薪资

select sal from emp;

-- max(sal): 求sal这一列中的最大值

select max(sal) from emp;
select min(sal) from emp;

-- 30.统计emp表中所有员工的薪资总和(不包含奖金)

-- sum(sal): 求sal这一列中所有值的总和

select sum(sal) from emp;

-- sum(bonus): 即使bonus中有null值,sum函数会剔除null,不让null参与统计

select sum(bonus) from emp;

-- 31.统计emp表员工的平均薪资(不包含奖金)

-- avg(sal): 求sal这一列中所有薪资的平均值

select avg(sal) from emp;

多行函数需要注意的问题:

  • 多行函数和是否分组有关,如果查询结果中的数据没有经过分组,默认整个查询结果是一个组,多行函数就会默认统计当前这一个组的数据。产生的结果只有一个。
  • 如果查询结果中的数据经过分组(分的组不止一个),多行函数会根据分的组进行统计,有多少个组,就会统计出多少个结果。
select * from emp;

例如:统计emp表中的人数

-- 没有分组,默认所有员工是一个组,统计emp中的所有人数

select count(*) from emp; -- 12

结果返回的就是emp表中的所有人数

再例如:根据性别对emp表中的所有员工进行分组,再统计每组的人数,显示性别和对应人数

-- 按照性别分组,分为两个组,根据两个组统计,得出两个结果

select gender,count(*) from emp group by gender;

分组查询

GROUP BY 语句根据一个或多个列对结果集进行分组。

在分组的列上我们可以使用 COUNT,SUM,AVG,MAX,MIN等函数。

语法:SELECT 列 | * FROM 表名 [WHERE子句] GROUP BY 列;

-- 32.对emp表,按照部门对员工进行分组,查看分组后效果。

-- 根据部门对员工分组, 部门这一列值相同的为一组(共3组)

select * from emp group by dept;

-- 对分组后的员工进行统计,统计每一组的人数

select dept,count(*) from emp group by dept;

-- 33.对emp表按照职位进行分组,并统计每个职位的人数,显示职位和对应人数

-- 根据职位对员工分组, 职位这一列值相同的为一组(共3组)

select * from emp group by job;

-- 对上面分组后的员工进行统计,统计每一组的人数

select job,count(*) from emp group by job;

-- 34.对emp表按照部门进行分组,求每个部门的最高薪资(不包含奖金),显示部门名称和最高薪资

-- 根据部门分组,部门这一列相同的为一组(共3组)

select * from emp group by dept;

-- 对上面分组后的员工进行统计,统计每一组中的最高薪资

select dept,max(sal) from emp group by dept;

排序查询

你可能感兴趣的:(训练营数据库day02)