SQL第13课——创建高级联结

news2024/10/10 10:25:22

本课讲另外一些联结(含义和使用方法),如何使用表别名,如何对被联结的表使用聚集函数。

13.1 使用表别名

第7课中使用别名引用被检索的表列,给列起别名的语法如下:

SQL除了可以对列名和计算字段使用别名,还可以对表名起别名

好处:

1. 缩短SQL语句

2. 允许在一条select语句中多次使用相同的表。

customers as c使用c作为customers的别名

!!!Oracle中没有as,不支持as关键字,使用方法为:customers c

表别名只在查询执行中使用,表别名不返回到客户端

13.2 使用不同类型的联结

第12课只介绍了内联结或等值联结的简单联结,现在介绍三种其他联结:自联结(self-join), 自然联结(natural join), 外联结(outer join).

13.2.1  自联结

使用表别名的一个主要原因是能在一条select语句中不止一次使用相同的表。如下例:

要给与Jim Jones同一公司的所有顾客发送一封信件。

查询要求:首先找出Jim Jones工作的公司,然后找出该公司工作的顾客。

方法一:使用子查询:

方法二:使用联结:

此查询中需要的两个表是相同的表,避免歧义性,使用两个别名。

!!!自联结通常作为外部语句,替代从相同表中检索数据的使用子查询语句。许多DBMS处理联结远比处理子查询快得多。

13.2.2 自然联结

对表进行联结,至少有一列不止出现在一个表中,标准的联结返回所有数据,相同的列出现多次。

自然连接使每一列只返回一次。

自然联结要求只能选择那些唯一的列,一般通过对一个表使用通配符(select * ),而对其他表的列使用明确的子集来完成。

13.2.3 外联结

有时候需要包含没有关联行的那些行。例如:

1. 对每个顾客下的订单进行计数,包括那些至今尚未下订单的顾客。

2. 列出所有产品以及订购数量,包括没有人订购的产品;

3. 计算平均销售规模,包括那些至今尚未下订单的顾客。

内联结:所有顾客及其订单:

外联结:包含没有订单顾客在内的所有顾客

在使用outer join语法时,必须使用right或left关键字指定包括其所有行的表;

right:指出的是outer join右边的表,

left:指出的是outer join左边的表。

上面的例子使用left outer join 从from 子句左边的表(customers表)中选择所有行。

SQLite支持Left outer join ,不支持right outer join

两种基本的外联结形式:左外联结和右外联结。

全外联结(full outer join):检索两个表中的所有行并关联那些可以关联的行。与左外联结或右外联结包含一个表的不关联的行不同,全外联结包含两个表的不关联的行。(MySQL不支持)

13.3 使用带聚集函数的联结

第9课讲,聚集函数用来汇总数据。

聚集函数与联结一起使用:检索所有顾客及每个顾客所下的订单数。

group by子句按顾客分组数据,函数调用count(orders.order_num)对每个顾客的订单计数,作为num_ord返回。

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

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

相关文章

kafka和zookeeper单机部署

安装kafka需要jdk和zookeeper环境,因此先部署单机zk的测试环境。 zookeeper离线安装 下载地址: zookeeper下载地址:Index of /dist/zookeeper 这里下载安装 zookeeper-3.4.6.tar.gz 版本,测试环境单机部署 上传服务器后解压缩 …

代码随想录 | Day29 | 回溯算法:电话号码的字母组合组合总和

代码随想录 | Day29 | 回溯算法:电话号码的字母组合&&组合总和 关于这个章节,大家最好是对递归函数的理解要比较到位,听着b站视频课可能呢才舒服点,可以先去搜一搜关于递归函数的讲解,理解,再开始…

Linux -- 命令(一)

目录 知识点登入Xshellwhoamipwdlscdtouchstattreewhichll和ls和ls -lnanorm*关联符mancp 知识点 windows:\路径分隔符 Linux: /路径分割符目录 文件夹 如果建立一个空文件,修改文件也要占据磁盘空间文件 内容 属性 学习文件:要么对内容操…

宝塔面板专业版有什么区别?支持更多专业版插件

宝塔面板专业版和免费版有什么区别?宝塔面板专业版相比免费版支持更多专业版插件,包括:防火墙、网站监控、宝塔任务管理、对象存储、宝塔系统加固等专业版插件,详细参考 bt.cn/u/DjHjth 宝塔面板专业版和免费版区别 宝塔linux面板…

快速部署vue项目

简介 在现代前端开发中,工具的选择对于提高开发效率至关重要。Vite 是一个新型的前端构建工具,它利用了 ES 模块的特性来提供快速的开发体验。而 pnpm 则是一个高效的包管理器,能够极大地节省磁盘空间并加速依赖安装过程。本文将介绍如何使用…

Python | 由高程计算坡度和坡向

写在前面 之前参加一个比赛,提供了中国的高程数据,可以基于该数据进一步计算坡度和坡向进行相关分析。 对于坡度和坡向,这里分享一个找到的库,可以方便快捷的计算。这个库为:RichDEM,官网地址如下 https…

基于SpringBoot的音乐网站系统

