一、数据库的多表连接查询,inner的不同用法

在pg数据库中建立两张表:

t_a和t_b如下所示:

t_a:

t_b:

1、inner join(内连接)

inner join就是根据on字段标示出来的条件,查询关联的表中符合条件的数据,并把他前部都显示出来,形成一个结果集。

执行如下语句:

select * from t_a inner join t_b on t_a.adi=t_b.bid

得到的结果为:

这样的查询会显示出所有的数据,如果我们仅仅需要一部分的数据(例如我们只想查出t_a中所有aid和t_b中的bid相同的数据),那么查询语句应该变成:

select t_a.* from t_a inner join  t_b on t_a.aid=t_b.bid

那么得到的数据如下所示,就只显示了t_a表中的数据。如下:

要排除重复的数据,在select后加distinct即可。

2、left join

left join 就是以表t_a为基础从右表t_b中查询出所有符合on条件的结果,在合并到表t_a中对应的部分,再作为一个结果集输出,在结果集中,会显示出表t_a中的所有数据。

执行如下查询语句:

select * from t_a left join t_b on t_a.aid=t_b.bid

得到如下结果:

可以看到,在查询的结果中,有一行关于表t_b的数据都为null,因为表t_b中没有符合on条件的数据。但是表t_a表显示出了全部的数据。那么在需要筛选的时候,应该着重于筛选表t_b中的数据,如果执行如下的语句:

select t_a.* from t_a left join  t_b on t_a.aid=t_b.bid

那么得到的就是表t_a中的所有数据,那么这个查询就显得没有意义了。

3、right join

right join 就是以表t_b为基础从左表t_a中查询出所有符合on条件的结果,在合并到表t_b中对应的部分,再作为一个结果集输出,在结果集中,会显示出表t_b中的所有数据。

执行如下查询语句:

select * from t_a right join t_b on t_a.aid=t_b.bid

得到的结果为:

可以看到,查询的结果中,有两行数据在表t_a的对应部分都是null的,表示表t_a中没有符合on条件的数据,但是表t_b显示了全部的数据,那么需要做条件筛选的时候,我们就应该主要针对表t_a进行筛选。

二、查询一个父级的所有子级(包括子级的子级)

在pg数据库中建立一张表t_c如下:

要查出cid为1的所有的子级、包括cid为2、3、5的子级的集合。执行以下sql语句

with recursive tb as(select * from t_c where parent_id='1' union all select t_c.* from t_c,tb where t_c.parent_id=tb.cid )select * from tb

得到如下的结果:

由查询出的结果集可以看到,我们查询出了除了父级(cid为1)以外的所有cid为父级的子级以及子级的子级。

我们来解析一下这个sql语句:

显而易见的,这是一个递归的查询方法。首先是with为查询语句提供了辅助功能,可以看做是查询语句中的临时表,其次recursive是sql中递归的关键字,只有有了这个关键字,pg才知道with这个语句需要做递归操作。union all是去重的,t_c.parent_id=tb.cid 表示了t_c的parent_id要等于临时表tb的cid要在整个with语句的外面查询建立的临时表tb,才能得到所有的子级的集合。

