700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > left join right join inner join join union的意义

left join right join inner join join union的意义

时间:2021-07-13 10:31:20

相关推荐

left join  right join   inner join  join  union的意义

数据库在连接两张或以上的表来返回数据时,都会生成一张中间的临时表,然后再将临时表返回给用户

left join,right join,inner join, join 与 on 配合用

select col_name.. from tablename1 [inner | left | right] join tablename2 on on_condition

select col_name.. from tablename1 left join tablename2 on on_condition

CREATE TABLE IF NOT EXISTS `name`(

pid int(11) unsigned auto_increment,

name varchar(40) NOT NULL,

primary key(`pid`)

) ENGINE = MYISAM DEFAULT CHARSET = UTF8;

CREATE TABLE IF NOT EXISTS `sname`(

id int(11) unsigned NOT NULL AUTO_INCREMENT,

spid int(11) NOT NULL,

firstname varchar(40),

primary key(`id`)

)ENGINE = MYISAM DEFAULT CHARSET=UTF8;

name与sname 中,name.pid 与 sname.spid 相关联

name 表数据:

sname 表数据

执行时当tablename1[(如果在后面单独附加有条件时)符合条件时]全部选择,在tablename2时如果没有相应的数据,则其列都显示为NULL

right join类似,只是角色反过来了

inner join (与 join 相同) 表示两个表都有的数据行

相当于 from tabname1,tabname2 where ? = ?

具体实例如下:

其实就是两表的笛卡尔积

用一个表的一行去乘另一个表的所有行,然后再换到一下行,重复相乘另一个表的所有行,直接这个表结尾

$sql = "select * from name, sname";

$result = mysql_query($sql, $link);

$i = 0;

echo '<table border="1" width="550">';

echo '<tr>';

echo '<th width="40">行号</th>';

echo '<th width="80">name表pid</th>';

echo '<th width="80">name表name</th>';

echo '<th width="80">sname表id</th>';

echo '<th width="100">sname表spid</th>';

echo '<th width="140">sname表firstname</th>';

echo '</tr>';

while($row = mysql_fetch_assoc($result))

{

$i++;

echo '<tr>';

echo '<td>'.$i.'</td>';

echo '<td>'.$row['pid'].'</td>';

echo '<td>'.$row['name'].'</td>';

echo '<td>'.$row['id'].'</td>';

echo '<td>'.$row['spid'].'</td>';

echo '<td>'.$row['firstname'].'</td>';

echo '</tr>';

}

echo '</table>';

结果为:

其实就是选择两边都有的字段,且满足 where 条件

$sql = "select * from name, sname where name.pid = sname.spid";

$result = mysql_query($sql, $link);

$i = 0;

echo '<table border="1" width="550">';

echo '<tr>';

echo '<th width="40">行号</th>';

echo '<th width="80">name表pid</th>';

echo '<th width="80">name表name</th>';

echo '<th width="80">sname表id</th>';

echo '<th width="100">sname表spid</th>';

echo '<th width="140">sname表firstname</th>';

echo '</tr>';

while($row = mysql_fetch_assoc($result))

{

$i++;

echo '<tr>';

echo '<td>'.$i.'</td>';

echo '<td>'.$row['pid'].'</td>';

echo '<td>'.$row['name'].'</td>';

echo '<td>'.$row['id'].'</td>';

echo '<td>'.$row['spid'].'</td>';

echo '<td>'.$row['firstname'].'</td>';

echo '</tr>';

}

echo '</table>';

如果用 join,inner join 结果是一样的,即

$sql = "select * from name (inner) join sname on name.pid = sname.spid"

以下是用 left join

其实就是选择左边所有的数据,如果右边没有与左边相关的就为NULL

$sql = "select * from name left join sname on name.pid = sname.spid";

$result = mysql_query($sql, $link);

$i = 0;

echo '<table border="1" width="550">';

echo '<tr>';

echo '<th width="40">行号</th>';

echo '<th width="80">name表pid</th>';

echo '<th width="80">name表name</th>';

echo '<th width="80">sname表id</th>';

echo '<th width="100">sname表spid</th>';

echo '<th width="140">sname表firstname</th>';

echo '</tr>';

while($row = mysql_fetch_assoc($result))

{

$i++;

echo '<tr>';

echo '<td>'.$i.'</td>';

echo '<td>'.$row['pid'].'</td>';

echo '<td>'.$row['name'].'</td>';

echo '<td>'.$row['id'].'</td>';

echo '<td>'.$row['spid'].'</td>';

echo '<td>'.$row['firstname'].'</td>';

echo '</tr>';

}

echo '</table>';

right join 正好相反

其实就选择右表的所有数据,如果左边没有相关的就为NULL

$sql = "select * from name right join sname on name.pid = sname.spid";

$result = mysql_query($sql, $link);

$i = 0;

echo '<table border="1" width="550">';

echo '<tr>';

echo '<th width="40">行号</th>';

echo '<th width="80">name表pid</th>';

echo '<th width="80">name表name</th>';

echo '<th width="80">sname表id</th>';

echo '<th width="100">sname表spid</th>';

echo '<th width="140">sname表firstname</th>';

echo '</tr>';

while($row = mysql_fetch_assoc($result))

{

$i++;

echo '<tr>';

echo '<td>'.$i.'</td>';

echo '<td>'.$row['pid'].'</td>';

echo '<td>'.$row['name'].'</td>';

echo '<td>'.$row['id'].'</td>';

echo '<td>'.$row['spid'].'</td>';

echo '<td>'.$row['firstname'].'</td>';

echo '</tr>';

}

echo '</table>';

union把选择的数据组合返回

AS:

select colname1...

union [ALL | DISTINCT]

select colname2....

union 一般要求选择的字段数目相同,对应的字段类型也得相同.

在mysql 5.1版本中

如果union连接的字段数不相等,则报错,如果字段数相同,字段类型不同,以返回的结果全部填充在第一个 select 的字段中

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。