mysql左连接之后是不是只是把几张表拼到一起了?

mysql左连接之后是不是只是把几张表拼到一起了?,第1张

inner join(等值连接) 只返回两个表中联结字段相等的行

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录

right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录

表A记录如下:

aID               aNum

1                  a20050111

2                  a20050112

3                  a20050113

4                  a20050114

5                  a20050115

表B记录如下:

bID               bName

1                   2006032401

2                  2006032402

3                  2006032403

4                  2006032404

8                  2006032408

实验1左连接如下:

1.left join

sql语句如下:

select * from A

left join B

on A.aID = B.bID

结果如下:

aID               aNum                          bID                  bName

1                   a20050111                1                      2006032401

2                   a20050112                2                     2006032402

3                   a20050113                3                     2006032403

4                   a20050114                4                     2006032404

5                   a20050115                NULL              NULL

(所影响的行数为 5 行)

结果说明:

left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.

换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).

B表记录不足的地方均为NULL.

实验2右连接如下:

2 right join

sql语句如下:

select * from A

right join B

on A.aID = B.bID

结果如下:

aID               aNum                          bID                  bName

1                   a20050111                1                      2006032401

2                   a20050112                2                     2006032402

3                   a20050113                3                     2006032403

4                   a20050114                4                     2006032404

NULL           NULL                          8                     2006032408

(所影响的行数为 5 行)

结果说明:

仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.

通过上面的例子,希望你能看懂!

假设sdeg和zbug的表结构 都是

ID varchar(4) primary key,

Name varchar(8),

Dept varchar(10),

存储过程如下

CREATE PROCEDURE table_combine()

BEGIN

#第一步把sdeg和zbug两个表进行联合输出到临时表tmp_tab中

create temporary table tmp_tab select * from sdeg union select * from zbut

#第二步创建结果表sdut,并创建主键

create table sdut(ID varchar(4) primary key, Name varchar(8),Dept varchar(10))

#第三步把临时表里面的重复数据过滤并写入sdut

INSERT INTO sdut(ID,Name,Dept) SELECT distinct ID,Name,Dept FROM tmp_tab

#drop临时表

drop table tmp_tab

END

使用预处理语句,如:

SET @pddl = concat('select * from user', @var)

PREPARE stmt FROM @pddl/*定义预处理语句*/

EXECUTE stmt/*执行预处理语句*/

DEALLOCATE PREPARE stmt/*释放预处理语句*/


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5899295.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-07
下一篇 2023-03-07

发表评论

登录后才能评论

评论列表(0条)

保存