mysql学习教程,从入门到精通,SQL 删除表(DROP TABLE 语句)(21)

1、SQL 联表查询(Join)

在编写SQL联表查询(Join)时,我们首先要明确查询的目的,即我们需要从哪些表中提取数据,以及这些表之间如何关联。以下是一个简单的示例,假设我们有两个表:employees(员工表)和departments(部门表)。我们的目标是查询出每个员工的姓名、部门ID以及他们所属的部门名称。

1.1、表结构

employees 表

  • employee_id INT:员工ID
  • name VARCHAR:员工姓名
  • department_id INT:部门ID
    departments 表
  • department_id INT:部门ID
  • department_name VARCHAR:部门名称

1.2、SQL 联表查询

为了实现我们的目标,我们可以使用 INNER JOIN(内连接),因为它会返回两个表中匹配的记录。如果员工所属的部门在 departments 表中存在,则该员工的信息及其部门名称将被返回。

SELECT  e.name AS employee_name,  e.department_id,  d.department_name  
FROM  employees e  
INNER JOIN departments d ON e.department_id = d.department_id;

1.3、解释

  1. SELECT 语句:我们选择了 employees 表中的 name 列(重命名为 employee_name),department_id 列,以及 departments 表中的 department_name 列。
  2. FROM 语句:指定了查询的起始表为 employees,并且我们为这个表设置了一个别名 e,以便在后续的查询中简化引用。
  3. INNER JOIN 语句:通过 INNER JOIN 语句将 employees 表与 departments 表连接起来。连接条件是 e.department_id = d.department_id,即 employees 表中的 department_id 列的值必须等于 departments 表中的 department_id 列的值。同样,我们也为 departments 表设置了一个别名 d
  4. ON 子句:指定了 JOIN 的条件,即如何连接这两个表。在这个例子中,条件是员工所属的部门ID与部门表中的部门ID相匹配。
    通过这种方式,我们可以得到每个员工及其所属部门的名称,结果集将只包含那些在 departments 表中有对应部门ID的 employees 表中的记录。如果你想要包括那些在 departments 表中没有对应部门ID的 employees 表中的记录(例如,那些尚未分配部门的员工),你可以使用 LEFT JOIN 替代 INNER JOIN。
    当然可以,以下是一些具体的SQL联表查询(Join)案例,这些案例将展示不同类型的JOIN操作(如INNER JOIN、LEFT JOIN、RIGHT JOIN等)在实际应用中的使用。

1.4、案例一:INNER JOIN(内连接)

场景:查询所有已分配部门的员工及其部门名称。
表结构

  • employees 表:包含员工ID、员工姓名和部门ID。
  • departments 表:包含部门ID和部门名称。
    SQL查询
SELECT  e.employee_id,  e.name AS employee_name,  d.department_name  
FROM  employees e  
INNER JOIN departments d ON e.department_id = d.department_id;

结果:返回所有在 departments 表中有对应部门ID的 employees 表中的记录,包括员工ID、员工姓名和部门名称。

1.5、案例二:LEFT JOIN(左连接)

场景:查询所有员工及其部门名称,包括那些尚未分配部门的员工。

SQL查询

SELECT  e.employee_id,  e.name AS employee_name,  d.department_name  
FROM  employees e  
LEFT JOIN departments d ON e.department_id = d.department_id;

结果:返回 employees 表中的所有记录,对于在 departments 表中没有对应部门ID的员工,其部门名称将显示为NULL。

1.6、案例三:RIGHT JOIN(右连接)

注意:在实际应用中,RIGHT JOIN 较少使用,因为可以通过交换表的位置和使用LEFT JOIN来达到相同的效果。但为了完整性,这里还是给出一个例子。
场景:查询所有部门及其对应的员工姓名(如果有的话)。
SQL查询

SELECT  d.department_id,  d.department_name,  e.name AS employee_name  
FROM  departments d  
RIGHT JOIN employees e ON d.department_id = e.department_id;

结果:返回 departments 表中的所有记录,对于在 employees 表中没有对应员工的部门,其员工姓名将显示为NULL。但请注意,这个查询在逻辑上与将 employeesdepartments 表的位置互换并使用LEFT JOIN是等效的。

1.7、案例四:FULL JOIN(全连接)

