week 6 - SQL Select II

Overview

1. Joins

        包括交叉连接(Cross)、内连接(Inner)、自然连接(Natural)、外连接(Outer)

2. ORDER BY to produce ordered output

3. 聚合函数(Aggregate Functions)

        包括最小值(MIN)、最大值(MAX)、求和(SUM)、平均值(AVG)、计数(COUNT)

4.分组和过滤(GROUP BY 和 HAVING)

一、Joins

1.  连接的作用

 在 SELECT 查询(query)中,用于将多个表结合

2. 连接的类型

(1) 交叉连接(CROSS JOIN):生成表的笛卡尔积。 Cartesian product 

(2) 内连接(INNER JOIN):返回满足条件的行对。

(3) 自然连接(NATURAL JOIN):返回在列名相同的列(identically named columns)上具有相同(common)值的行。

(4)外连接(OUTER JOIN):包括内连接结果,同时还保留 (handles)NULL 值。

3. CROSS JOIN

SELECT * FROM A CROSS JOIN B;

SELECT * FROM A, B;

• 通常需要使用 WHERE 条件过滤无关的元组( WHERE clause to filter unrelated tuples)

4. INNER JOIN

• INNER JOIN specifies a condition that pairs of rows must satisfy

SELECT * FROM 

        A INNER JOIN B 

        ON condition;

SELECT * FROM 

        A INNER JOIN B

         USING (col1, col2);

• USING 子句将输出两表中指定列相等的行。

• col1 and col2 must appear in both A and B

Example

SELECT * FROM 

        Buyer INNER JOIN Property 

        ON Price <= Budget;

5. NATURAL JOIN

SELECT * FROM

         A NATURAL JOIN B;

• 自然连接是内连接(INNER JOIN)的特殊情况,连接条件是所有列名相同的列自动匹配。

A NATURAL JOIN is effectively a special case of an INNER JOIN where the USING clause specifies all identically named columns.

• 等价关系(Equivalence)

 在关系代数中,NATURAL JOIN 与 表示的自然连接操作是等价的。

Example

 

6. 连接(JOINS)与 WHERE 子句的对比

(1) 内连接和自然连接不是绝对必要的。

(2) 可以通过在多个表中选择数据并使用适当的 WHERE 子句,获得相同的结果。

JOINS 通常能让查询更加简洁和优雅。

NATURAL JOINS 在 SQL 查询中非常常见。common

不同的数据库管理系统(DBMS)对 JOINS 的支持可能不同。

7. OUTER JOIN

SELECT cols FROM

         table1 type OUTER JOIN table2 

        ON condition;

 type 可以是 LEFT、RIGHT 或 FULL。

(1) Left Outer Join

SELECT * FROM 

        Student LEFT OUTER JOIN Enrolment

        ON Student.ID = Enrolment.ID;

(2) Right Outer Join

(3) Full Outer Join 

 

• MySQL 不支持 FULL OUTER JOIN,可通过 LEFT OUTER JOIN 和 RIGHT OUTER JOIN 的 UNION 模拟。

Only Left and Right outer joins are supported in MySQL. If you really want a FULL outer join

SELECT * 

FROM Student FULL OUTER JOIN Enrolment

ON Student.ID = Enrolment.ID; 

(SELECT * FROM Student LEFT OUTER JOIN

Enrolment ON Student.ID = Enrolment.ID)

UNION

(SELECT * FROM Student RIGHT OUTER JOIN

Enrolment ON Student.ID = Enrolment.ID);

Practice 

Why Using Outer Joins?

外连接的实用性:

在处理某些情况下,外连接是一种更为实用的方法,例如当表中存在 NULL 值时,仍希望保留这些记录的信息。

内连接的局限性

忽略未匹配的记录:

内连接只返回两张表中满足匹配条件的记录,未匹配的记录会被忽略。

外连接的作用:

LEFT OUTER JOIN

左外连接不仅返回匹配的记录,还保留左表中所有未匹配的记录,并用 NULL 填充右表的数据。

多表外连接:

可以连续对多个表执行左外连接,确保保留左表中所有记录,同时逐步添加其他表中的信息。

Solution Using OUTER JOIN

查找 Grade = 'A' 的学生,并输出他们的 ID、姓名、地址(街道、城市、邮编)、电话号码和学位分类。

SELECT ID, Name, aStreet, aTown, aPostcode, pNumber, Classification

