数据库连表查询

多个字段关联同一张字典表-查询SQL SELECT a.id, a.company_id, d.company_name, a.type, b.dictdata_value, a.`name`, a.url, a.`status`, c.dictdata_value FROM project_url a LEFT JOIN dictionary b ON a.type = b.dict_value AND ... 阅读详情

本文转载自:http://www.cnblogs.com/devilmsg/archive/2009/03/24/1420543.html
学习数据库查询的时候对多表连接查询的有些概念还比较模糊。而连接查询是在数据库查询操作的时候肯定要用到的。对于此概念
我用通俗一些的语言和例子来进行讲解。这个例子是我讲课的时候经常采用的例子。
首先我们做两张表:员工信息表和部门信息表,在此,表的建立只为讲述连接的概念,所以字段非常的简单
EmployeeTB(员工信息表):

employeeid employeename deptid
0001 张三 01
0002 李四 01
0003 王五 02
0004 赵六 02
0005 郑七 NULL

DeptTB(部门信息表)
deptid deptname
01 技术部
02 市场部
03 工程部

我们现在需要进行连接查询,连接两张表检索数据。分别检索员工信息表的员工编号、员工姓名和部门信息表中的部门名称。
显然,两个表的连接条件是 员工表的部门编号=部门表的部门编号
注意:郑七不属于任何部门(新来的员工,还没有分配到任何的部门),而工程部不存在任何的员工(比如是一个新成立的部门,还没有员工)
1、内连接查询
我们可以有两种方式,这两种是等效的
一种是:SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e,DeptTB AS d WHERE e.deptid=d.deptid
另外一个是:SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e INNER JOIN DeptTB AS d ON e.deptid=d.deptid
检索的结果都是:

employeeid employeename deptname
0001 张三 技术部
0002 李四 技术部
0003 王五 市场部
0004 赵六 市场部

而“郑七”和“工程部”的信息是不会检索出来。因为采用内连接计算的时候必须要保证连接的条件e.deptid=d.deptid匹配,结果才会被检索出来。当我们连接两张检索数据的时候,检索的方式是首先逐行扫描“员工信息表”中的记录,然后根据连接条件来决定此记录是否被检索。比如对于张三,这条记录的deptid是01(部门编号),它在部门表中能找到和它匹配的编号01,而编号01的部门名称(deptname)是“技术部”所以张三这条记录会被检索,最终的结果肯定是:

0001 张三 技术部

同样,李四、王五、赵六也能。但是郑七的部门编号是NULL,它在部门信息表中找不到匹配的项(因为部门信息表中不存在部门编号为NULL的部门),所以郑七不会被检索。
同理,没有任何人员的部门编号为03,所以工程部的记录也不会被检索

2、左外联结
但是有些情况下,我们需要知道所有员工的信息,即使他不属于任何部门。这样我们就可以采用外连接,在这里为左外连接,也就是连接中的左表的表中的记录,无论能不能在右表中找到匹配的项,都要检索,如果没有匹配的项目,那么右表中的字段值为NULL(空),在这里就代表,此员工不属于任何部门。
检索语句为:
SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e LEFT OUTER JOIN DeptTB AS d ON e.deptid=d.deptid
检索的结果都是:

employeeid employeename deptname
0001 张三 技术部
0002 李四 技术部
0003 王五 市场部
0004 赵六 市场部
0005 郑七 NULL

但是在这里,工程部同样不会被检索,因为,deptname是在连接的右边的表中,“工程部”在左表中不存在任何的记录,所以不会被检索。这里关注的是“连接中的左边的表”

3、右外连接
有时,我们需要知道,全部部门的信息,即使它没有任何的员工。在我们的查询中部门表在连接的右边,如果我们想知道右边表中的所有记录信息,那么就可以采用右外连接,如果此记录在左边的表中找不到匹配项,则相应字段(employeeid,employeename)为NULL
检索语句为:
SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e RIGHT OUTER JOIN DeptTB AS d ON e.deptid=d.deptid
检索的结果都是:

employeeid employeename deptname
0001 张三 技术部
0002 李四 技术部
0003 王五 市场部
0004 赵六 市场部
NULL NULL 工程部

但在这里,郑七是不会被检索了,因为它在右表中找不到匹配项,这里关注的是“连接中的右边的表”