注意:并非所有数据库系统都支持FULL JOIN,但可以通过UNION操作结合LEFT JOIN和RIGHT JOIN来模拟。
场景:查询所有员工及其部门名称,包括那些尚未分配部门的员工和那些没有员工的部门。
模拟FULL JOIN的SQL查询

SELECT  e.employee_id,  e.name AS employee_name,  d.department_name  
FROM  employees e  
LEFT JOIN departments d ON e.department_id = d.department_id  
UNION  
SELECT  e.employee_id,  e.name AS employee_name,  d.department_name  
FROM  employees e  
RIGHT JOIN departments d ON e.department_id = d.department_id  
WHERE e.employee_id IS NULL; -- 排除LEFT JOIN中已经包含的记录

但请注意,上面的查询实际上并不完全正确,因为它会尝试从RIGHT JOIN中选择NULL的 employee_id,这在大多数情况下并不是我们想要的。一个更准确的模拟FULL JOIN的方法是分别执行LEFT JOIN和RIGHT JOIN,并确保RIGHT JOIN部分只选择那些在LEFT JOIN中未出现的记录(这通常涉及到子查询或临时表)。然而,为了简洁起见,这里不展示完整的模拟过程。
在实际应用中,如果数据库支持FULL JOIN,可以直接使用它,如下所示:

SELECT  e.employee_id,  e.name AS employee_name,  d.department_name  
FROM  employees e  
FULL JOIN departments d ON e.department_id = d.department_id;

这将返回两个表中的所有记录,对于不匹配的记录,相应的字段将显示为NULL。

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

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

相关文章

软考(中级-软件设计师)计算机系统篇(0921)

六、计算机系统组成(五大部件) (冯.诺依曼) 冯.诺依曼计算机的特点: 计算机有五大部件组成:输入设别,输出设备,控制器,运算器,存储器;指令和疏忽都以同等地位存于存储器…

为什么年轻人都热衷找搭子,而不是找对象?

在繁华的都市中,有一个名叫晓悦的年轻人。晓悦每天穿梭于忙碌的工作和快节奏的生活之间,渐渐地,她发现身边的朋友们都开始找起了 “搭子”。 有一天,晓悦结束了一天疲惫的工作,坐在咖啡店里,看着窗外匆匆而…

为写论文头疼?推荐4款ai写毕业论文初稿的软件

写论文对于许多学生来说是一项既重要又具挑战性的任务。为了帮助大家更高效地完成这一过程,我将推荐四款优秀的AI写毕业论文初稿的软件,并详细介绍它们的功能和优势。 传送门:https://www.aipaperpass.com?piclLGw 千笔-AIPassPaper是一款功…

面向对象例题之例题的特性

答案:C 解析:对象里面的方法和属性数量是不确定的,可以不断扩展写多个属性和方法 清洗的边界是对象必备的,哪些是这个类的,哪些是其他类的都有体现。 良好的定义行为一般指定义良好的属性和方法 可扩展性指的是子类…

【问题随记】在使用 AuthenticationManager 的时候,出现循环依赖问题 —— `java.lang.StackOverflowError`

