什么是MySQL连接查询

  

什么是MySQL连接查询?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

  ,,,,,,,,,,,,,,   ,,,,,,,,,,,,,,

1作用

在数据库中<代码>与操作被称为连接,作用是能连接多个表的数据(通过连接条件),从多个表中获取数据合并在一起作为结果集返回给客户端,例如:

表答:

idnameage1A182B193C20

表B:

iduidgender11F22M

通过连接可以获取到合并两个表的数据:

选择a * B。性别从左加入B> 2连接关键字 

连接两个表我们可以用两个关键字:<代码> ,<代码>使用。<代码> 可以指定具体条件,使用 <代码>则指定<强>相同名字和<强>数据类型的列作为等值判断的条件,多个则通过逗号隔开。
如下:

:select * from A加入B> 3连接类型 

3.1内连接

内连接和交叉连接
    <李>语法:<代码>,加入|内连接|,交叉连接B <李>表现:A和B满足连接条件记录的交集,如果没有连接条件,则是A和B的笛卡尔积李 <李>特点:在MySQL中,<代码>交叉连接,<代码>内连接代码和<代码>与所实现的功能是一样的。因此在MySQL的官方文档中,指明了三者是等价的关系。
隐式连接
    <李>语法:<代码>从A, B, C代码 <李>表现:相当于无法使用<代码> 和<代码>使用的<代码>与 <李>特点:逗号是隐式连接运算符。隐式连接是SQL92中的标准内容,而在SQL99中显式连接才是标准,虽然很多人还在用隐私连接,但是它已经从标准中被移除。从使用的角度来说,还是推荐使用显示连接,这样可以更清楚的显示出多个表之间的连接关系和连接依赖的属性。

3.2外连接

左外连接
    <李>语法:<代码>左加入B <李>表现:左表的数据全部保留,右表满足连接条件的记录展示,不满足的条件的记录则全是零 <代码>
右外连接
    <李>语法:<代码>右加入B <李>表现:右表的数据全部保留,左表满足连接条件的记录展示,不满足的条件的记录则全是零 <代码>
全外连接

MySQL不支持全外连接,只支持左外连接和右外连接。如果要获取全连接的数据,要可以通过合并左右外连接的数据获取到,如<代码> select *从左加入B> 3.3自然连接

    <李>语法:<代码>自然连接B====自然左连接B====自然权利加入B <李>表现:相当于不能指定连接条件的连接,MySQL会使用左右表内相同名字和类型的字段作为连接条件。李 <>李特点:自然连接也分自然内连接,左外连接,右外连接,其表现和上面提到的一致,只是连接条件由MySQL自动判定。

4执行顺序

在连接过程中,MySQL各关键字执行的顺序如下:

5连接算法

<代码>与代码有三种算法,分别是<代码>嵌套循环联接,<代码>散列连接,<代码>排序合并连接> 嵌套循环联接>

具体来说<代码>嵌套循环联接>

    <李> SNLJ李 <>李BNLJ李 <李> INLJ李

我们来看下对于连接语句<代码> select *从左加入B> 5.1简单的嵌套循环联接(SNLJ)

<代码> SNLJ>

(一分之一){
  在b (b) {
  如果(一个。id==b.tid) {
  b>输出& lt;;;
  }
  }
  }

当然,MySQL即使在无索引可用,或者判断全表扫描可能比使用索引更快的情况下,还是不会选择使用过于粗暴的<代码> SNLJ 算法,而是采用下面的算法。

5.2块嵌套循环联接(BNLJ)

<代码> INLJ> 算法。会将外层循环的行分片存入<代码> 中缓冲的记录做比较,从而减少内层循环的次数,具体逻辑如下:

什么是MySQL连接查询