本地测试环境:eclipse或idea,数据库MySQL5.7, jdk1.8 使用技术:SpringBootMyBatis 主要功能:分类管理、音乐管理、系统管理等

用java做一个简易版球球大作战

该界面模拟了一个简单的“吃球”游戏,一开始多个球在屏幕上移动,并检查每个大球是否可以吃掉其他小球,且更新状态,删除已经被吃掉的小球。通过图形绘制和逻辑处理实现了游戏的基本功能。 主界面World.java package gzeu.test.da…

Vue基础练习|ref

<script setup> import {ref} from "vue" const msgref("Hello Vue") </script> <template><div><h1>{{msg}}</h1><input v-model"msg"></div> </template>

家庭网络中,路由器和交换机的连接顺序

家庭网络中路由器和交换机的先后连接顺序 是由你的用网需求决定&#xff01; 光纤入户首先连接的肯定是光猫&#xff0c;而在光猫的后面&#xff0c;是先连接交换机&#xff1f;还是应该接路由器呢&#xff1f; 答案是&#xff1a;都可以 情况一&#xff1a;先连交换机&…

Nuxt.js 应用中的 app:mounted 钩子详解

title: Nuxt.js 应用中的 app:mounted 钩子详解 date: 2024/10/5 updated: 2024/10/5 author: cmdragon excerpt: app:mounted 钩子在 Vue 应用的生命周期中扮演着重要角色,提供了在组件被挂载后的执行时机。通过合理利用这个钩子,我们能够提高组件的交互性、用户体验以及…

使用bert模型进行命名实体识别任务

一、实验内容 本实验使用预训练的 BERT 模型进行命名实体识别&#xff08;NER&#xff09;任务&#xff0c;并且使用 Hugging Face 的 Transformers 库完成模型的训练、验证和测试。最后&#xff0c;使用测试集评估模型性能&#xff0c;计算NER指标。 二、算法介绍 Bert是一种…

Oracle 11g RAC 节点异常重启问题分析

一、背景 在国庆期间巡检的时候&#xff0c;发现数据库alert日志中出现了异常重启的信息&#xff0c;当即对该报错进行分析处理。 二、处理过程 &#xff08;1&#xff09;数据库告警日志分析 node1 alert&#xff1a; Sat Oct 05 13:05:14 2024 Thread 1 advanced to log …

前端模块化进化史:从全局 function 到 ES Modules

目前&#xff0c;前端开发已经离不开由 CommonJS、ES Modules 和 Webpack 构建的模块化开发环境。无论是 JavaScript、CSS、图片还是其他资源&#xff0c;都可以作为一个模块来处理。那么&#xff0c;模块化究竟是如何发展到今天的呢&#xff1f; 全局函数模式 最初的前端模块…

C# 属性和方法

本课要点&#xff1a; 1、属性的使用 2、方法的使用 一 数据安全问题 示例 static void Main(string[] args) {Student stu new Student();stu.age -2; }二 属性 private int age; //年龄 public int Age {get { return age; }set{if (value > 0 && value <…

JavaEE: 深入解析HTTP协议的奥秘(2)

文章目录 HTTP认识 URLURL encode 介绍 认识 "方法"(method)GETPOST其他方法 HTTP JavaEE: 深入解析HTTP协议的奥秘(1) 书接上文~ 认识 URL 平时我们俗称的"网址"其实就是说的 URL .(唯一资源定位符) URL 不是 HTTP 专属的,很多协议都会用到. 其实除了 …

软考-程序设计语言基础

一、程序设计语言概述 (一)程序设计语言的基本概念 1. 程序设计语言的目的 为了书写计算机程序而人为设计的符号语言&#xff0c;用于对计算过程进行描述、组织和推导。 2.低级语言 机器语言&#xff1a; 机器语言是计算机最原始的语言&#xff0c;由0和1的代码构成 计算机…

You must konw JS!!(超详细的javascript套餐,适合计算机专业有基础的,包含常见前端开发面试题)

1.起源 JavaScript 起源于 1995 年&#xff0c;当时它主要是为了满足网页交互的需求而被创建。它最初的设计目的是为了让网页开发者能够在网页中添加一些简单的交互效果和动态内容。在那个时期&#xff0c;网页大多是静态的&#xff0c;而 JavaScript 的出现为网页带来了新的活…

如何将数据从 AWS S3 导入到 Elastic Cloud - 第 1 部分:Elastic Serverless Forwarder

作者&#xff1a;来自 Elastic Hemendra Singh Lodhi 这是多部分博客系列的第一部分&#xff0c;探讨了将数据从 AWS S3 导入 Elastic Cloud 的不同选项。 Elasticsearch 提供了多种从 AWS S3 存储桶导入数据的选项&#xff0c;允许客户根据其特定需求和架构策略选择最合适的方…

助动词的分类及其缩略形式

助动词的分类及其缩略形式 1. 助动词 (auxiliary verb)2. 基本助动词 (primary auxiliary)2.1. 基本助动词 be、do 和 have2.2. 实义动词 be、do 和 have 3. 情态助动词 (modal auxiliary)3.1. 情态助动词取代情态动词 4. 半助动词 (semi-auxiliary)4.1. 不能与 it ... that-cl…