为什么要使用联结?

我们在设计数据库表的时候,往往会把数据分解为多个表,能够够有效的存储。但是,如果数据存储在多个表,怎么用单条select语句检索出数据呢?这是我们就可以使用联结。

一、创建联结

创建联结非常简单,只需要规定要联结的所有表以及它们如何关联即可。
示例:

select vend_name, prod_name, prod_price from vendors, products where vendors.vend_id = products.vend_id;

注意:在引用的列可能出现二义性时,必须使用完整的全限定列名(用一个句点分隔的表名和列名)。

二、笛卡尔积:

由没有联结条件的表关系返回的结果为笛卡尔积。检索出的行数将是第一个表中的行数乘于第二个表的行数。
所以,应该保证所有的联结都有where子句,否则DBMS将返回比想要的数据多得多的数据。

三、联结分类

1、内部联结

内部联结也加等值联结,它基于两个表之间的相等测试。
上面的示例也可以如下使用 INNER JOIN 表示,效果完全一样:

select vend_name, prod_name, prod_price from Vendors INNER JOIN Products ON vendors.vend_id = products.vend_id;
2、自联结

自联结是在同个表的联结,有时候我们会使用子查询来查询信息:

select from_date, thru_date from official_history where history_id = (select history_id from official_history where content_id = '13145test')

但是经常使用子查询对性能影响很大,所以我们可以使用自联结查询:

select c1.from_date, c1.thru_date from official_history as c1, official_history c2 where c1.history_id = c2.history_id and c2.content_id = '13145test'

将official-history表命名两个不同的别名,利用两个别名配合来实现查询

3、自然联结

自然联结排除多次出现,使每个列只返回一次,而且必须由我们自己完成这项任务,选择那些唯一的列。

select o.*, c.content_data from official_history as o, content as c where o.content_id = c.content_id and o.is_delete = 0

在上面的例子,我们手动设置查询offcial_history表的所有字段,且只查询content表的content_data字段

4、外部联结

许多联结将一个表中的行与另一个表中的行相关联,但有时候会需要包含没有关联行的那些行。
比如下面的示例中,只会查询到符合content.content_id = official_history.content_id条件的记录,不如两个表中有一个表没有对应的id,则不会匹配:

select official_history.content_id , history_id, content_datafrom official_history, content where content.content_id = official_history.content_id

但是我们有时候会需要查询一个表的所有行,不管联结的表中是否有对应的行相关联,这是我们就可以使用外部联结,示例:

select  history_id, official_history.content_id ,content_datafrom official_history left outer join content on content.content_id = official_history.content_id

这条select语句使了OUTER JOIN来指定联结的类型,在使用时必须使用RIGHT或LEFT关键字指定包括其所有行的表(RIGHT值指的是OUTER JOIN右边的表,LEFT是指其左边的表)。

使用联结时的性能考虑

DBMS在运行时关联指定的每个表以处理联结,这种处理可能是非常耗费资源的,因此应该仔细考虑,不要联结不必要的表。联结的表越多,性能下降地越厉害。

