SQLSERVER 多表联合查询(join)

前言:

项目中要写个存储过程,从4个表中各获取一个字段值,然后返回。

我这SQLSERVER的三脚猫功夫,上来乱整一顿,别说乱拳打死老师傅,差点把自己弄死!

用法:

使用 INNER JOIN(内连接),我们还可以使用其他几种连接。

下面列出了您可以使用的 JOIN 类型,以及它们之间的差异。

  • JOIN: 如果表中有至少一个匹配,则返回行
  • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN: 只要其中一个表中存在匹配,就返回行

示例代码:

先抛块砖(不用想了,这么‘无敌’的写法肯定是我写的了)

select ta1.no,ta1.name1,ta2.name2,ta3.name3,ta4.name4 from
(select no,name1 from table1)as ta1,
(select no,name2 from table2)as ta2,
(select no,name3 from table3)as ta3,
(select no,name4 from table4)as ta4
where ta1.no=ta2.no and ta1.no=ta3.no and ta1.no=ta4.no

经高人指点,原来还有join这个东西,羞愧中。。。

SELECT ta1.no,
       ta1.name1,
       ta2.name2,
       ta3.name3,
       ta4.name4
FROM   table1 AS ta1 
    INNER JOIN table2 ta2 ON ta1.no=ta2.no
    INNER JOIN table3 ta3 ON ta1.no=ta3.no
    INNER JOIN table4 ta4 ON ta1.no=ta4.no 

以为大功告成,原来还早~

需要是有数据时返回查询所得,不满足条件时返回默认值,加上 left join 和 isnull的用法

最终方法

SELECT ta1.no,
       ISNULL(ta1.name1,0),
       ISNULL(ta2.name2,0),
       ISNULL(ta3.name3,0),
       ISNULL(ta4.name4,0)
FROM   table1 AS ta1 
    LEFT JOIN table2 ta2 ON ta1.no=ta2.no
    LEFT JOIN table3 ta3 ON ta1.no=ta3.no
    LEFT JOIN table4 ta4 ON ta1.no=ta4.no

 

 

你可能感兴趣的:(数据库)