Orancle的SQL语句之多表查询和组函数

下面就是关于“Oracle的SQL语句之多表查询和组函数”的完整攻略。

多表查询

在实际的业务场景中,我们经常需要从多个表中查询数据,这就要用到多表查询。Oracle中的多表查询主要有三种方式:

  1. 内连接:查询两个表中的共同数据,即交集。使用 INNER JOIN 或 JOIN 关键字实现。
  2. 左连接:查询第一个表中的所有数据和第二个表中的共同数据,即左表包含所有右表的数据。使用 LEFT JOIN 或 LEFT OUTER JOIN 实现。
  3. 右连接:查询第二个表中的所有数据和第一个表中的共同数据,即右表包含所有左表的数据。使用 RIGHT JOIN 或 RIGHT OUTER JOIN 实现。

下面是两个示例:

假设我们有两个表:一个是学生表(students),包含学生的姓名和班级,另一个是班级表(classes),包含班级的名称和教师姓名。我们需要查询每个班级的平均成绩。

示例1:内连接

SELECT c.name AS class_name, AVG(s.score) AS avg_score 
FROM classes c 
INNER JOIN students s ON c.name = s.class_name 
GROUP BY c.name;

解析:
- 使用 INNER JOIN 连接两个表,连接条件是班级名相等。
- 使用 GROUP BY 分组,按照班级名分组。
- 使用 AVG 函数计算每个班级的平均成绩。

示例2:左连接

SELECT c.name AS class_name, AVG(s.score) AS avg_score 
FROM classes c 
LEFT JOIN students s ON c.name = s.class_name 
GROUP BY c.name;

解析:
- 使用 LEFT JOIN 连接两个表,连接条件是班级名相等。
- 因为是左连接,所以保留左表的所有数据,即使右表中没有相应的数据也会显示。
- 使用 GROUP BY 分组,按照班级名分组。
- 使用 AVG 函数计算每个班级的平均成绩。

组函数

组函数是用于对一个或多个值进行计算,并返回单一结果的函数。常见的组函数包括:SUM、AVG、COUNT、MAX、MIN 等。

下面是一个示例:

假设我们有一个订单表(orders),包含订单号、顾客号和订单总金额。我们需要查询每个顾客的总订单金额、平均订单金额、订单数、最高订单金额和最低订单金额。

SELECT customer_id, 
       SUM(total_amount) AS total_amount,
       AVG(total_amount) AS avg_amount,
       COUNT(*) AS order_count,
       MAX(total_amount) AS max_amount,
       MIN(total_amount) AS min_amount
FROM orders
GROUP BY customer_id;

解析:
- 使用 GROUP BY 分组,按照顾客号分组。
- 使用 SUM 函数计算每个顾客的总订单金额。
- 使用 AVG 函数计算每个顾客的平均订单金额。
- 使用 COUNT 函数计算每个顾客的订单数。
- 使用 MAX 函数计算每个顾客的最高订单金额。
- 使用 MIN 函数计算每个顾客的最低订单金额。

以上就是关于“Oracle的SQL语句之多表查询和组函数”的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Orancle的SQL语句之多表查询和组函数 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • redis-cli 通过管道 –pipe 快速导入数据到redis中

    最近有个需求,需要把五千万条数据批量写入redis中,方法倒是有很多种!效率最高的就是通过redis-cl管道的方式写入 一:先看看命令 cat redis.txt | redis-cli -h 127.0.0.1 -a password – p 6379 –pipe 结构很简单 redis.txt 是你的文件名称 后面是你的客户端 二:redis.txt…

    Redis 2023年4月13日
    00
  • SQL 提取第n个分隔子字符串

    要提取第n个分隔子字符串,我们可以使用SQL中的SUBSTRING_INDEX函数。该函数用于提取字符串中的指定分隔符之前或之后的子字符串。以下是详细的攻略。 语法 将SUBSTRING_INDEX函数应用于字符串时,其基本语法如下: SUBSTRING_INDEX(string, delimiter, count) 其中: string:要提取子字符串的字…

    database 2023年3月27日
    00
  • redis的Sentinel模式(哨兵模式)的windows安装

    一、下载windows版本的Redis github下载地址:https://github.com/MSOpenTech/redis/tags  将压缩包解压,更名为Redis,放在D盘。 删除redis-server.pdb, redis-cli.pdb, redis-check-aof.pdb, redis-benchmark.pdb 删除Windows…

    Redis 2023年4月12日
    00
  • MySQL8.0 创建用户及授权 – 看这篇就足够了

    MySQL8.0 创建用户及授权 – 看这篇就足够了 什么时候会用到 对接外系统时,需要给其余系统开放访问权限 本系统中,分权限管理数据,防止root权限删库跑路? mysql版本 MySql8.0+ 具体步骤 1.命令行进入MySql 使用 mysql -u#UserName -p#PassWord 命令进入MySql #UserName 代表你的MySq…

    2023年4月8日
    00
  • 为什么在MySQL中不建议使用UTF-8

    为什么在MySQL中不建议使用UTF-8? 在MySQL的过去版本中,UTF-8被实现为最多需要3个字节来存储一个字符。然而,UTF-8的标准规范允许每个字符最多使用4个字节的存储空间。由于MySQL的实现方式是固定为最多使用3个字节存储一个字符,这意味着当存储需要4字节的字符时,MySQL会强制使用2个UTF-8字符来存储该字符,这被称为“UTF-8代理对…

    database 2023年5月22日
    00
  • MySQL数据库数据删除操作详解

    下面就来详细讲解“MySQL数据库数据删除操作详解”的完整攻略: 1. 背景介绍 MySQL数据库是目前世界上最流行的关系型数据库之一,提供了完善的数据存储和管理功能,其中包括了数据删除操作。不过,数据删除操作需要谨慎操作,否则可能会导致数据的丢失。 2. 删除操作的语法 以下是MySQL数据库中删除操作的基本语法: DELETE FROM table_na…

    database 2023年5月22日
    00
  • 从一个MySQL的例子来学习查询语句

    下面是学习MySQL查询语句的完整攻略,包含两条示例说明: 1. 确定查询需求 在开始编写查询语句之前,我们需要明确自己的查询需求。例如,需要查询哪些表格、需要查询哪些字段,查询的条件是什么,需要按照哪些字段排序。只有理清这些需求,才能更加清晰地编写查询语句。 2. 了解查询语句的基本结构 一个典型的查询语句大致由以下几个部分组成: SELECT colum…

    database 2023年5月22日
    00
  • 浅析mysql交互式连接&非交互式连接

    浅析MySQL交互式连接&非交互式连接 什么是MySQL连接? 在MySQL中,连接是指客户端与服务器之间建立通信通道所需要的一些参数和状态。在连接建立后,客户端就可以发送命令给服务器,服务器会接收并处理这些命令,并把结果返回给客户端。因此,连接可以被看作是通信的桥梁,MySQL的每一个操作都要依靠连接来完成。 什么是交互式连接? 交互式连接是指My…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部