Oracle 联表查询

笔者本是个Android开发工程师,处于工作需要不得不去客串几天java后台,谢谢接口。

以下是在写接口时用到的一个功能点,叫做联表查询,虽然不是我Android端的知识,但毕竟也是自己不懂的东西,总结下来吧。

联表查询,顾名思义,指的是结合多张数据库表进行查询,取两张表的内容结合成一个视图返回。

在我的项目中,使用的是Spring Boot框架。

下面用一个例子来简单说一下联表查询怎么用,sql语句怎么写。

两张表如下:

表1-IPERMISSION表
Oracle 联表查询_第1张图片

表2-IINTERFACE表
Oracle 联表查询_第2张图片

比如我们的目的是查询表1中所有ID=1的数据,并根据表1的IPERMISSION 字段的值作为表2的ID查询表2中的INTER_NAME字段的值。

下面是两种思路,即两种写法:

写法一:

select a.GROUPING,a.IPERMISSION,b.INTER_NAME
from IPERMISSION a, IINTERFACE b
where a.IPERMISSION = b.ID
and a.GROUPING = 1;

思路如下(帮助理解的sql语句,实际每一步并不一定能单独运行):
首先写sql语句select * from IPERMISSION a, IINTERFACE b,查询两张表所有字段,分别给两张表起个别名叫 a 和 b。
然后,要开始写条件了。这里有两个条件,因为两个表中一定会有个字段是有联系的,就像表1的IPERMISSION和表2的ID,这两个字段的值是相等的关联字段,即 a.IPERMISSION = b.ID,这是第一个条件。然后我们想要查表1中ID 为1的所有记录,所以第二个条件是 a.ID=1。
根据上面两个条件,补上where a.IPERMISSION = b.ID and a.GROUPING = 1这段sql语句。
最后,我们想要查所有字段中的三个字段的值,其他的不需要,所以将sql中的 “*”改成自己想要的字段名字就ok啦。
写法二:

select 
a.GROUPING,a.IPERMISSION,
(SELECT b.INTER_NAME FROM INTERFACE b WHERE b.ID = a.IPERMISSION) INTER_NAME
from 
T_IPERMISSION a
where a.GROUPING = 1;

这种方法叫子查询,也很好理解,首先写sql:

select 
*
from 
T_IPERMISSION a
where a.GROUPING = 1;

从第一个表中查询所有GROUPING=1的值,并给表1起个别名叫 a。

然后,将 “*” 更换成子查询语句

SELECT b.INTER_NAME 
FROM INTERFACE b 
WHERE b.ID = a.IPERMISSION

同样给表2起了个别名叫 b,而且设置了查询条件 b.ID = a.IPERMISSION。

到这里,直接执行得到的只有一个字段。我们想要三个字段,因此还需要在子查询语句的位置补全其他两个字段a.GROUPING,a.IPERMISSION
写到这里,基本就已经完成了 但是你会发现第三个字段(表2的INTER_NAME )的字段名居然是子查询的sql语句,这显然不是我们要的结果,而且这样的话我将结果传回前端界面,他们解析也会很费劲,因为键的名字太长了。所以最后,给子查询sql语句一个别名“INTER_NAME”,这也就是我在子查询语句后面跟了“INTER_NAME”的原因。

总结就到这里。我个人觉得还算好理解,今天的接口 ,没白写。

你可能感兴趣的:(java)