1 多表连接类型

1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','

如: SELECT * FROM table1 CROSS JOIN table2 SELECT * FROM table1 JOIN table2 SELECT * FROM table1,table2

由于其返回的结果为被连接的两个数据表的乘积,因此当有WHERE, ON或USING条件的时候一般不建议使用,因为当数据表项目太多的时候,会非常慢。一般使用LEFT [OUTER] JOIN或者RIGHT [OUTER] JOIN

2. 内连接INNER JOIN 在MySQL中把INNER JOIN叫做等值连接,即需要指定等值连接条件在MySQL中CROSS和INNER JOIN被划分在一起。 join_table: table_reference [INNER | CROSS] JOIN table_factor [join_condition]

3. MySQL中的外连接,分为左外连接和右连接,即除了返回符合连接条件的结果之外,还要返回左表(左连接)或者右表(右连接)中不符合连接条件的结果,相对应的使用NULL对应。

工作原理:

从左表读出一条,选出所有与on匹配的右表纪录(n条)进行连接,形成n条纪录(包括重复的行,如:结果1和结果3),

如果右边没有与on条件匹配的表,那连接的字段都是null.然后继续读下一条。

a. LEFT [OUTER] JOIN:

SELECT column_name FROM table1 LEFT [OUTER] JOIN table2 ON table1.column=table2.column

除了返回符合连接条件的结果之外,还需要显示左表中不符合连接条件的数据列,相对应使用NULL对应

b. RIGHT [OUTER] JOIN:

SELECT column_name FROM table1 RIGHT [OUTER] JOIN table2 ON table1.column=table2.column

RIGHT与LEFT JOIN相似不同的仅仅是除了显示符合连接条件的结果之外,还需要显示右表中不符合连接条件的数据列,相应使用NULL对应

Tips:

1. on a.c1 = b.c1 等同于 using(c1)2. INNER JOIN 和 , (逗号) 在语义上是等同的

3. 当 MySQL 在从一个表中检索信息时,你可以提示它选择了哪一个索引。

如果 EXPLAIN 显示 MySQL 使用了可能的索引列表中错误的索引,这个特性将是很有用的。

通过指定 USE INDEX (key_list),你可以告诉 MySQL 使用可能的索引中最合适的一个索引在表中查找记录行。

可选的二选一句法 IGNORE INDEX (key_list) 可被用于告诉 MySQL 不使用特定的索引。

2 表连接的约束条件

添加显示条件WHERE, ON, USING

1. WHERE子句

2. ON 3. USING子句,如果连接的两个表连接条件的两个列具有相同的名字的话可以使用USING

例如 SELECT FROM LEFT JOIN USING ()

连接多余两个表的情况举例:

mysql>

SELECT artists.Artist, cds.title, genres.genre

FROM cds

LEFT JOIN genres N cds.genreID = genres.genreID

LEFT JOIN artists ON cds.artistID = artists.artistID;

或者 mysql>

SELECT artists.Artist, cds.title, genres.genre

FROM cds

LEFT JOIN genres ON cds.genreID = genres.genreID

LEFT JOIN artists -> ON cds.artistID = artists.artistID

WHERE (genres.genre = 'Pop');

--------------------------------------------

另外需要注意的地方 在MySQL中涉及到多表查询的时候,需要根据查询的情况,想好使用哪种连接方式效率更高。

1. 交叉连接(笛卡尔积)或者内连接 [INNER | CROSS] JOIN

2. 左外连接LEFT [OUTER] JOIN或者右外连接RIGHT [OUTER] JOIN 注意指定连接条件WHERE, ON,USING.