问题随记 在使用 AuthenticationManager 的时候,出现循环依赖问题 —— java.lang.StackOverflowError,查资料查了两天半,终于找到原因。 2024-06-16T17:54:19.48708:00 ERROR 20672 --- [nio-8789-exec-1] o.a.c.c.C.[.[.[/].[dispatcherS…

波分技术基础 -- FEC

信号在传输过程中,不可避免的会出现劣化、误码,FEC (Forward error correction) 技术确保通信系统在噪声和其他损伤的影响下,依然能够实现无错误传输。 应用场景:长途密集波分系统(DWDM)实现方式&#xff…

LED显示屏迎来革新:GOB封装技术引领行业新风尚

在我们日常生活中,LED显示屏无处不在,从繁华的街头广告牌到家庭娱乐中心的大屏幕电视,它们都以鲜明的色彩和清晰的画质吸引着我们的目光。然而,在LED显示屏技术日新月异的今天,一种名为GOB(Glue On Board&a…

python:给1个整数,你怎么判断是否等于2的幂次方?

最近在csdn上刷到一个比较简单的题目,题目要求不使用循环和递归来实现检查1个整数是否等于2的幂次方,题目如下: 题目的答案如下: def isPowerofTwo(n):z bin(n)[2:]print(bin(n))if z[0] ! 1:return Falsefor i in z[1:]:if i !…

华为全联接大会HUAWEI Connect 2024印象(二):昇腾AI端侧推理

此次参加HUAWEI Connect 2024最主要目标是了解昇腾AI端侧推理技术,希望将其融合到我现在嵌入式系统课程中,不过刚开始在一楼找到一个小展台,看到了香橙派Orange Pi。香橙派是深圳迅龙的一个品牌,他们和很多芯片厂商都合作过&#…

IPsec-VPN中文解释

网络括谱图 IPSec-VPN 配置思路 1 配置IP地址 FWA:IP地址的配置 [FW1000-A]interface GigabitEthernet 1/0/0 [FW1000-A-GigabitEthernet1/0/0]ip address 10.1.1.1 24 //配置IP地址 [FW1000-A]interface GigabitEthernet 1/0/2 [FW1000-A-GigabitEthernet1/0/2]ip a…

计算机毕业设计 基于Python的美术馆预约系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

【笔记】第三节 组织与性能

3.1 基本成分 3.2 微观组织特征 0.6-0.8C%碳素钢的组织为珠光体和少量的铁素体。 如何把组织和性能联系起来?德国克虏伯公司的研究——珠光体片间距与渗碳体片层厚度成比例: t s 0 ( ρ 15 ( C % ) − 1 ) ts_0(\frac{\rho}{15(C\%)}-1) ts0​(15(C%)…

【Web】PolarCTF2024秋季个人挑战赛wp

EZ_Host 一眼丁真命令注入 payload: ?host127.0.0.1;catf* 序列一下 exp: <?phpclass Polar{public $lt;public $b; } $pnew Polar(); $p->lt"system"; $p->b"tac /f*"; echo serialize($p);payload: xO:5:"Polar":2:{s:2:"…

我的AI工具箱Tauri版-VideoDuplication视频素材去重

本教程基于自研的AI工具箱Tauri版进行VideoDuplication视频素材去重。 该项目是基于自研的AI工具箱Tauri版的视频素材去重工具&#xff0c;用于高效地处理和去除重复视频内容。用户可以通过搜索关键词"去重"或通过路径导航到"Python音频技术/视频tools"模…

MySQL高阶1907-按分类统计薪水

目录 题目 准备数据 分析数据 总结 题目 结果表 必须 包含所有三个类别。 如果某个类别中没有帐户&#xff0c;则报告 0 。 按 任意顺序 返回结果表。 查询每个工资类别的银行账户数量。 工资类别如下&#xff1a; "Low Salary"&#xff1a;所有工资 严格低于…

MQ入门(4)

Erlang&#xff1a;面向高并发的 单机的吞吐量就是并发性&#xff1a;Rabbitmq是10w左右&#xff08;现实项目中已经足够用了&#xff09;&#xff0c;RocketMQ是10w到20w&#xff0c;Kafka是100w左右。 公司里的并发&#xff08;QPS&#xff09; 大部分的公司每天的QPS大概…

自动化测试框架设计详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、引言 随着IT技术的快速发展&#xff0c;软件开发变得越来越快速和复杂化。在这种背景下&#xff0c;传统的手工测试方式已经无法满足测试需求&#xff0c;而自…

【RabbitMQ】⾼级特性

RabbitMQ ⾼级特性 1. 消息确认1.1 消息确认机制1.2 代码示例 2. 持久化2.1 交换机持久化2.2 队列持久化2.3 消息持久化 3. 发送⽅确认3.1 confirm确认模式3.2 return退回模式3.3 问题: 如何保证RabbitMQ消息的可靠传输? 4. 重试机制5. TTL5.1 设置消息的TTL5.2 设置队列的TTL…

C++——模拟实现string

1.再谈string string为什么要被设计成模板&#xff1f;日常使用string好像都是char*&#xff0c;char*不够使用吗&#xff0c;为什么要设计成模板呢&#xff1f; 1.1 关于编码 //计算机的存储如何区分呢&#xff1f;int main() {//比如在C语言中&#xff0c;有整型//如果是有…

msvcp140.dll0丢失的解决方法,总结6种靠谱的解决方法

再使用计算机的过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcp140.dll丢失”。这个问题可能会影响到我们的正常使用&#xff0c;因此需要及时解决。经过一段时间的学习和实践&#xff0c;我总结了以下六种靠谱的解决方法&#xff0c;希望对大家…