SQL Server基础 第七章 连接查询(内连接、表别名、左外连接、右外连接)

news2024/12/24 8:22:24

        前言

        连接查询是关系数据库中最主要的查询,主要包括内连接、外连接和交叉连接等。通过连接运算符可以实现多个表查询。前面章节的查询均是基于单表进行,但有时需要获取的信息存储于多张表中,此时就必须使用本章所介绍的多表连接查询技术来获取。例如,员工表只有职级号,而职级表包括职级号和职级名,如果想要获取某员工具体的职级名,则只能通过连接员工表和职级表,使用多表连接查询技术实现上述任务。

        表之间的联系依赖于主键和外键,同样连接查询的连接列一般也是由外键担当。连接查询默认为内连接查询,如果希望不满足连接条件的记录也在查询结果中出现,这时就需要使用外连接。

目录

1、内连接

使用内连接获取客户“王传华”所有的订单信息和客户信息

使用内连接获取客户“王传华”下单日期在2017年4月之后的订单信息,要求显示客户姓名、下单日期。

 多表连接

2、表别名

3、左外连接

外连接查询概念

统计每件商品的销售数量和销售金额,要求按照销售量和销售金额升序显示商品名、销售量和销售金额

计算每个订单的金额,要求按照订单下单日期升序、订单金额降序显示订单ID、订单下单日期、订单日期和顾客姓名

4、右外连接


1、内连接

内连接是应用程序中非常常见的连接操作,它一般都是默认的连接类型。内连接基于连接谓词,将两张表(假如有A表和B表)的列组合在一起,产生新的结果表。内连接查询会将A表的每一行和B表的每一行进行比较, 并找出满足连接谓词的组合。当连接谓词被满足,A表和B表中匹配的行会按列组合( 并排组合)成结果集中的一行。

join 表1 on 表.列名 = 表1.列名 

select * from Employee  join CityList on Employee.CityID= CityList.CityID

* 展示两表内所有列

如果同时关联多个表进行查询, join X on  以此类推

使用内连接获取客户“王传华”所有的订单信息和客户信息

使用内连接获取客户“王传华”下单日期在2017年4月之后的订单信息,要求显示客户姓名、下单日期。

查询之前数据: 

查询之后:

select c.CustomerName,o.OrderDate from Customer c join orders o on c.CustomerID=o.CustomerID where c.CustomerName='王传华'and o.OrderDate>='2018-04-01'

 多表连接

select * from OrdersDetail od join Goods g on od.GoodsID=g.GoodsID join Orders o  on od.OrdersID=o.OrdersID join Customer c on o.CustomerID=c.CustomerID

2、表别名

表名 备注名  ,使用时,直接取 表别名.列名  Employee e  -> e.列名

下面代码中黑体部分是表别名: 

select * from OrdersDetail od join Goods g on od.GoodsID=g.GoodsID join Orders o  on od.OrdersID=o.OrdersID join Customer c on o.CustomerID=c.CustomerID

3、左外连接

外连接查询概念

        表之间的联系依赖于主键和外键,同样连接查询的连接列一般也是由外键担当。连接查询默认为内连接查询,如果希望不满足连接条件的记录也在查询结果中出现,这时就需要使用外连接。     

左外连接的结果集包括左表的所有记录和右表中满足连接条件的记录,结果集中那些不符合连接条件的来源于右表的列值为Null   

left join 表名1 on 表名.列名 = 表名1.列名
左侧表数据会全部进行展示 
select e.Name , c.CityName from Employee e  left join CityList c on e.CityID= c.CityID  

统计每件商品的销售数量和销售金额,要求按照销售量和销售金额升序显示商品名、销售量和销售金额

select GoodsName 商品名,sum(Quantity)销售量 ,sum(Quantity*g.UnitPrice)销售金额 from OrdersDetail od join Goods g on od.GoodsID=g.GoodsID group by g.GoodsName order by 销售量,销售金额 

 查询之后:

计算每个订单的金额,要求按照订单下单日期升序、订单金额降序显示订单ID、订单下单日期、订单日期和顾客姓名

select o.OrdersID,o.OrderDate,o.Amount,c.CustomerName from Orders o join Customer c on o.CustomerID=c.CustomerID order by o.OrderDate,o.Amount desc

4、右外连接

右外连接跟左外连接一个道理同左外连接一样

right join 表名1 on 表名.列名 = 表名1.列名
右侧表数据会全部进行展示 
select e.Name , c.CityName from Employee e  right join CityList c on e.CityID= c.CityID 

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

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

相关文章

关于debug一晚上的一些思考,做开发到底要养成什么习惯?

总结:日志一定要写,日志一定要写,日志一定要写! 今天晚上是我学开发过程中很不一样的一晚,今晚学到了很多。 虽然我也只是一个开发的初学小白,今天的debug分享是我的一个小方法和一个小记录,如…

第四章——数学知识2

欧拉函数 欧拉函数表示的是1-n中与n互质数的个数。 如1-6中:1,5都和6互质,因此互质数为2 欧拉函数分解质因数后表示为: 互质数个数可表示为 int main() {int n;cin >> n;while(n--){int a;cin >> a;//分解质因数int r…

TypeScript自学笔记

目录 1.什么是Ts? 1.1 设计公司:微软 1.2 TS概述 1.3 TS是静态类型 JS是动态类型 1.4 TS是强类型语言 JS是弱类型语言 2.TypeScript编译器 2.1 安装 2.2 TS自动编译和编译选项设置 3.TS的数据类型 3.1 基础数据类型number、string、boolean 3.2 Arrays&a…

大数据架构(二)大数据发展史

1.传统数仓发展史 传统数据仓库的发展史这里不展开架构细讲,只需快速过一遍即可。了解这个历史发展过程即可。 1.1 传统数仓历史 1.1.1 5个时代 传统数仓发展史可以称为5个时代的经典论证战。按照两位数据仓库大师 Ralph kilmball、Bill Innmon 在数据仓库建设理念上…

吃透Redis面试八股文

Redis连环40问,绝对够全! Redis是什么? Redis(Remote Dictionary Server)是一个使用 C 语言编写的,高性能非关系型的键值对数据库。与传统数据库不同的是,Redis 的数据是存在内存中的&#xf…

Python Review 01

1、Anaconda Installation 使用Anaconda Navigator进行python环境管理,使用conda进行依赖管理。 2、Use of Jupyter 将代码写入一个个cell,代码文件由一个个cell组成,书写代码时就像一行一行在写笔记,这就是notebook的代码编辑环…

无宿主机权限情况下,获取pod的日志文件

如果没有宿主机权限,是无法访问宿主机及里边的文件的,但是如果想获取某些文件,如日志等如何操作呢? 整体思路:通过抓包工具,抓取websocket的的信息,然后把信息处理拼接后导出即可。 1、启动抓包工具 我这里使用的是charles抓包工具 2、打开对应pod的命令行窗口 3、抓…

基于灰度图像和小波图的双模态卷积神经网络在心血管疾病分类中的应用

目录 一、研究对象和ECG记录预处理 二、机器学习和LSTM 三、将一维ECG记录转换为二维图像 四、双模态CNN模型 五、性能评估 参考文献 一、研究对象和ECG记录预处理 本研究采用Chapman大学和Shaoxing人民医院(浙江大学医学院绍兴医院)收集的12导联…

领导力专题︱如何培养与提升领导力

本文内容结构 一、领导力的核心技能 1、完美领导者? 2、认识你的组织需要什么 3、不同层面领导力共有的特征和技能 4、你的个人行为准则 5、领导风格 6、创造个人影响力 7、完善自己的领导网络 二、领导力与领导者 1、领导力与组织环境 2、领导者还是管理…

2023/4/23总结

项目: 做出了个人信息界面,通过点击头像的方式: 然后就是点击头像可以选择文件(后面考虑是存储该文件到自己的文件夹还是只是加载该文件比较好)只是能选择文件,写了指定文件后缀名的代码但是好像没什么用…

如何将Edge插件迁移至Google?

问题描述: 因为无法访问谷歌,无法从谷歌插件市场下载插件 第一步:在电脑上找到插件地址 高亮部分:自己电脑上的用户名【不同用户可能会有所不同】 C:\Users\star-dream\AppData\Local\Microsoft\Edge\User Data\Default\Extensi…

rust的现状和未来发展

rust现状: Stack Overflow 的开发者调研显示只有 7% 的开发者在使用 Rust,对比 JavaScript、Python 等语言,使用 Rust 的开发者占比并不高;但从 2016 年开始,Rust 每年都是开发者最爱的编程语言。 根据 JetBrains 2021 年的调研报…

SSH远程访问及控制

文章目录 1.SSH远程管理1.1 SSH的概述1.2 OpenSSH服务器1.3 sshd_ config常用选项设置1.4 SSH端口、配置文件 2.配置OpenSSH服务端2.1 更改端口号2.2 用户登录控制 3.登录验证方式3.1 密码验证3.2 密钥对验证3.3 配置密钥对验证 5.TCP Wrappers访问控制5.1 TCPWrappers机制的基…

第37讲:Python if-elif-else流程控制语句核心概念以及案例演示

文章目录 1.流程控制的概念2.Python中代码块的相关注意事项3.if流程控制语句的语法格式4.if流程控制的简单使用4.1.单分支的if流程控制语句4.2.加else语句的if流程控制4.3.多分支的if流程控制4.4.多分支if代码优化 5.对象的布尔值6.if-else条件表达式6.1.if-else条件表达式语法…

String的那些事儿

String作为我们最常用的Java类之一,在日常开发过程中充当着重要角色?那么大家真的了解String吗?让我们一起看看下面的问题: String内存结构?对象存储在堆上还是栈上?一个String有多长?占内存多…

享元设计模式解读

目录 问题引进 展示网站项目需求 传统方案解决网站展现项目 传统方案解决网站展现项目-问题分析 享元模式基本介绍 基本介绍 享元模式的原理类图 对类图的说明 内部状态和外部状态 享元模式解决网站展现项目 应用实例要求 思路分析和图解(类图) 代码实现 享元模式…

创建一个 vue 3 项目

vue create projectNameVue CLI v5.0.8 ? Please pick a preset: ❯ Default ([Vue 3] babel, eslint)Default ([Vue 2] babel, eslint)Manually select featuresbabel : ES2015 and beyond。Babel 默认使用一组 ES2015 语法转换器,允许你使用新的语法&#xff0c…

vue2数据响应式原理(6) 处理数组特殊遍历

打开一直在写的案例 然后 找到src下的 dataResp.js 这里 我们Observer中 数数组和对象还是要分开处理 因为他们还是有所不同 我们修改 Observer 类代码如下 class Observer{constructor(value) {//相当于 给拿到的对象 其中的__ob__绑定 值为thsi,在类中用this 表示取实例本…

数据结构入门(C语言版)一篇文章教会你手撕八大排序

八大排序 排序的概念常见的排序算法排序算法的实现一、直接插入排序二、希尔排序三、选择排序四、堆排序五、冒泡排序六、快速排序1.递归写法①三位取中函数②hoare版本③挖坑法④前后指针版本⑥快排主函数 2.非递归写法 七、归并排序1.递归写法2.非递归写法 八、非比较排序1.基…

倾斜摄影三维模型顶层合并技术及其实现方法

倾斜摄影三维模型顶层合并技术及其实现方法 倾斜摄影三维模型由于数据量大、结构复杂,常常需要进行顶层合并,以便更好地应用到城市规划、土地管理和文化遗产保护等领域。本文将介绍倾斜摄影三维模型顶层合并技术及其实现方法。 1、什么是顶层合并 倾斜…