超详细mysql left join,right join,inner join用法分析

超详细mysql left join,right join,inner join用法分析详细分析了mysql的几个连接函数,只要看了就能学到好东西。以下是示例分析表A,记录如下:AIDA num 1a 2005 01 11 2a 2005 01 12 3a 2005 01 13 4a 2005 01 14 5a 2005 01 15b该表记录如下:Bidbname 12006032401 22006032402 32006032403 42006032404 82006032408以下SQL语句用于创建这两个表:create tablea aid int(1)auto _ increment主键,anum char(20))create tableb(bid int(1)not null auto _ increment主键,bname char (20))插入一个值(1, a20050111 )、(2, a20050112 )、(3, a20050113 )、(4, a20050114 )、(5, a 20050115 );INSERTINTOb值(1, 2006032401 )、(2, 2006032402 )、(3, 2006032403 )、(4, 2006032404 )、(8, 2006032408 );实验如下:1 .左连接sql语句如下:select * from a leftjoinbona . aid=b . bid结果如下:aidanumbidbname 1a 200501112006032401 2a 2005011222006032402 3a 2005011332006032403 4a 2005011442006032404 5a 2005 01 15 null null null(受影响的行数为5)结果:leftjoin基于表A中的记录,可视为左表,B可视为右表,leftjoin基于左表。换句话说,将显示左侧表(A)中的所有记录,而右侧表(B)将只显示符合搜索条件的记录(在示例中:A. Aid=B. Bid)。表b中的记录不足。2 .右连接(右连接)sql语句如下:select * from a rightjoingbona . aid=b . bid。结果如下:aidanumbidbname 1a 200501112006032401 2a 200501122006032402 3a 2005011332006032403 4a 2005011442006032404 null null 82006032408(受影响的行数为5)注意:仔细观察,你会发现和leftjoin的结果正好相反。这次是基于右表(B),表A的不足用NULL填充。3 .内部连接(相等连接或内部连接)sql语句如下:select * from a innerjoinbona . aid=b . bid相当于下面的SQL语句:SELECT* FROMa,b WHEREa.aID=b.bID=b.bid。结果如下:Aidanumbidbname 1a 200501112006032401 2a 2005011222006032402 3a 2005011332006032403 4a 2005011442006032404说明:显然,这里只显示A.aID=B.bID的记录。这说明innerjoin不是基于who的,它只显示符合条件的记录。LEFTJOIN操作用于任何FROM子句中,合并源表的记录。使用LEFTJOIN操作创建左外部联接。左外部联接将包含第一个(左)表中的所有记录,也就是说,第二个(右)表中没有匹配值的记录。语法:from table1 leftjointable2 on table 1 . field 1 comp prtable 2 . field 2描述:table 1,table 2参数用于指定要组合记录的表的名称。1,field2参数指定联接字段的名称。并且这些字段必须具有相同的数据类型,包含相同的数据类型,但不需要具有相同的名称。Compopr参数指定关系比较运算符:“=”、“”、“”、“=”、“=”或“”。如果要在INNERJOIN操作中联接包含Memo数据类型或OLEObject数据类型的字段,将会出现错误。

超详细mysql left join,right join,inner join用法分析