数据库 升序,降序,聚合函数(总数,最大,最小,求和,平均),分组,分页,连接查询(内连接,左连接,右连接),自关联,子查询

本文详细介绍了SQL中的排序(ORDER BY)、聚合函数(COUNT、MAX、MIN、SUM、AVG)、分组(GROUP BY)、分页(LIMIT)操作以及各种类型的连接查询(内连接、外连接、自关联)。通过实例演示了如何在查询中使用这些功能,帮助读者深入理解SQL的数据处理能力。
摘要由CSDN通过智能技术生成

语句排序

-- 排序: ORDER BY 字段名 ase(从小到大,升序)/desc(从大到小,降序)
SELECT * FROM goods ORDER BY price ASC
SELECT * FROM goods ORDER BY price DESC  
-- 排序 价格从小到大排序,价格相同,就按照数量,从数量多到少
-- 先用价格排序,价格排序之后,再用num进行排序
SELECT * FROM goods ORDER BY price ASC,num DESC

聚合函数

常见的聚和函数

  • count():查询总记录数

查询总记录数
count(*)表示计算总行数,括号中也可以使用字段名

-- 注意:统计数据总数时,推荐使用*,它会按照数据最多的一列进行统计
SELECT count(num) FROM goods
SELECT count(*) FROM goods
  • max():查询最大值
-- 计算最大值(计算最高的价格)
SELECT MAX(price) FROM goods
  • min():查询最小值
-- 计算最小值(计算最小价格)
SELECT MIN(price) FROM goods
  • sum():求和
-- 计算蒙牛牛奶的总数量
SELECT sum(num) FROM goods WHERE company LIKE '%蒙%';
  • avg():求平均值
-- 计算平均值(计算平均价格)
SELECT avg(price) FROM goods

分组

对比where和having

  • where是对from后面指定的表进行数据筛选,属于对原始数据的筛选
  • having是对group by的结果进行筛选
  • having后面的条件可以用聚合函数,where后面不可以
-- 分组查询:GROUP BY字段
SELECT * FROM goods GROUP BY company
-- 注意:一般情况下,分组要配合聚合函数一起使用,对分组后的数据进行下一步统计
SELECT company 公司名称,COUNT(*) FROM goods GROUP BY company
-- 注意:如果想要在分组后再次进行条件筛选,可以使用having关键字
SELECT company as '公司名称' FROM goods GROUP BY company HAVING company='蒙牛'

分页

获取部分行
当数据量过大时,在一页中查看数据是一件非常麻烦的事情
语法

select * from 表名 Limit start,count
从star开始,获取count数据
start索引从0开始

-- 分页 LIMIT START(起始索引),count(数据行数)
-- 索引:在计算机中,索引计数起始值从0开始
-- 起始索引:实际数据顺序-1,即为其对应的索引值
-- 例:查询3-6行的数据
SELECT * from goods LIMIT 2,4
-- 扩展,如果获取是当前数据中的第一行数据,索引值可以省略
-- 例:获取当前数据中的第一行数据
SELECT * FROM goods LIMIT 1

分页查询

-- 分页查询
-- 每页显示m条数据,求:显示第n页的数据
-- 公式:(n-1)*m,m
-- 例:每页显示2条数据,求:显示第4页的数据
SELECT * FROM goods LIMIT 6,2

连接查询

在这里插入图片描述

先创建表
在这里插入图片描述
在这里插入图片描述
内连接
查询的结果为两个表匹配到的数据
在这里插入图片描述

-- 在查询中,需要将两张表存在的对应关系的数据全部显示出来,需要使连接查询-内连接
-- 内连接:显示两张表中存在对应关系的数据,无对应关系的数据不显示
-- 语法:表1 inner join 表1.字段 = 表2.字段
SELECT * from student INNER JOIN address on student.addre_id = address.addre_id
-- 连接查询公用知识点:连接后的表进行字段限制
-- 注意:需要由对应的表名.字段的方式实现(防止表与表之间存在相同的字段名)
SELECT student.`name`,address.addre from student INNER JOIN address on student.addre_id = address.addre_id

-- 连接查询中,往往会给表名起别名,目的:(1)缩短表名(2)给表单独创建空间(了解)
SELECT stu.`name`,ad.addre from student stu  INNER JOIN address ad on stu.addre_id = ad.addre_id

左连接
查询的结果是两个表匹配到的数据加左表特有的数据,对于右表中不存在的数据使用null填充
在这里插入图片描述

左连接:以left join关键为界,关键字左侧的表信息要全部显示出来,而关键字右侧的表的信息有对应的部分显示,无对应的部分以null占位填充即可
语法:表1 left jion 表2 on 表1.字段=表2.字段

-- 左连接
-- 语法:表1 left jion 表2  on 表1.字段=表2.字段
SELECT * FROM student stu left join address ad on stu.addre_id = ad.addre_id

右连接
查询的结果是两个表匹配到的数据加右表特有的数据,对于左表中不存在的数据使用null填充
在这里插入图片描述

右连接:以right join关键为界,关键字右侧的表信息要全部显示出来,而关键字左侧的表的信息有对应的部分显示,无对应的部分以null占位填充即可
语法:表1 right jion 表2 on 表1.字段=表2.字段