4、完全外连接
如果我们想知道所有的记录呢?无论员工有没有部门,部门有没有员工,我们都需要检索。这里就可以使用完全外连接。关注连接中的两部分。如果没有部门,部门为空,没有员工,员工信息为空。
检索语句为:
SELECT e.employeeid,e.employeename,d.deptname FROM EmployeeTB AS e FULL OUTER JOIN DeptTB AS d ON e.deptid=d.deptid
检索的结果都是:

employeeid employeename deptname
0001 张三 技术部
0002 李四 技术部
0003 王五 市场部
0004 赵六 市场部
0005 郑七 NULL
NULL NULL 工程部

数据库多表连接 字典表连接 当数据库信息表中有很多字段是以字典表编号的形式存储,可以考虑用这个方法,比如: select a.asset_id,c.context_info as asset_type,d.context_info as asset_name,asset_brand,e.context_info as department_id,buy_price,f.context_info as asset_status... 阅读详情

相关推荐

SAP ABAP 学习总结(12):Database table Select(数据库表查询)

命名规则 命名规则: *全局变量:gv_demo *全局结构体:gs_demo *全局内表:gt_demo *全局常量:gc_demo *局部变量:lv_demo *局部结构体:ls_demo *局部内表:lt_demo *局部变量:lc_demo SELECT 从数据库表中查询数据(单行) *实例化一个数据库表 DATA:gs_demo TYPE zcurry_table_2.“一般不推...

weixin_42959207的博客 1532

数据库多表连接查询

学习数据库查询的时候对多表连接查询的有些概念还比较模糊。而连接查询是在数据库查询操作的时候肯定要用到的。对于此概念 我用通俗一些的语言和例子来进行讲解。这个例子是我讲课的时候经常采用的例子。 首先我们做两张表:员工信息表和部门信息表,在此,表的建立只为讲述连接的概念,所以字段非常的简单 EmployeeTB(员工信息表): employeeid employeename deptid ...

卡布其诺 491

如何使用ArcGIS自动矢量化建筑

在显示的重分类对话框内,输入栅格选择提取单波段后的栅格,重分类分为三个层级,旧值分别为100-249、250-251和252-255,对应新值为1、2和3,旧值的最小和最大值不用修改,保持和原有的一致。同样在ArcToolbox内点击Spatial Analyst工具点击“重分类\重分类”,在重分类对话框内输入栅格选择之前重分类过后的图片,将旧值3的新值设置为1,这样分类后就只有两类。在显示的新建Shapefile对话框内,名称命名为折线,要素类型选择折线,点击编辑,设置坐标系为WGS 1984。

2165

被忽视的数据字典

# 一、写在前 笔者认为借用关系型数据库的数据字典,可以做不少有意思的事情,解决一些工作中遇到的问题,做一些半自动化、自动化的工作时可以使用到它们。笔者也认为大多数人并未重视过它们,或者深挖过它们的一些好处。 # 二、数据字典的一些概念 这段比较乏味,解释一些概念,主要还是拷贝自百度百科。 > 数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑等进行定义和描述,其目的是对数据流程图中的各个元素做出详细的说明,使用数据字典为简单的建模项目。简而言之,数据字典是描述数据的信息集合,是对系统中

你不是一个人在战斗~~ 339

别再死磕MuJoCo了!用PyBullet+Stable-Baselines3搞定机械臂强化学习(保姆级环境配置)

本文详细介绍了如何使用PyBullet和Stable-Baselines3构建机械臂强化学习系统,绕过昂贵的MuJoCo许可壁垒。通过实战指南,包括环境配置、机械臂Gym环境构建、训练策略与调优技巧,帮助开发者快速掌握机器人强化学习技术,提升智能控制效率。

weixin_42667269的博客 265

GCdepth散点图绘制

基因组组装完成后,需要对组装结果进行评估,其中GC_depth图是一个比较重要的指标,改图的横坐标是GC含量,纵坐标是平均深度。以30k为窗口(window)无overlap计算其GC含量和平均深度。如果存在样品污染,通常能够从GC含量分析中呈现出来。下文探索了几种绘制GC_depth散点图的方法思路。

huangliangbo的专栏 8993

【SQL Join】两个字段关联到同一个表,如何使用left join

Join 有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join。 下面列出了您可以使用的 JOIN 类型,以及它们之间的差异。 JOIN: 如果表中有至少一个匹配,则返回行 LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行 RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行 FULL JOIN: 只要其中一个表中存在匹配,就返回行 ...

寒泉 4万+