FROM

    (Student LEFT OUTER JOIN Phone

    ON Student.pID = Phone.pID)

LEFT OUTER JOIN Address

ON Student.aID = Address.aID

INNER JOIN Degree

ON Student.ID = Degree.ID

WHERE Grad = 'A';

• 第一步:通过 LEFT OUTER JOIN 连接 Student 和 Phone,保留所有学生记录,同时添加电话号码信息。

• 第二步:连接 Student 和 Address,保留(retained所有学生信息,同时补充地址。

• 第三步:通过内连接(INNER JOIN)连接 Degree 表,过滤(filter出满足 Grad = 'A' 的学生。

• Mark 和 Sam 的记录被保留,即使他们分别缺少电话号码和地址。

通过组合 LEFT OUTER JOIN 和 INNER JOIN,可以在保证数据完整性的同时实现精确过滤。

 

二、ORDER BY

SELECT

        [DISTINCT | ALL] column-list 

        FROM table-names 

        [WHERE condition] 

        [GROUP BY column-list] 

        [HAVING condition] 

        [ORDER BY column-list]

([] optional, | or) 

SELECT columns FROM tables 

        WHERE condition 

        ORDER BY cols [ASC | DESC];

• ORDER BY 子句用于对查询结果进行排序。(The ORDER BY clause is used to sort the results of a query)

• 可以指定多个列进行排序,优先按第一列排序,然后按第二列,以此类推。

sort by multiple columns, first by the first column, then the second, and so on.

SELECT Name, Grade 
FROM Students 
ORDER BY Grade ASC, Name DESC;

• 默认是升序(ASC,ascending),也可以使用降序(DESC,descending)

Examples

(1) Sort by marks in ascending order:

SELECT * FROM Grades

         ORDER BY Mark;

(2)ORDER BY 的列应该是 SELECT 结果中包含的列

虽然SQL 的灵活性允许你按照 不在结果中显示的列 或 表达式 排序

SELECT y / 100 AS y2 
        FROM a 
        ORDER BY y DESC;

三、聚合函数(Aggregate Functions)

put arithmetic expressions ​​​​​​​in SELECT.

1. Common Functions:

(1)COUNT:计算行数或列中非 NULL 值的数量。

• COUNT(*) 统计所有行的数量,无论列值是否为 NULL。

• COUNT(column_name) 统计某一列中非 NULL 值的数量。

• COUNT(DISTINCT column):统计列中唯一值的数量,忽略重复项和NULL 值

(2)SUM:计算列中值的总和(sum up)

(3) AVG:计算列的平均值。

(4) MIN/MAX:找出列中的最小值或最大值。

大多数聚合函数(SUMAVG 等)只对单个数值列有效,且只处理数值数据。

work on a single column of numerical data

• COUNT(*) 是一个例外,它不依赖列的类型,可以统计整个表中的行数。

2. Examples

(1) COUNT

(2) SUM,MIN/MAX and AVG 

3. Combining Aggregate Functions

SELECT 

        MAX(Mark) - MIN(Mark) 

                AS Range_of_marks

        FROM Grades;

SELECT SUM(Mark * Credits) / SUM(Credits)

                  AS 'Final Mark'
FROM Modules, Grades
WHERE Modules.Code = Grades.Code
      AND Grades.Name = 'John';

四、分组和过滤(GROUP BY 和 HAVING)

1. GROUP BY 的作用

• 按某列分组并对每组应用聚合函数。

SELECT column_set1 
        FROM tables
        WHERE predicate
        GROUP BY column_set2;

SELECT 语句中的每一项(即 column_set1)要满足:

(1)在 GROUP BY 子句中明确列出(位于 column_set2 中)

(2) 为常量值

(3) 为聚合函数的结果

违反规则的查询

SELECT Name, Subject, SUM(Mark) AS TotalMark
FROM Grades
GROUP BY Name;

• 对于分组后的每一组,Subject 有多个值(如 John 组包含 Math 和 Physics),SQL 不知道该返回哪个值。 

2. HAVING 的作用

• 类似于 WHERE,但 HAVING 是对分组(grouping)后的结果进行过滤。

WHERE and HAVING

(1)WHERE 子句:

• 用于过滤表中的行。

• 在分组和聚合操作之前执行。

• 不能使用聚合函数(例如 SUM() 或 AVG())。

(2) HAVING 子句:

• 用于过滤分组后的结果。

• 在分组和聚合操作之后执行。

• 可以使用聚合函数过滤组。

• Think of a query being processed as follows: 

1. Tables are joined (JOIN)

2. WHERE clauses(WHERE)

3. GROUP BY clauses and aggregates (GROUP BY)

4. Column selection (SELECT)

5. HAVING clauses (HAVING)

6. ORDER BY(ORDER BY)

 SELECT SUM(Amount) AS TotalSales
FROM Sales
WHERE Category = 'Food';

SELECT Category, SUM(Amount) AS TotalSales
FROM Sales
GROUP BY Category
HAVING SUM(Amount) > 300;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/62760.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法训练营day23(二叉树09:修建二叉搜索树,有序数组转化为平衡二叉搜索树,二叉搜索树转化为累加树,二叉树专题总结)

第六章 二叉树part09今日内容&#xff1a;● 669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉搜索树 ● 538.把二叉搜索树转换为累加树 ● 总结篇 详细布置 669. 修剪二叉搜索树 这道题目比较难&#xff0c;比 添加增加和删除节点难的多&#xff0c;建议先看视频理解。题目…

C语言操作符深度解析

目录 一、操作符的分类 1、算术操作符 1、1、 和- 1、2、* 1、3、/ 1、4、% 2、赋值操作符&#xff1a;和复合赋值 2、1、连续赋值 2、2、复合赋值符 3、单⽬操作符&#xff1a;、--、、- 3、1、和-- 3、1、1、前置 3、1、2、后置 3、2、1、前置-- 3、2、2、后…

Python 深度学习框架之Keras库详解

文章目录 Python 深度学习框架之Keras库详解一、引言二、Keras的特点和优势1、用户友好2、多网络支持3、跨平台运行 三、Keras的安装和环境配置1、软硬件环境2、Python虚拟环境 四、使用示例1、MNIST手写数字识别 五、总结 Python 深度学习框架之Keras库详解 一、引言 Keras是…

【大语言模型】ACL2024论文-23 检索增强的多语言知识编辑

【大语言模型】ACL2024论文-23 检索增强的多语言知识编辑 目录 文章目录 【大语言模型】ACL2024论文-23 检索增强的多语言知识编辑目录摘要研究背景问题与挑战如何解决核心创新点算法模型实验效果&#xff08;包含重要数据与结论&#xff09;相关工作后续优化方向 后记 检索增强…

_C#_串口助手_字符串拼接缺失问题(未知原理)

最近使用WPF开发串口助手时&#xff0c;遇到一个很奇怪的问题&#xff0c;无论是主线程、异步还是多线程&#xff0c;当串口接收速度达到0.016s一次以上&#xff0c;就会发生字符串缺失问题并且很卡。而0.016s就一切如常&#xff0c;仿佛0.015s与0.016s是天堑之隔。 同一份代码…

基于Python的猎聘网招聘数据采集与可视化分析

1.1项目简介 在现代社会&#xff0c;招聘市场的竞争日趋激烈&#xff0c;企业和求职者都希望能够更有效地找到合适的机会与人才。猎聘网作为国内领先的人力资源服务平台&#xff0c;汇聚了大量的招聘信息和求职者数据&#xff0c;为研究招聘市场趋势提供了丰富的素材。基于Pyt…

基于Java Springboot高校社团微信小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 微信…

springboot(20)(删除文章分类。获取、更新、删除文章详细)(Validation分组校验)

目录 一、删除文章分类功能。 &#xff08;1&#xff09;接口文档。 1、请求路径、请求参数。 2、请求参数。 3、响应数据。 &#xff08;2&#xff09;实现思路与代码书写。 1、controller层。 2、service接口业务层。 3、serviceImpl实现类。 4、mapper层。 5、后端接口测试。…

【前端】特殊案例分析深入理解 JavaScript 中的词法作用域

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 &#x1f4af;前言&#x1f4af;案例代码&#x1f4af;词法作用域&#xff08;Lexical Scope&#xff09;与静态作用域什么是词法作用域&#xff1f;代码执行的详细分析 &#x1f4af;函数定义与调用的…

Node.js 实战: 爬取百度新闻并序列化 - 完整教程

很多时候我们需要爬取一些公开的网页内容来做一些数据分析和统计。而多数时候&#xff0c;大家会用到python &#xff0c;因为实现起来很方便。但是其实Node.js 用来爬取网络内容&#xff0c;也是非常强大的。 今天我向大家介绍一下我自己写的一个百度新闻的爬虫&#xff0c;可…

三分钟快速掌握——Linux【vim】的使用及操作方法

一、vim的使用 vim是一个文本编辑器 非常小巧轻便 1.1如何进入vim编辑器 方法一&#xff1a; 首先使用touch 1.c 创建一个源文件 然后使用vim 1.c进入 方法二&#xff1a; 直接使用指令 vim 2.c 会直接创建一个2.c的源文件 退出时记得保存&#xff08;使用wq或者x&am…

(简单5步实现)部署本地AI大语言模型聊天系统:Chatbox AI + grok2.0大模型

摘要&#xff1a; 本文将指导您如何部署一个本地AI大语言模型聊天系统&#xff0c;使用Chatbox AI客户端应用和grok-beta大模型&#xff0c;以实现高效、智能的聊天体验。 引言&#xff1a; 由马斯克X-AI发布的Grok 2大模型以其卓越的性能超越了GPT4.0。Grok模型支持超长文本…

docker安装hadoop环境

一、使用docker搭建基础镜像 1、拉取centos系统镜像 # 我这里使用centos7为例子 docker pull centos:7 2、创建一个dockerfiler文件&#xff0c;用来构建自定义一个有ssh功能的centos镜像 # 基础镜像 FROM centos:7 # 作者 #MAINTAINER hadoop ADD Centos-7.repo /etc/yum.re…

中国电信张宝玉:城市数据基础设施建设运营探索与实践

11月28日&#xff0c;2024新型智慧城市发展创新大会在山东青岛召开&#xff0c;中国电信数字政府研究院院长张宝玉在大会发表主旨演讲《城市数据基础设施运营探索与实践》。报告内容包括城市数据基础设施的概述、各地典型做法及发展趋势建议三个方面展开。 篇幅限制&#xff0…

Linux内核4.14版本——ccf时钟子系统(6)——DTS相关的API

目录 1. of_clk_add_provider 2. of_clk_get_from_provider 2.1 __of_clk_get_hw_from_provider 2.2 __clk_create_clk 3. of_clk_set_defaults 3.1 __set_clk_parents 3.2 __set_clk_rates 再回到第2章DTS相关的介绍&#xff0c;clock driver使用一个DTS node描述一个c…

2024年度桌面便签软件电脑版推荐

随着2024年的尾声渐近&#xff0c;这一年中涌现出了许多优秀的软件&#xff0c;其中便签软件因其便捷性和高效性成为了备受欢迎的工具。这类软件无论是在工作还是日常生活中&#xff0c;都极大地提升了我们的效率和生活质量。 在众多桌面便签中&#xff0c;敬业签是一款值得推…

WPS for Mac免登录使用工具栏

一、mac下载国际版https://www.wps.com 下载下来是在线安装包&#xff0c;对了&#xff0c;不再需要汉化&#xff01;&#xff01;&#xff01; 二、干掉登录 进入目录/Applications/wpsoffice.app/Contents/Frameworks/office6&#xff08;访达、应用程序、wpsoffice.app右…

【计算机网络】实验3:集线器和交换器的区别及交换器的自学习算法

实验 3&#xff1a;集线器和交换器的区别及交换器的自学习算法 一、 实验目的 加深对集线器和交换器的区别的理解。 了解交换器的自学习算法。 二、 实验环境 • Cisco Packet Tracer 模拟器 三、 实验内容 1、熟悉集线器和交换器的区别 (1) 第一步&#xff1a;构建网络…

【技巧】Mac上如何显示键盘和鼠标操作

在制作视频教程时&#xff0c;将键盘和鼠标的操作在屏幕上显示出来&#xff0c;会帮助观众更容易地理解。 推荐Mac上两款开源的小软件。 1. KeyCastr 这款工具从2009年至今一直在更新中。 https://github.com/keycastr/keycastr 安装的话&#xff0c;可以从Github上下载最…

Docker:在 ubuntu 系统上生成和加载 Docker 镜像

本文将介绍在 ubuntu系统上进行 Docker 镜像的生成和加载方法和代码。 文章目录 一、下载和安装 docker二、加载 docker 文件三、保存你的镜像四、将镜像上传到云端并通过连接下载和加载 Docker 镜像五、Docker 容器和本地的文件交互5.1 从容器复制文件到本地宿主机5.1.1 单个文…