使用联结能够实现用一条SELECT语句检索出存储在多个表中的数据。联结是一种机制,用来在一条SELECT语句中关联表,不是物理实体,其在实际的数据库表中并不存在,DBMS会根据需要建立联结,且会在查询期间一直存在。

联结的本质是第一个表中符合条件的每一行与第二个表中符合条件的每一行进行配对,假如没有WHERE字句或联结条件,则第一个表中的每一行将与第二个表中的每一行进行配对,总共会返回的行数是 主表的行数*附表的行数(即两个表的笛卡尔积)。如果第一个表和第二个表中包含的行数非常多,那么就有必要在WHERE子句中假如筛选条件,这样会大大减少不必要的配对。

演示用的两个表product vendor

   

自然联结 NATURAL JOIN

自然联结其实和内部联结一样,只是不会出现相同的重复列。在以前的版本中,有NATURAL JOIN来实现自然联结,也就是去除重复行,在最新的版本的MySQL中,不支持NATURAL JOIN,把这项工作交给了用户。

自连接 就是自己联结自己的操作

自连接和子查询可互相取代

内部联结(等值联结)INNER JOIN 基于两个表之间的相等测试

内部部联结又称等值联结,将两个表中存在联结关系的字段和符合联结关系的记录形成记录集的联结。用INNER JOIN指定表之间的内部连接关系,用ON子句指定联结条件。

INNER JOIN可以检索出符合条件(ON子句和WHERE子句)的两个表的交集

外联结之左外联结 LEFT JOIN

左外联结会检索出左表中的所有记录,并且如果右表中的记录符合条件会附加到左表的记录中。

外联结之右外联结 RIGHT JOIN

右外联结会检索出右表中的所有记录,并且如果左表中的记录符合条件会附加到右表的记录中。

交叉联结 CROSS JOIN

与内部联结效果相同

交叉联结返回左表中符合条件的每一行和右表中符合条件的每一行的配对。

如果没有WHERE子句,返回两个表的笛卡尔积

 注意:MySQL中没有全联结(FULL JOIN)

MySQL中的联结表的更多相关文章

  1. mysql中把一个表的数据批量导入另一个表中

    mysql中把一个表的数据批量导入另一个表中   不管是在网站开发还是在应用程序开发中,我们经常会碰到需要将MySQL或MS SQLServer某个表的数据批量导入到另一个表的情况,甚至有时还需要指定 ...

  2. mysql中的回表查询与索引覆盖

    了解一下MySQL中的回表查询与索引覆盖. 回表查询 要说回表查询,先要从InnoDB的索引实现说起.InnoDB有两大类索引,一类是聚集索引(Clustered Index),一类是普通索引(Sec ...

  3. mysql中如何删除表上的索引?删除索引?

    需求描述: 今天在做SQL的优化的时候,想要把mysql中某个表上的索引删除掉,突然忘记语法了,找到帮助,在此记录下 操作过程: 1.查看表上的索引 show index from ti_o_sms; ...

  4. 用命令从mysql中导出/导入表结构及数据

    在命令行下mysql的数据导出有个很好用命令mysqldump,它的参数有一大把,可以这样查看:mysqldump最常用的:mysqldump -uroot -pmysql databasefoo t ...

  5. mysql中delete的表别名使用方法

    在 mapper.xml 中的 dynamicWhere 动态查询中使用了表别名,Delete 语句引用了动态查询,如下: <delete id="delete" param ...

  6. 你了解MySQL中的多表联合查询吗?

    前言: 多表联合查询,其实就是我们MySQL中的join语句,经常会看到有人说join非常影响性能,不建议使用,你知道这是为什么呢?我们究竟可不可以用呢? 测试数据: CREATE TABLE `t2 ...

  7. MySQL中的联表查询与子查询

    0.准备数据 1.内连接:INNER JOIN 2.左连接:LEFT JOIN 3.右连接:RIGHT JOIN 4.USING子句 扩展知识点: 0.表别名的使用: 1.group by的用法 2. ...

  8. 数据库MySQL中关于“多表关联更新”的那些事

    在常见的sql中,我们经常在查询中进行多表关联查询,用的比较熟练.今天在开发中遇到一个实际业务场景是多表关联更新,一时不知所措.本着多学习的态度,没有直接写java代码去实现,终于把多表关联更新的sq ...

  9. 用命令查看Mysql中数据库、表的空间大小

    要想知道每个数据库的大小的话,步骤如下:1.进入information_schema 数据库(存放了其他的数据库的信息)use information_schema;2.查询所有数据的大小:selec ...

随机推荐

  1. surf特征点检测

    ※注:参数SURF中的hessian阈值是图像Hessian矩阵判别式的阈值,值越大检测出的特征点就越少,也就意味着特征点越稳定 #include "opencv2/core/core.hp ...

  2. python 自然语言处理库https://www.nltk.org/nltk_data/

    https://www.nltk.org/nltk_data/ https://github.com/hankcs/HanLP

  3. 第三章,DNA序列的进化演变

    31.前言 3.1.两个序列间的核苷酸差异 来自同一祖先序列的两条后裔序列,之间的核苷酸的差异随着时间的增加而变大.简单的计量方法,p距离 3.2.核苷酸代替数的估计 3.3.Jukes和Cantor ...

  4. Oracle VM VirtulBox 安装Ubuntu16.04

    曾经自己在电脑中检索到Ubuntu kylin 16-10.vmdk 后就通过. 这种方式就进行了新建. 后自己从http://www.gaofumei.net/linux-download/783. ...

  5. Spring Boot 邮件配置

    ######################################################## spring boot mail tls ###################### ...

  6. 申请ssl证书报提示caa提示

    申请ssl证书报下面提示caa提示,这和dns有关,换一组dns重新申请  send challenge err[acme error 'urn:acme:error:connection': DNS ...

  7. django admin后台显示中文

    在settings中设置 LANGUAGE_CODE = ‘zh-Hans’

  8. Oracle 存储过程例子返回记录集

    转载:https://www.cnblogs.com/mikalshao/articles/1454134.html Oracle 不支持批量查询,因此无法从一个命令返回多个结果集.使用存储过程时,返 ...

  9. Flask之before_request、after_request

    1.@app.before_request在请求(request)|在视图函数   之前做出响应 解决所有问题 from flask import Flask from flask import re ...

  10. mysql中插入序列表

    利用序列表来实现列转行:CREATE TABLE sequence(id INT UNSIGNED NOT NULL auto_increment PRIMARY KEY)往里面插入数据 INSERT ...