pg数据库多表查询(inner)和级联查询相关推荐

  1. mapper同时添加数据只能添加一条_Mybatis第二章——多表同时插入和级联查询

    Mybatis第二章--多表同时插入和级联查询 知识点一:多表同时插入,其中要插入的Blog的数据中的author_id依赖于另一个要插入的author对象的id 此时需要在mapper.xml文件中 ...

  2. 级联查询ajax,ajax级联查询

    Ajax实现级联查询, 1. 级联查询 要求:根据选择的省份,来查出该省包含的一些城市 window.onload = function(){ var citySelect = document.ge ...

  3. oracle遍历表做查询,oracle 语句之对数据库的表名就行模糊查询,对查询结果进行遍历,依次获取每个表名结果中的每个字段(存储过程)...

    语句的执行环境是plsql的sql窗口, 语句的目的是从整个数据库中的所有表判断 不等于某个字段的记录数 . 代码如下: declare s_sql clob:=''; -- 声明一个变量,该变量用于 ...

  4. ThinkPHP 数据库多表联查 where多条件查询

    数据库多表联查 Db::table('think_artist') ->alias('a') // alias 表示命名数据库的别称为a ->join('think_work w','a. ...

  5. pid级联查询mysql_实现级联查询

    标签: 关于数据库设计中的分级分层问题的总结(适用于组织结构图及家谱等问题) 大家在很多地方都会遇到诸如此类的问题,如: 在一个组织中,从高层领导到中层领导到普通职工,有着一种分级的关系,这些关系在关 ...

  6. mysql级联查询_mysql 各种级联查询后更新(update select)

    mysql  各种级联查询后更新(update select). CREATE TABLE `tb1` ( `id` int(11) NOT NULL, `A` varchar(100) defaul ...

  7. db2 删除schema中所有表_常用SQL系列之(六):删除方式、数据库、表及索引元信息查询等...

    本系统为@牛旦教育IT课堂在微头条上的内容, 为便于查阅,特辑录于此,都是常用SQL基本用法.. 前两篇连接: (一):SQL点滴(查询篇):数据库基础查询案例实战 (二):SQL点滴(排序篇):数据 ...

  8. 使用oracle数据库建表语句,怎么使用sql查询oracle建表语句

    SELECT CREATETION AS "年份" ,SUM(DATE_ROW01) AS "01月" ,SUM(DATE_ROW02) AS "02 ...

  9. MyBatis实现级联查询及逆向生成

    MyBatis实现级联查询及逆向生成 一,级联查询 1.级联查询 N-1 ​ 以多的一方为主表 接口 //级联查询 N-1List<Emp> selectEmp(Map map); 映射文 ...

  10. Spring boot读取Excel并存入PG数据库(一)

    Spring boot读取Excel并存入PG数据库(一) 目录 一.前言 二.项目需求 三.数据库表设计 四.代码实现和测试 五.总结 一.前言 进入9月以来,一直忙于项目,特别是临近国庆节这半个月 ...

最新文章

  1. php读取远程二进制文件,php 读取二进制文件
  2. 【译】Thoughts and Goals on Qtum's x86 VM
  3. oracle 事务_从Oracle到PG-PostgreSQL的MVCC机制简介
  4. 如何把表格做成源代码_他来了,他来了,文字、表格、公式图片识别神器V0.1测试版...
  5. 用 #inculde file = ../fiel 报1031错误
  6. Python垃圾回收和内存管理
  7. pytorch-sequencelabeling是一个支持softmax、crf、span等模型,注于序列标注(命名实体识别、词性标注、中文分词)的轻量级自然语言处理工具包,包含数据与实验
  8. 计算机学不学工程制图,如何学好工程制图
  9. MATLAB的PID调节器
  10. 1.java基础 jdk,jre,jvm作业 - 答案(jdk,jre,jvm)
  11. AID自定义桌面图标
  12. Qt下载安装教程,windows10亲测可用,版本5.12.11
  13. docker最新版本发布,附面试答案
  14. 假期培训日记(数论)
  15. 通过javascript获取sharepoint数据,使用JS导出Excel
  16. 2021年育婴员(五级)复审考试及育婴员(五级)实操考试视频
  17. “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛——G.养花【网络流】
  18. 新款云开发趣味测试小程序源码+功能超多
  19. 华硕笔记本电脑拆机清理灰尘涂抹硅汁教程
  20. 丰泽区python培训机构

热门文章

  1. 乔布斯传记概览:乔布斯18个让人着迷的地方
  2. 乔布斯一生中的3次阴差阳错、柳暗花明
  3. bug:刷机卡Logo界面,adb shell 报- exec '/system/bin/sh' failed: No such file or directory (2) -
  4. 惠普打印机驱动服务器系统安装教程,最简单的安装惠普1020打印机驱动的方法...
  5. Dz插件-Discuz插件-免费Discuz采集伪原创发布插件
  6. (面试总结)您不清楚的18个非技术面试题---今天教你巧妙回答
  7. 平民版均线量化交易模型
  8. 基于ricequant隐马尔科夫模型量化交易
  9. C/C++程序员桌面壁纸---简尚黑
  10. Bjui前端框架文档链接