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

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

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

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

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

两张表如下:

表1-IPERMISSION表

表2-IINTERFACE表

比如我们的目的是查询表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”的原因。

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

Oracle 联表查询相关推荐

  1. Oracle.day01多表查询与联表查询

    -- 此时,只要exists中的查询结果有一条或一条以上的数据时,执行前面的语句.-- exists中的查询结果没有数据时,则不运行前面的语句. select * from sysuserwhere ...

  2. oracle数据库同时实现联表查询和分页查询(未明确定义列)

    ps:只是记录新手小白的脱坑之路,大佬勿喷 今天在做前端数据查询的时候,在实现联表查询的同时进行分页查询遇到了令人头秃的问题,分页查询的sql语句是这样的 select * from (select ...

  3. oracle联表更新语句

    oracle联表更新语句,此处为什么要写下来呢,因为信誓旦旦地用sql中的语句去更新oracle,发现不通用,但是查询可以.所以特意写下来,以免忘记或提醒需要的你们~~ 第一种: update lqp ...

  4. MysqlSQL语句2☞联表查询、自连接、分页和排序、子查询、常用函数、聚合函数、MD5加密

    联表查询 where等值查询 on 连接查询 1.内连接 SELECT `grade`,s.id,`name` FROM student [AS] s INNER JOIN result [AS] r ...

  5. Spring Hibernate JPA 联表查询 复杂查询

    (转自:http://www.cnblogs.com/jiangxiaoyaoblog/p/5635152.html) 今天刷网,才发现: 1)如果想用hibernate注解,是不是一定会用到jpa的 ...

  6. (转)MySQL联表查询

    资料源于网络 一.内联结.外联结.左联结.右联结的含义及区别 在SQL标准中规划的(Join)联结大致分为下面四种: 1.内联结:将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结. ...

  7. MYSQL 联表查询 ORDER 效率低?

    今天在处理一个分页时候,发现速度感人,点下一页等了半天.然后查看代码,发现是一个left jion语句. SELECT DISTINCT ordr.id,ordr.*,cf.nickname FROM ...

  8. 【explain】MySQL联表查询中的驱动表

    写在前面 1.不要求每个人一定理解 联表查询(join/left join/inner join等)时的mysql运算过程 2.不要求每个人一定知道线上(现在或未来)哪张表数据量大,哪张表数据量小 3 ...

  9. oracle查询第二个字为a,Oracle多表查询 - osc_yqnlq679的个人空间 - OSCHINA - 中文开源技术交流社区...

    本节剖析Oracle多表查询中的相关内容. 本文所用到的表为oracle中scott用户下的emp表,dept表,数据如下: 一.笛卡尔集: 概念:假设A,B是2个集合,A X B所形成的集合叫笛卡尔 ...

最新文章

  1. maven之setting.xml的配置详解
  2. 【转】真正从零开始,TensorFlow详细安装入门图文教程!(帮你完成那个最难的从0到1)...
  3. 全局变量、局部变量、静态全局变量、静态局部变量在内存里的区别(转)
  4. 安卓Dialog对话框多次显示而闪退的解决办法
  5. 2019蓝桥杯省赛---java---B---3(数列求值)
  6. python 查询包_查找Python包的依赖包(语句)
  7. Simulink之理想开关
  8. 开发者都应该知道的15个API
  9. 强烈推荐 16 款 IDEA 插件,让你的开发速度飞起来 | 原力计划
  10. clion eap 预览版 免费版
  11. NYOJ65 - 另一种阶乘问题
  12. Java I/O系统之Writer
  13. jQuery 省市区多级(三级/四级/五级。。。)联动 BY 凨来了
  14. 计算机环模实验报告,误差配套实验报告
  15. 小学计算机说课稿模板,获奖小学信息技术说课稿模板
  16. WebDriver与浏览器版本对应关系
  17. python分析掷骰子游戏
  18. 为什么Sql Server的查询有时候第一次执行很慢,第二次,第三次执行就变快了
  19. python自动化运维开发入门-张子夜-专题视频课程
  20. 【verilog】b站-[Verilog HDL] Installing and Testing Icarus Verilog + GTKWave 笔记

热门文章

  1. AUL 挖取11g UNDO段名称
  2. js中valueOf方法的使用
  3. STM32H750 QSPI FLASH使用小结
  4. np.corrcoef相关系数计算
  5. springcloud微服务架构开发实战:分布式消息总线
  6. ajax封装:get封装方式、post封装方式
  7. 查办总统丑闻的韩国检方受到黑客攻击
  8. Mysql数据库 root用户密码忘记怎么办?
  9. 基于Bmob云平台的android写日记带提醒功能
  10. 论文翻译:2000_wideband extension of telephone speech using a hidden Markov model