数据库联结使用及分类相关推荐

  1. php的数据模型包括,数据库中模型的分类有哪些

    数据库中模型的分类:1.概念数据模型,面向用户.面向现实世界的数据模型,描述一个单位的概念化结构:2.逻辑数据模型,可以通过实体和关系勾勒出企业的数据蓝图:3.物理数据模型,具有以实物或画图形式直观的 ...

  2. 『转』数据库的委托之类型分类处理

    『转』数据库的委托之类型分类处理 很久没研究数据库了,因为 XEIM 飞鸽传书 这个软件需要用到数据库,于是研究一下. 转载的,上网搜原创,我也不知道哪里来的. 一般数据库里区分类别可以直接存放字符, ...

  3. 数据库的介绍、分类、作用和特点

    1. 数据库的介绍 数据库就是存储和管理数据的仓库,数据按照一定的格式进行存储,用户可以对数据库中的数据进行增加.修改.删除.查询等操作. [在数据库中输错,按住"ctrl+c"重 ...

  4. 大数据数据库技术简介与分类分析

    说起大数据生态,不得不提大数据生态系统图,而大数据行业却不断的发生着巨变,目前的这张图应该还算比较新了. 创业者们蜂拥至这个行业,这个行业正变得越来越拥挤.Hadoop似乎已经奠定了其作为整个大数据生 ...

  5. mysql的数据库的索引_MySQL 数据库索引原理与分类

    前言 数据库索引本质上是一种数据结构(存储结构+算法),目的是为了加快目标数据检索的速度. 目录 1.索引的本质与原理? 2.索引的分类? 1.索引的本质与原理 我们先看一个问题: 假设现在有1000 ...

  6. 数据存取演变史、数据库软件应用史、数据库的本质、分类、 MySQL数据库、系统服务制作、基本的SQL语句

    数据存取演变史 1.文本文件 文本文件有两个主要的缺点:第一个就是不能保证多用户存取的文件路径一致:第二个就是不能保证多用户存取的数据格式一致 2.软件开发目录规范 软件开发目录规范规定了数据文件的大 ...

  7. MySQL数据库的锁 --- 六种分类 - 14种锁详细介绍

    MySQL锁概述 锁是计算机协调多个进程或线程并发访问某一个资源的机制,在数据库中,除传统的计算资源(CPU.RAM.I/O)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性 ...

  8. Java面试系列——数据库(01)数据库的作用、分类、SQL语言、运算符

    数据库作为组织.存储和管理数据的仓库,在后端开发中扮演着不可或缺的角色,前面已经讲了Java基础篇的一些面试题,现在开始数据库篇,主要以Mysql和Redis作为讲解的重点,这两种数据库也是关系型数据 ...

  9. 【力扣刷题总结】数据库题目按知识点分类总结

    观前提示: 这个图先自行背诵至滚瓜烂熟. 文档中论述题目解题思路时没有特殊情况都按照上面的程序执行顺序为准,个别题也会以其他更自然的顺序讲解. 本文的知识点整理仅起提示作用,一些不常用功能.参数可能会 ...

最新文章

  1. Docker 清理命令集锦
  2. c++以空格分开的输入数组_技术贴,MATLAB矩阵与数组汇总讲解
  3. 硬件信息统计_读取输出Excel_显示进度
  4. 人人都能看懂LSTM
  5. BZOJ 1821 [JSOI2010] Group 部落划分 Group
  6. Javascript实现的类似Google的Div拖动代码
  7. 118. Leetcode 392. 判断子序列 (动态规划-子序列问题)
  8. python列表字典如何提取_怎么提取字典里面的列表里面的字典的value
  9. window.onload,body onload=function(), document.onreadystatechange, httpRequest.onreadystatechang
  10. java上传永久图文素材_Java-微信开发上传永久素材(支持所有文件类型)
  11. 程序人生:给程序员的18个建议
  12. android 打开谷歌导航,国内开启google位置记录功能/android版google maps 7+上,恢复位置记录功能在国内使用(需root)...
  13. 解释器android,Android的设计模式-解释器模式
  14. 30 岁前的年轻人,一拨在迷茫,一拨在弯道超车
  15. WAP 1.X 2.0 相关知识
  16. C#实战之CAD二次开发005:打印pdf
  17. 中文可以声明java类吗_JSP中可以声明基本类型和结构类型变量,但不能申明类,类必须放在JavaBean中。...
  18. html5 报表erp案例,SpreadJS 纯前端表格控件应用案例:集成 Odoo 提升企业ERP表格功能...
  19. VMware: vmw_ioctl_command error 无效的参数
  20. minicom 下载

热门文章

  1. js 的基础知识变量
  2. 【Javascript】javascript学习 六 七 JavaScript 变量/运算符
  3. 【Tensorflow深度学习】Tensorflow2.0GPU版极简安装
  4. 算法图解学习笔记02之选择排序
  5. 那些年做的xmind思维导图
  6. 量化策略回测BoolC
  7. 掌握这个套路,让你的可视化大屏万里挑一
  8. Django3Vue3前后端分离项目
  9. vue的computed单向绑定(如淘宝的购物车中使用)
  10. python stringvar.get_Python StringVar get函数什么都不返回?