通过Jlink和PyLink读取蓝牙mac地址--Nordic&silicon labs

本文介绍在不开机的情况下读取蓝牙的mac地址,这里介绍两个平台,Nordic和Silicon Labs。 1. 通过Jlink Commander工具连接上目标板 选择当前芯片的型号 2. 使用mem命令查看mac地址 首先需要知道mac地址存储在芯片的哪个地址。 Nordic: 寄存器DEVICEADDRTYPE的第一个bit代表mac地址的类型,这里为1。DEVICEADDR[0]和DEVICEADDR[1]的低16bit代表了MAC地址,其中DEVICEADDR[1]的第15位应该或上DE

ching的专栏 1650

查询.db(SQLite数据库文件)中所有表

//查询.db库中所有的表用以下的sql语句 string tablenames = "select name from sqlite_master where type='table' order by name;"; try { System.Data.DataSet ds = DBUtil

CLeopard's Blog In 优快云 4842

Android开发中StateFlow与LiveData的5个关键区别及实战避坑指南

本文深度解析了Android开发中StateFlow与LiveData的5个核心区别,包括设计哲学、生命周期管理、值更新策略、线程模型及协程生态整合。通过实战代码对比,为开发者在现代MVVM架构下的状态管理选型提供清晰的决策指南和避坑建议,帮助构建更健壮、可测试的应用。

weixin_29012677的博客 403

BLDC六步换相驱动实战:从霍尔真值表到PWM调速的代码实现

本文详细解析了BLDC六步换相驱动原理,从霍尔真值表解读到PWM调速的代码实现,提供了基于STM32的实战方案。重点介绍了霍尔信号解码、换相状态机设计以及PWM动态调速策略,帮助开发者快速掌握无刷电机驱动技术。

weixin_28273593的博客 211

解决达梦数据库表名查询难题:Chat2DB实战指南

在使用Chat2DB连接达梦数据库时,许多用户遇到表名无法正常查询的问题,导致无法高效管理数据库表结构。本文将深入分析这一问题的根源,并提供详细的解决方案,帮助用户快速恢复表名查询功能。 ## 问题现象 当用户通过Chat2DB连接达梦数据库后,在左侧导航树或查询界面执行表名检索时,出现以下情况: - 表列表为空或显示不完整 - 执行`SHOW TABLES`命令无返回结果 - 控制台报"表名...

gitblog_00125的博客 367

Linux 内核参数:meminfo

内存管理是一个相对复杂的内核模块,错综复杂的数据结构和管理逻辑。Linux 内核为了帮助开发者从宏观上把握内存的使用情况,在几大核心数据结构中都有相应的计数统计,如物理页面使用情况、伙伴系统分配情况、内存管理区的页面使用情况、内存回收扫描回收情况、内存规整触发情况等等。本文要分析的节点meminfo是Linux 操作系统中查看系统内存最准确(meminfo 中有内存黑洞)的方法,它包含当前时刻系统的所有物理页面的信息。

私房菜 2414

Chat2DB连接达梦数据库时表查询异常问题分析

在使用Chat2DB 3.1.17版本连接达梦数据库(DM)时,用户发现部分schema下的表无法正常查看。具体表现为: - 在DataGrip中可以正常查看B schema下的表数据 - 但在Chat2DB中尝试查看时,系统报错"无效的表或视图名" ## 错误原因分析 经过深入排查,发现该问题的根本原因是Chat2DB在构建查询SQL时存在缺陷: 1. **schema缺失问题**:Cha...

gitblog_00832的博客 355

【SpringBoot 3.x 第56节】再见 Feign?原生 HTTP 接口强势上位,这才是微服务调用的正确姿势!

🏆本文收录于《滚雪球学SpringBoot 3》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。    本专栏致力打造最硬核 SpringBoot3 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot3教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。    若还想学习更多,可直接前往《滚雪球学SpringBoot(全版本合集)》,涵盖SpringBoot所有版本教学文章

**My Coding Family** 1017

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Oracle数据库 查询所有表

1. 查询当前数据库下的所有表 select * from all_tables where owner = 'TEST'; 注:all_tables查出来是查得所有用户下的表,当然也包括你登录的用下的表,然后加一个where你要查的那个用户名就可以了。(记得用户名要大写) 2. 查询当前数据库下某个实例数据库的所有表 select * from all_tables where owner = 'TEST' and table_name = '表名'; 注:当然也包括你登录的用下的表,然

