一、联结表基础知识

1、关系表

把信息分解成多个表,一类数据一个表,各表通过某些常用值(即关系设计中的关系(relational))互相关联;

2、外键(foreign key):外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系

3、联结表的优点:

①数据信息不重复,从而不浪费时间和空间

②如果某个数据信息变动,可以只更新该表中的某个记录,相关表数据不用变更

③数据无重复,可以更有效的存储和方便的处理,伸缩性强(能够适应不断增加的工作量而不失败,设计良好的数据库或者应用程序称为可伸缩性好(scale well))

PS:联结是一种机制,用来在一条select语句中关联表,因此称之为联结(联结在运行时关联表中正确的行)

二、创建联结

例如:select A_name,B_name,B_mobile

from A, B

where A.A_id = B.B_id

order by A_name, B_name;

该SQL语句中,select语句指定要检索的列(因为是创建关联,所以指定了3个列,区别在于A_name在A表中,B_name和B_mobile在另一个表);from语句列出了2个表分别是A和B,A和B表使用where子句正确联结,

where子句指示MySQL匹配A表中的A_id和B表中的B_id相匹配,要匹配的两列以A.A_id和B.B_id完全限定表名(当引用的列可能存在二义性,必须使用完全限定表名(用一个点分隔的表名和列名))

PS:where子句的重要性

在一条select语句中联结几个表时,相应的关系是在运行中构造的;在联结两个甚至多个表时,实际上是将第一个表中的每一行与第二个表中的每一行配对,where子句作为过滤条件,它只包含匹配的给定条件的行。

没有where子句,第一个表中每个行将与第二个表中的每个行匹配,而不管逻辑上是否可以配在一起。

1、笛卡尔积

由没有联结条件的表关系返回的结果称为笛卡尔积(检索出的行的数目将是第一个表中的行数乘以第二个表中的行数);

例如:select A_name,B_name,B_mobile

from A, B

order by A_name, B_name;

PS:应保证所有联结都有where子句,否则MySQL将返回比想要的数据多得多的数据,还应保证where子句的正确性。

2、内部联结

等值联结(equijoin):基于两个表之间的相等测试,也称为内部联结

例如:select A_name,B_name,B_mobile

from A inter join B

on A_name = B_name;

这条SQL语句中,select语句与之前的相同,相较于上面的from,这里使用了inter join指定(当使用inter join时,联结条件用on子句而不是where子句,在这里on等同于where)

3、联结多个表

SQL对一条select语句中可以联结的表的数目没有限制,创建规则也基本相同(首先列出所有表,然后定义表之间的关系)

PS:MySQL在运行时关联指定的每个表以处理联结,这样很耗费资源,因此使用中应注意,不要联结不必要的表。

三、创建高级联结

1、使用表别名

别名除了允许用于列名和计算字段外,SQL还允许给表名起列名,好处在于:

①缩短SQL语句;

②允许在单条select语句中多次使用相同的表;

例如:select a_name, a_mobile

from A as a, B as b, C as c

where A.a_id = B.b_id

and C.c_num = B.b_num

and birthday_id = '1992-10-26';

PS:表别名不仅可用于where子句,还可用于select列表,order by子句以及语句其他部分(表别名只在查询执行中使用,表别名不返回到客户端主机)

2、自联结

自联结:自联结通常作为外部语句用来替代从相同表中检索数据时使用的子查询语句。

例如:select p1.user_id, p1.user_name

from usertable as p1, usertable as p2

where p1.user_id = p2.user_id

and p2.user_id = '10086';

这条SQL语句中,usertable表第一次出现为别名p1,第二次为别名p2,在select语句中明确使用p1前缀给出所需列名,否则MySQL将返回错误,因为其无法正确区分想要的具体为哪一列;

3、自然联结

无论何时对表进行联结,应至少有一个列出现在不止一个表中(被联结的列);标准的联结返回所有数据,自然联结排除多次出现,只返回一次。

一般使用select *通配符,对其他表的列使用明确的自己来完成,通配符只对第一个表使用,所有其他列明确列出。

4、外部联结

用来检索包含了在相关表中没有关联行的行,这种类型的联结称为外部联结。

例如:select A.cust_id, B.mobile_num

from A left outer join B

on A.cust_id = B.mobile_num;

这条select语句使用关键字outer join来指定联结的类型(不是在where子句中指定);在使用outer join语法时,必须使用left或right指定包括其他所有行的表(right指出右边的表,left指出左边的表)

外部联结的类型:

分为左外部联结和右外部联结,唯一差别是关联表的顺序不同,左外部联结可以通过颠倒from或where子句中的表顺序转换为右外部联结,两种类型可以互换使用(聚集函数也可和联结一起使用)。

PS:联结使用要点

①注意使用的联结类型

②保证使用正确的联结条件,否则将返回不正确的数据

③应该总是提供联结条件,否则会得到笛卡尔积

④同一个联结下可包含多个表,甚至对每个联结采用不同的联结类型

MySQL(七)联结表相关推荐

  1. 【MySQL】联结表

    关系表 创建联结 内部联结 联结多表 关系表 相同的数据出现多次不是一件好事. 外键:指某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系. 可伸缩性:能够适应不断增加的工作量而不失败.设 ...

  2. Mysql的七种表类型

    转载自http://database.51cto.com/art/201010/230057.htm 学习Mysql数据库,Mysql表类型都有哪些是一定需要知道的,下面就为您介绍七种Mysql表类型 ...

  3. MySQL必知必会——第十五章联结表

    联结表 本章将介绍什么是联结,为什么要使用联结,如何编写使用联结的SELECT语句. 联结 SQL最强大的功能之一就是能在数据检索查询的执行中联结(join)表. 在能够有效地使用联结前,必须了解关系 ...

  4. mysql使用联结的好处_MySQL基础之联结表

    联结 SQL最强大的功能之一就是能在数据检索查询的执行中联结(join)表.联结是利用SQL的SELECT能执行的最重要的操作. 关系表 关系表的设计就是要保证把信息分解成多个表, 一类数据一个表.各 ...

  5. mysql中表联结_MySQL -- 表联结

    创建联结:(使用WHERE联结)SELECTvend_name,prod_name,prod_priceFROMvendors,productsWHEREvendors.vend_id=product ...

  6. MySQL第七讲:MySQL分库分表详解

    MySQL分库分表详解 摘要:本文是MySQL第七讲:MySQL分库分表详解流程,非常全面的总结,强烈建议保存下来,在需要时看看 文章目录 MySQL分库分表详解 1.什么是分库分表,何时要分库分表 ...

  7. mysql 联结主键_联结表中的复合主键 - Sequelize

    使用Sequelize和MySQL数据库,我试图在联结表中实现复合主键组合,但遗憾的是没有结果 . 我有 table : 它们与许多人有很多关系 . 在联结表user_has_project中,我想要 ...

  8. MySQL 学习笔记(10)—— 联结表

    1. 联结表

  9. mysql必知必会读书笔记就——联结表、高级联结

    vendor表: products表: orderitems表: customers表: orders表: 一.联结表:联结表是一种机制,用来在一条select语句中关联表,因此称为联结表.联结在运行 ...

最新文章

  1. 利用sort对多字段排序
  2. Bootsrap基本应用
  3. HBuilder的快捷操作
  4. django-配置静态文件路径
  5. canvas的基本应用
  6. PyQt5学习笔记(二) 文本控件及使用
  7. shell实现https登录
  8. 以太网峰会:网络管理员已成濒危职业
  9. 33. Implement strStr()
  10. 三星电子首次公布李在镕薪酬 看起来一点儿也不高
  11. android 编译系统make文件
  12. 微型计算机中硬盘工作时 应注意避免,1硬盘工作时应特别注意避免(B)
  13. 华为U2000网管研究实录 (1) - 安装
  14. [Verilog]半减器,全减器设计
  15. 华为移动wifi显示无服务器,华为移动wifi设置方法
  16. Yara、Snort和Sigma规则
  17. ubuntu不支持安装搜狗_Ubuntu下安装搜狗输入法已经fcitx升级后搜狗输入法不能使用的解决办法...
  18. 微信自动回复(新年快乐)
  19. C语言期末考试成绩奖励编码,C语言期末考试总结,看完保你过
  20. html制作学生成绩表,学生成绩查询系统的制作方法——Excel篇

热门文章

  1. 1.1 Windows 程序运行原理(消息循环和响应)
  2. MFC六大核心机制之一:MFC程序的初始化
  3. ADO学习(八)源码示例
  4. C语言程序设计 | 模拟实现字符串操作函数:strlen, strcmp, strcpy, strcat, strchr, strstr
  5. 聚美app之 _sign参数分析
  6. Python 多进程pool.map()方法的使用
  7. 为什么QueueingConsumer会被Deprecated?
  8. [八]RabbitMQ-客户端源码之ChannelN
  9. 实现视频和音频的零延迟是标准的零和博弈
  10. 腾讯V265编码器:给用户以完备的265体验