mysql 多表联查的效率_Mysql 多表联合查询效率分析相关推荐

  1. 01_SQL注入_Mysql注入利用联合查询的手工注入

    01_SQL注入_Mysql注入:利用联合查询的手工注入 1.SQL注入的成因 [严正声明]仅供学习,勿做他用!!! [严正声明]仅供学习,勿做他用!!! [严正声明]仅供学习,勿做他用!!! 遵纪守 ...

  2. mysql建表影响效率_MySQL建表查询优化技巧

    场景 我用的数据库是mysql5.6,下面简单的介绍下场景 课程表: 数据100条 学生表: 数据70000条 学生成绩表SC 数据70w条 查询目的:查找语文考100分的考生 查询语句: selec ...

  3. mysql表级别的操作_MySql 库/表级操作 及 数据类型 - 纪宇

    数据库分类 关系型数据库(SQL):存储方式固定,安全 非关系型数据库(NoSQL):存储方式比较灵活,存储数据的效率比较高,不太安全 MySQL是一种关系型数据库管理系统(采用关系模型来组织管理数据 ...

  4. mysql俩个表之间关联语法_MySQL多表关联SQL语句调优

    本文不涉及复杂的底层数据结构,是通过explain解释SQL,并根据当前可能出现的情况,来做具体的优化,使百万级.千万级数据表关联查询第一页结果能在几秒内完成(真实业务告警系统优化结果).希望对您有一 ...

  5. mysql 表 视图 索引吗_Mysql多表查询, 视图,事务,索引,函数,go连接数据库

    1.1 今日目标 理解多表查询 理解子查询 能够创建视图 能够删除视图 能够查看创建视图的SQL语句 能够理解事务的作用 能够操作事务 理解索引的作用 能够创建索引 能够删除索引 知道常用的函数 了解 ...

  6. MySQL的表分区详解_MySQL的表分区详解

    一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分 ...

  7. mysql建表字段不能重复_MySQL建表的一些约束条件

    1.SQL :结构化查询语言(Structer Query Language) 包含DDL,DCL ,DML,TCL四种语句 DDL:create / alter / drop DCL: grant ...

  8. mysql表创建在哪_mysql创建表命令是哪句

    如何创建MySQL数据表?下面本篇文章给大家介绍通过命令提示符创建数据表的方法,希望对你们有所帮助. 创建MySQL数据表需要以下信息: ● 表名 ● 表字段名 ● 定义每个表字段 基本语法 以下为创 ...

  9. mysql编辑表php源码_MySQL修改表的实际应用代码示例

    以下的文章主要介绍的是MySQL修改表的实际操作命令,同时本文也有对MySQL修改表的实际操作代码的描述,如果你对其相关的实际操作有兴趣的话,你就可以对以下的文章点击观看了. ALTER [IGNOR ...

最新文章

  1. 三个大数据处理框架:Storm,Spark和Samza 介绍比较
  2. (四)创建ROS程序包(就是软件包)
  3. Type TIMESTAMP(3) of table field ‘onSellTime‘ does not match with the physical type TIMESTAMP(6)
  4. 应用jacob组件造成的内存溢出解决方案(java.lang.OutOfMemoryError: Java heap space)
  5. php设计者,PHP设计者---composer
  6. This dependency was not found: * !!vue-style-loader!css-loader?……解决方案
  7. 全数字FM接收机 --(1)结构
  8. 什么是java中的监听器_java中什么是监听器
  9. cimage和gdi绘图效率比较_使用MFC CImage类和GDI+ Image加载并绘制PNG图片
  10. Matlab OpenEXR 打开exr格式图片
  11. NOI题库答案(1.1 编程基础之输入输出)
  12. 中国雅虎邮箱一键迁移到网易邮箱教程
  13. 计算机系的学生的未来计划,学生未来计划.doc
  14. Windows驱动的加载顺序
  15. Stanford Parser使用
  16. SAP FI CO模块常用事务代码
  17. mysql中selec sum返回null的解决方法
  18. 微信公众平台-小程序开发工具源码
  19. 统考英语计算机报名入口奥鹏,考试服务
  20. 在linux下怎么解压和压缩tar.xz文件

热门文章

  1. 华为魔术手机拆机图解_【连载二十二】手机维修电路基础卡电路
  2. ansys结构分析单元与应用_结构动力学中的时域分析(3) —— 基于ANSYS的实现
  3. HTML5 中的canvas元素用于,HTML5中的Canvas元素
  4. java 命令直接执行(运行)jar 包的几种方法【笔记自用】
  5. winform point数组带数值_带你学够浪:Go语言基础系列 - 8分钟学复合类型
  6. 集成学习(一)—预备知识:分类树和回归树
  7. 文巾解题 326. 3的幂
  8. 文巾解题 01.05. 一次编辑
  9. 【数值分析】常微分方程数值解:欧拉公式
  10. MATLAB基本操作(一):MATLAB中变量的文件存储