您的位置:首页 > 健康 > 养生 > 商业空间设计案例ppt_佛山企业网站建设_品牌推广方案案例_手机360优化大师官网

商业空间设计案例ppt_佛山企业网站建设_品牌推广方案案例_手机360优化大师官网

2025/3/10 18:16:56 来源:https://blog.csdn.net/weixin_72703349/article/details/144488178  浏览:    关键词:商业空间设计案例ppt_佛山企业网站建设_品牌推广方案案例_手机360优化大师官网
商业空间设计案例ppt_佛山企业网站建设_品牌推广方案案例_手机360优化大师官网

一、聚合查询

函数说明
COUNT([DISTINCT] expr)
返回查询到的数据的数量
SUM([DISTINCT] expr)
返回查询到的数据的 总和,不是数字没有意义
AVG([DISTINCT] expr)
返回查询到的数据的 平均值,不是数字没有意义
MAX([DISTINCT] expr)
返回查询到的数据的 最大值,不是数字没有意义
MIN([DISTINCT] expr)
返回查询到的数据的 最小值,不是数字没有意义
COUNT
--统计班级共有多少同学
select count(*) from student;
SUM
-- 统计数学成绩总分
SELECT SUM(math) FROM exam_result;
-- 不及格 < 60 的总分,没有结果,返回 NULL
SELECT SUM(math) FROM exam_result WHERE math < 60;
AVG
-- 统计平均总分
SELECT AVG(chinese + math + english) 平均总分 FROM exam_result;
MAX
-- 返回英语最高分
SELECT MAX(english) FROM exam_result;
MIN
-- 返回 > 70 分以上的数学最低分
SELECT MIN(math) FROM exam_result WHERE math > 70;
GROUP BY 子句
SELECT 中使用 GROUP BY 子句可以对指定列进行分组查询。需要满足:使用 GROUP BY 进行分组查询时,SELECT 指定的字段必须是分组依据字段 其他字段若想出现在 SELECT 中则必须包含在聚合函数中。
--准备测试表及数据:职员表,有id(主键)、name(姓名)、role(角色)、salary(薪水)
create table emp(id int primary key auto_increment,name varchar(20) not null,role varchar(20) not null,salary numeric(11,2)
);insert into emp(name, role, salary) values
('马云','服务员', 1000.20),
('马化腾','游戏陪玩', 2000.99),
('孙悟空','游戏角色', 999.11),
('猪无能','游戏角色', 333.5),
('沙和尚','游戏角色', 700.33),
('隔壁老王','董事长', 12000.66);

查询每个角色的最高工资、最低工资和平均工资

select role,max(salary),min(salary),avg(salary) from emp group by role;

 

HAVING
GROUP BY 子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用 WHERE 语句,而需要用HAVING
显示平均工资低于 1500 的角色和它的平均工资
select role,max(salary),min(salary),avg(salary) from emp group by role 
having avg(salary)<1500;

二、联合查询

联合查询是多表查询的一种方式,在保证多个SELECT语句的查询字段数相同的情况下,合并多个查询的结果。

UNION是实现联合查询的关键字

ALL表示保存所有的查询结果。

DISTINCT是默认值,可以省略,表示去除完全重复的记录。

SELECT 字段列表 FROM 表A ……

UNION 

SELECT 字段列表 FROM 表B ……;

返回表A查询和表B查询的并集(并进行去重处理)

除此之外,若要对联合查询的记录进行排序等操作,需要使用圆括号“()”包裹每一个SELECT语句,在SELECT语句内或在联合查询的最后添加ORDER BY语句。并且若要排序生效,必须在ORDER BY后添加LIMIT限定联合查询排序的数量,通常推荐使用大于表记录数的任意值。 

实际开发中往往数据来自不同的表,所以需要多表联合查询。多表查询是对多张表的数据取笛卡尔积: 

三、连接查询

(1)交叉连接

交叉连接返回的结果是被连接的两个表中所有数据行的笛卡尔积。 例如,商品分类表中有3个字段,4条记录;商品表中有5个字段,10条商品信息,那么交叉连接后的笛卡尔积就等于 4*10条记录数,每条记录中含有3+5个字段。

SELECT 查询字段 FROM 表1 CROSS JOIN 表2;

CROSS JOIN用于连接两个要查询的表。

通过该语句可以查询两个表中所有的数据组合。 

select c.id cid, c.name cname, g.id gid, g.name gname
from sh_goods_category AS c
cross join sh_goods AS g;

 

(2)内连接 

可以选取出同时存在于两张表中的数据,即两张表的交集数据

分为隐式内连接和显示内连接,两者只是书写方式不同,得到的结果是完全相同的

隐式内连接

SELECT 字段列表 FROM 表1,表2 WHERE 条件列表;

显式内连接

SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 连接条件列表 [WHERE 判断语句] ;

INNER可以省略

ON用于指定内连接的查询条件。

在不设置ON时,与交叉连接等价

关键字ON与WHERE的异同点

相同点:都用于完成条件的限定。

不同点:于WHERE是限定已全部查询出来的记录,那么在数据量很大的情况下,此操作会浪费很多性能,所以此处推荐使用ON实现内连接的条件匹配

(3)左外连接

左外连接是外连接查询中的一种,也可以将其称为左连接。

它用于返回连接关键字(LEFT JOIN)左表中所有的记录,以及右表中符合连接条件的记录。

当左表的某行记录在右表中没有匹配的记录时,右表中相关的记录将设为空值。

SELECT 查询字段 FROM 表1 LEFT [OUTER] JOIN 表2 ON 匹配条件;

查询表1的所有数据,其中包含表1和表2交集部分的数据

关键字“LEFT [OUTER] JOIN”左边的表(表1)被称为左表,也可称为主表。

关键字右边的表(表2)被称为右表,也可称为从表。

OUTER在查询时可以省略。

(4)右外连接

SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件列表;

查询表2的所有数据包含表1和表2交集部分的数据

右连接查询正好与左连接相反。

因此,在应用外连接时仅调整关键字(LEFT或RIGHT JOIN)和主从表的位置,即可实现左连接和右连接的互换使用。

总结

外连接是最常用的一种查询数据的方式,分为左外连接(LEFT JOIN)和右外连接(RIGHT JOIN)。

外连接与内连接的区别是,内连接只能获取符合连接条件的记录,而外连接不仅可以获取符合连接条件的记录,还可以保留主表与从表不能匹配的记录。

四、子查询

子查询(Sub Query)也可以称为嵌套查询,是一种嵌套在其它SQL查询的Where子句中的查询;包含子查询的语句称为外部语句

1、子查询必须包含在()内
2、一般子查询的SELECT语句只有一个字段,除非外部语句中有多个列需要与子查询的列进行比较
3、子查询不可以直接应用在聚合函数中,子查询也无法使用ORDER BY
4、Ntext、text、image数据类型不可以在子查询的选择列表中使用
5、关键字DISTINCT不能与包含GROUP BY的子查询一起使用

SELECT name FROM sh_goods_category
WHERE id = (SELECT category_id FROM sh_goods 
WHERE name='智能手机');

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com