-- 右连接 主要解决3张及以上表进行连接查询时常见
SELECT * FROM address ad RIGHT join student stu on stu.addre_id = ad.addre_id

自关联

特征:只有一张表,表中最少存在两列字段具备对应关系
**原理:**通过起别名的方式,将1张表变成2张表,通过对应字段的字段关系,进行条件对比,实现连接查询
在这里插入图片描述

自关联:(1)通过起别名的方式,将一个表变两个表
-- (2)通过 表1.字段 = 表2.字段 实现表间关联
SELECT * FROM city c1 
INNER JOIN city c2 on c1.aid = c2.pid

在这里插入图片描述

子查询的介绍

定义:在一条查询语句中,利用另一条语句作为条件或者数据源,充当条件或数据源的语句称为子查询语句
注意:子查询语句,在使用时,务必使用括号括起来

-- 平均价格
SELECT avg(price) FROM goods
-- 查询大于平均价格的
SELECT * FROM goods WHERE price > 4.85
-- 优化实现 -子查询(充当条件)
SELECT * FROM goods WHERE price > (SELECT avg(price) FROM goods)

-- 查询所有男生信息,包含地址
SELECT * from student where sex='男'
SELECT * from address
-- 需求实现(充当数据源)
SELECT * from address ad
INNER JOIN (SELECT * from student where sex='男') a on ad.addre_id = a.addre_id

扩展1:子查询的分类
根据子查询语句返回的结果形式体现,子查询共分为四类

  • 子查询返回的结果是一个值(一行一列),称之为:标量子查询
  • 子查询返回的结果是一列数据(一列多行),称之为:列子查询
  • 子查询返回的结果是一行数据(一行多列),称之为:行子查询
  • 子查询返回的结果是多汗多列(相当于一张表),称之为:表级子查询
    扩展2:子查询关键字
  • in:
-- in:范围
SELECT * FROM student where height in (SELECT height FROM student where height BETWEEN 170 AND 180);
  • some/any:
-- some/any :任意一个
SELECT * FROM student where height = some(SELECT height FROM student where height BETWEEN 170 AND 180);
SELECT * FROM student where height = any(SELECT height FROM student where height BETWEEN 170 AND 180);
  • all:
-- all:全部(=all,等于所有,想要匹配括号里面的所有,结果就是空数据)
SELECT * FROM student where height = all(SELECT height FROM student where height BETWEEN 170 AND 180);
-- !=,不等于所有
SELECT * FROM student where height != all(SELECT height FROM student where height BETWEEN 170 AND 180);


  • 4
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python数列降序排序是指将一系列数值按照从大到小的顺序排列的过程。这通常用于数据分析、算法排序等问题中,以便更容易地分析数据或者优化排序结果。Python中有多种方法可以实现这一功能: ### 使用内置函数 `sorted()` 进行降序排序 Python的`sorted()`函数是一个强大的工具,它可以对各种数据类型进行排序,并返回一个新的已排序列表。通过添加额外的参数`reverse=True`,我们可以轻松地得到降序排序的结果。 #### 示例代码: ```python numbers = [45, 78, 12, 90, 34] sorted_numbers_descending = sorted(numbers, reverse=True) print(sorted_numbers_descending) # 输出: [90, 78, 45, 34, 12] ``` ### 使用列表推导式进行降序排序 列表推导式提供了一种简洁的方式来创建新的列表,其元素是基于现有列表元素进行操作的结果。同样,我们可以通过添加`[::-1]`切片来反转列表,实现降序排序的效果。 #### 示例代码: ```python numbers = [45, 78, 12, 90, 34] descending_order_list = sorted(numbers, reverse=True) # 或者直接 numbers = numbers[::-1] print(descending_order_list) # 输出: [90, 78, 45, 34, 12] ``` ### 结合元组和字典进行排序 当你需要根据多个条件进行排序时,可以结合元组和字典使用。例如,假设有一个包含学生姓名和分数的列表,你可以根据分数进行排序。 #### 示例代码: ```python students_scores = [("Alice", 85), ("Bob", 92), ("Charlie", 76)] # 按照分数降序排序 sorted_students = sorted(students_scores, key=lambda x: x, reverse=True) print(sorted_students) # 输出: [('Bob', 92), ('Alice', 85), ('Charlie', 76)] ``` ### 相关问题: 1. **如何在列表循环的基础上添加降序排序的功能?** 可以先对列表进行排序,然后遍历这个排序后的列表,如果需要的话,还可以修改原始列表的值。 2. **在使用降序排序时需要注意哪些细节?** - 确保使用的数据类型适合排序运算。 - 考虑到性能影响,在处理大规模数据时,可能需要权衡使用时间效率更高的排序算法。 - 注意降序排序可能会改变原始数据的引用关系,如使用了列表切片等方法。 3. **如何在数据库查询中使用降序排序?** 在SQL查询中,可以使用`ORDER BY`子句加上`DESC`关键字来获取降序排序的数据。例如: ```sql SELECT * FROM table_name ORDER BY column_name DESC; ``` 这样的答案不仅解释了如何在Python中实现数列降序排序,还提出了几个关于降序排序的深入思考点,以及在不同场景下可能遇到的实际应用问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值