使用联结能够实现用一条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. hadoop zookeeper高可用

    原文地址: https://blog.csdn.net/dingchenxixi/article/details/51131493 core-site.xml yarn-site.xml

  2. java和c#中String

    java中: c#中: 1.拼接字符串 sql语句中 in() str="'001','002','003'";至于产生string就这样  str1="'001'&qu ...

  3. fiddler常用操作之断点

    fiddler常用操作断点 标签(空格分隔): fiddler断点 一.断点: 1.为什么要打断点呢? 比如一个购买的金额输入框,输入框前端做了限制100-1000,那么我们测试的时候,需要测试小于1 ...

  4. python学习day5 常量 运算符补充 流程控制基础

    1.常量 值不会改变的量 python中没有特别的语法定义常量,一般约定用全大写字母命名常量,比如圆周率pi 2.预算符补充 2.1算数运算符 print(10/3)除法运算 print(10//3) ...

  5. 二维数组中的查找(python)

    题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...

  6. Django、Flask、Tornado的比较

    一:常用请求参数的接收 Django中: request.GET/POST Tornado中: self.get_query_argument()/get_query_arguments() self ...

  7. 约束布局 ConstraintLayout

    app:layout_constraintVertical_bias="0.5"app:layout_constraintHorizontal_bias="0.5&quo ...

  8. c++ sizeof,strlen, length

    #include <map>#include <iostream>#include <algorithm>#include <functional>#i ...

  9. session高级(session入库)

    我们知道,session是一种会话技术,用来实现跨脚本共享数据. 在之前的php会话技术中我们介绍过,session是存放在服务器端的文件里的,因此session有可能因为文件数量过多,会在查询ses ...

  10. 设a、b、c均是0到9之间的数字,abc、bcc是两个三位数,且有:abc+bcc=532。求满足条件的所有a、b、c的值。

    题目描述 设a.b.c均是0到9之间的数字,abc.bcc是两个三位数,且有:abc+bcc=532.求满足条件的所有a.b.c的值. 输入描述: 题目没有任何输入. 输出描述: 请输出所有满足题目条 ...