dream317 5万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

数据库中的多表查询总结

数据库在单个表里操作其实很简答,但是涉及在多张表里寻找数据的时候,难度会大大增加,这里解释一些多表联合查询常用的操作。 一、join操作 在数据库的查询中,多表连接查询是一大难点,也是多表查询里的重点。连接主要有以下四种情况: INNER JOIN(内连接):如果表中有至少一个匹配,则返回行 【在语法中可以省略INNER关键字】 LEFT JOIN(左连接):从左表返回所有的行,如果右表中...

u013044310的博客 7万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

查询数据库各个表的数据大小及数据量

***begin查询数据库各个表里的数据行数 selectb.name,a.row_countfromsys.dm_db_partition_statsa, sys.objectsb wherea.object_id=b.object_id anda.index_id<=1 andb.type='U'ORDERBYrow_count **...

飞火龙在天的博客 3万+

终极指南:解决Chat2DB中DM数据库表查询失败的Schema缺失问题

Chat2DB是一款功能强大的数据库管理工具,支持多种数据库,提供RESTful API,能轻松将聊天消息存储到数据库。但在使用DM数据库时,用户常遇到表查询失败的Schema缺失问题。本文将详细介绍如何解决这一问题,让你快速恢复数据库操作。 ## 一、了解Schema缺失问题 Schema是数据库中的逻辑结构,用于组织和管理数据库对象。在DM数据库中,Schema缺失会导致表查询失败,无法正

gitblog_00392的博客 385

数据库--多表查询

文章目录数据库--多表查询5.2多表查询概述5.2.1 数据准备5.2.2 概述5.2.3 分类5.3 内连接1). 隐式内连接2). 显式内连接案例:5.4 外连接1). 左外连接2). 右外连接案例:5.5 自连接5.5.1 自连接查询案例:5.5.2 联合查询union查询案例:5.6 子查询5.6.1 概述1). 概念2). 分类5.6.2 标量子查询概述案例:5.6.3 列子查询概述案例:5.6.4 行子查询概述案例:5.6.5 表子查询概述案例:5.7 多表查询案例 数据库–多表查询 5.2多表

Android应用开发工程师 1万+

DB - 多表查询

多表查询一、基本概念二、多表查询分类1. 内连接查询2. 外连接查询3. 子查询子查询示例子查询的不同情况 一、基本概念 多表查询语法 SELECT 字段列表 FROM 表名列表 WHERE 约束条件 ; 笛卡尔积现象:有两个集合 A,B,取这两个集合的所有组成情况。MySQL的多表查询结果就是以笛卡尔积的结果形式返回,这样的结果通常伴随一些无效结果。要完成多表查询,需要采用相应的手段消除无效结果。 二、多表查询分类 案例:结合对以下数据表的查询语句理解多表查询 # 创建部门表 CREATETABL

xing123456jl的博客 2098

【DB】查询数据库表所占空间大小

【DB】查询数据库表所占空间大小。

我是Superman丶的博客 592

查询DB中的那些表没有索引

查询DB中具体schema下没有索引的表

m0_52387852的博客 299

Oracle 数据库查询:多表查询

想把分散在多个表里的数据拼起来看?核心就靠JOIN(连接)和子查询。可以用INNER JOIN找到两边都匹配的记录,或用OUTER JOIN查看单边也存在的数据。一个非常强大的技巧,是把一个查询结果当成临时表来用,能让复杂的统计分析变得清晰。再结合新版本里简洁的分页语法,跨表取数和展示就得心应手了。

专注于 Agent 工程、AI 产品、Harness Engineering、LLM 算法等方向,OpenMathModel、Nivik 等开源项目作者 7万+

php如何查询数据库的表,php如何查询mysql表名字,php查询数据库并输出

php如何查询mysql表名字PHP如何查询mysql表名字,php查询mysql表名字的方法:首先连接服务器,代码为【模具(‘连接失败:英尺.mysql.】;然后选择数据库,代码为【while($ row=MySQL _ fetch _ array($ result))】。推荐(免费):php mysqlphp查询mysql表名字的方法:meta http-equiv=’ Content...

weixin_33252868的博客 323

数据库单表查询和多表查询练习

数据库单表查询和多表查询练习

yangzhi_emo的博客 805
上一篇: virtualbox中Linux系统中安装Nginx
下一篇: centos中安装fastdfs
shi-Yjanuary
博客等级 码龄10年 4粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值