资料源于网络

一.内联结、外联结、左联结、右联结的含义及区别
在SQL标准中规划的(Join)联结大致分为下面四种:
1.内联结:将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结。
2.外联结:分为外左联结和外右联结。
左联结A、B表的意思就是将表A中的全部记录和表B中联结的字段与表A的联结字段符合联结条件的那些记录形成的记录集的联结,这里注意的是最后出来的记录集会包括表A的全部记录。
右联结A、B表的结果和左联结B、A的结果是一样的,也就是说:

1 Select A.name B.name From A Left Join B On A.id=B.id

1 Select A.name B.name From B Right Join A on B.id=A.id

执行后的结果是一样的。

3.全联结:将两个表中存在联结关系的字段的所有记录取出形成记录集的联结。
4.无联结:没有使用联结功能,也有自联结的说法。

内外联结的区别是内联结将去除所有不符合条件的记录,而外联结则保留其中部分。外左联结与外右联结的区别在于如果用A左联 结B则A中所有记录都会保留在结果中,此时B中只有符合联结条件的记录,而右联结相反。

二.例子

假设有如下两张表:

表A
ID Name
1 Tiim
2 Jimmy
3 John
4 Tom
表B
ID Hobby
1 Football
2 Basketball
2 Tennis
4 Soccer

1内联结:

1 Select A.Name from A INNER JOIN B ON A.id = B.id

这是隐式的内联结,查询的结果是:

Name Hobby
Tim Football
Jimmy Basketball
Jimmy Tennis
Tom Soccer

它的作用和

1 Select A.Name from A INNER JOIN B ON A.id = B.id

是一样的。

2.外左联结

1 Select A.Name from A Left JOIN B ON A.id = B.id

这样查询得到的结果将会是保留所有A表中联结字段的记录,若无与其相对应的B表中的字段记录则留空,结果如下:

Name Hobby
Tim Football
Jimmy Basketball,Tennis
John  
Tom Soccer

所以从上面结果看出,因为A表中的John记录的ID没有在B表中有对应ID,因此为空,但Name栏仍有John记录。

3.外右联结

1 Select A.Name from A Right JOIN B ON A.id = B.id

结果将会是:

Name Hobby
Tim Football
Jimmy Basketball
Jimmy Tennis
Tom Soccer

三.联表查询中用到的一些参数

1.USING (column_list):
其作用是为了方便书写联结的多对应关系,大部分情况下USING语句可以用ON语句来代替,如下面例子:
a LEFT JOIN b USING (c1,c2,c3),其作用相当于
a LEFT JOIN b ON a.c1=b.c1 AND a.c2=b.c2 AND a.c3=b.c3

2.STRAIGHT_JOIN:
由于默认情况下MySQL在进行表的联结的时候会先读入左表,当使用了这个参数后MySQL将会先读入右表,这是个MySQL的内置优化参数,大家应该在特定情况下使用,譬如已经确认右表中的记录数量少,在筛选后能大大提高查询速度。

转载于:https://www.cnblogs.com/itjiandan/p/3508254.html

(转)MySQL联表查询相关推荐

  1. mysql联表查询语句示例

    mysql联表查询语句示例 ps:本人亲测,阿里云2核4G5M的服务器性价比很高,新用户一块多一天,老用户三块多一天,最高可以买三年,感兴趣的可以戳一下:阿里云折扣服务器 示例: "sele ...

  2. 【explain】MySQL联表查询中的驱动表

    写在前面 1.不要求每个人一定理解 联表查询(join/left join/inner join等)时的mysql运算过程 2.不要求每个人一定知道线上(现在或未来)哪张表数据量大,哪张表数据量小 3 ...

  3. MySQL联表查询(连接查询)

    联表查询 增删改查 7种join理论 图源网络,若侵权请联系删除 MySQL中没有full outer join操作,所以第6种是1 union 3:第7种是4 union 5 查询步骤 分析查询字段 ...

  4. mysql联表查询count错误_关于count(*)和联表查询和锁表的问题

    刚开始学MySQL,在描述时候假如有不对的地方,希望各位大大指出. 本人在看书的时候看到了这么一句,在生产环境中请不要随意使用count(*),原因是它将会进行表级锁定(inno DB下). 原因是最 ...

  5. MYSQL 联表查询 ORDER 效率低?

    今天在处理一个分页时候,发现速度感人,点下一页等了半天.然后查看代码,发现是一个left jion语句. SELECT DISTINCT ordr.id,ordr.*,cf.nickname FROM ...

  6. mysql联表查询多记录显示_数据库:MySQL(多表的表记录的查询)(三)

    一.外键约束 1.创建外键 ---每一个班主任会对应多个学生 , 而每个学生只能对应一个班主任----主表 CREATE TABLE ClassCharger( id TINYINT PRIMARY ...

  7. mysql 联表查询 简书_mysql多表查询

    一.表的关系分析: 用户和订单:一个用户可以有多个订单,但每个订单只能属于一个用户,所以是一对多的关系. 商品和分类:一个产品只能有一种分类,而一个分类可以有多种产品,所以是多对一的关系. 订单和商品 ...

  8. MySQL联表查询【详解】

    文章目录 MySQL连接查询及原理 1.本文内容 2.准备数据 3.笛卡尔积 sql中笛卡尔积语法 4.内连接 示例1:有连接条件 示例2:无连接条件 示例3:组合条件进行查询 总结 5.外连接 左连 ...

  9. mysql联表查询聚合_MySQL--04(聚合函数表连接查询)

    聚合函数 统计函数 count() select count(要统计的字段) from 表名 where [条件] MariaDB [employe]> select count(*) from ...

最新文章

  1. 给娃写个游戏,庆祝嫦娥五号登月
  2. Android之利用JSBridge库实现Html,JavaScript与Android的所有交互
  3. oracle选择语言设置,oracle本地语言变量设置
  4. 错误处理,触发,日志使用,异常机制
  5. python3串口通信16进制_STM32串口通信——16进制数形式
  6. java中日期与字符串之间的转换
  7. React中的高阶组件
  8. 去掉微信小程序button边框
  9. Android FrameWork浅识
  10. 华为ensp安装包及安装教程(详细版)
  11. 【学习笔记】成功解决:(字体问题)Package fontspec Error: The font “STXingkai“ cannot be found. \makecover
  12. html5 监控,基于 HTML5 的 WebGL 3D 智能楼宇监控系统
  13. 计算机基础在线网络课程,欢迎访问大学计算机基础网络课程
  14. QGraphicItem实现中心旋转
  15. Android 9.0 设置讯飞语音引擎为默认tts语音播报引擎
  16. paper reading——《Improving Person Re-identification by Attribute and Identity Learning》
  17. 快速搞明白公网和私网的区别(组建私网的网络号)
  18. Android开发-UI开发
  19. 惠普电脑window10系统怎么进入bios
  20. 电脑diy配件产品导购,装机硬件资讯

热门文章

  1. 2022-2028年中国床上用品行业投资分析及前景预测报告
  2. 做人留一线,日后好相见
  3. torch.backends.cudnn.deterministic 使用cuda保证每次结果一样
  4. pytorch中如何处理RNN输入变长序列padding
  5. LeetCode简单题之旅行终点站
  6. 旷视MegEngine基本概念
  7. 客快物流大数据项目(二十五):初始化业务数据
  8. HarmonyOS UI开发 TableLayout(表格布局) 的使用
  9. Android 自定义 —— View lineTo 与 rLineTo 的区别
  10. 微信小程序bindtap 与 catchtap 是使用