pg数据库多表查询(inner)和级联查询
一、数据库的多表连接查询,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)和级联查询相关推荐
- mapper同时添加数据只能添加一条_Mybatis第二章——多表同时插入和级联查询
Mybatis第二章--多表同时插入和级联查询 知识点一:多表同时插入,其中要插入的Blog的数据中的author_id依赖于另一个要插入的author对象的id 此时需要在mapper.xml文件中 ...
- 级联查询ajax,ajax级联查询
Ajax实现级联查询, 1. 级联查询 要求:根据选择的省份,来查出该省包含的一些城市 window.onload = function(){ var citySelect = document.ge ...
- oracle遍历表做查询,oracle 语句之对数据库的表名就行模糊查询,对查询结果进行遍历,依次获取每个表名结果中的每个字段(存储过程)...
语句的执行环境是plsql的sql窗口, 语句的目的是从整个数据库中的所有表判断 不等于某个字段的记录数 . 代码如下: declare s_sql clob:=''; -- 声明一个变量,该变量用于 ...
- ThinkPHP 数据库多表联查 where多条件查询
数据库多表联查 Db::table('think_artist') ->alias('a') // alias 表示命名数据库的别称为a ->join('think_work w','a. ...
- pid级联查询mysql_实现级联查询
标签: 关于数据库设计中的分级分层问题的总结(适用于组织结构图及家谱等问题) 大家在很多地方都会遇到诸如此类的问题,如: 在一个组织中,从高层领导到中层领导到普通职工,有着一种分级的关系,这些关系在关 ...
- mysql级联查询_mysql 各种级联查询后更新(update select)
mysql 各种级联查询后更新(update select). CREATE TABLE `tb1` ( `id` int(11) NOT NULL, `A` varchar(100) defaul ...
- db2 删除schema中所有表_常用SQL系列之(六):删除方式、数据库、表及索引元信息查询等...
本系统为@牛旦教育IT课堂在微头条上的内容, 为便于查阅,特辑录于此,都是常用SQL基本用法.. 前两篇连接: (一):SQL点滴(查询篇):数据库基础查询案例实战 (二):SQL点滴(排序篇):数据 ...
- 使用oracle数据库建表语句,怎么使用sql查询oracle建表语句
SELECT CREATETION AS "年份" ,SUM(DATE_ROW01) AS "01月" ,SUM(DATE_ROW02) AS "02 ...
- MyBatis实现级联查询及逆向生成
MyBatis实现级联查询及逆向生成 一,级联查询 1.级联查询 N-1 以多的一方为主表 接口 //级联查询 N-1List<Emp> selectEmp(Map map); 映射文 ...
- Spring boot读取Excel并存入PG数据库(一)
Spring boot读取Excel并存入PG数据库(一) 目录 一.前言 二.项目需求 三.数据库表设计 四.代码实现和测试 五.总结 一.前言 进入9月以来,一直忙于项目,特别是临近国庆节这半个月 ...
最新文章
- php读取远程二进制文件,php 读取二进制文件
- 【译】Thoughts and Goals on Qtum's x86 VM
- oracle 事务_从Oracle到PG-PostgreSQL的MVCC机制简介
- 如何把表格做成源代码_他来了,他来了,文字、表格、公式图片识别神器V0.1测试版...
- 用 #inculde file = ../fiel 报1031错误
- Python垃圾回收和内存管理
- pytorch-sequencelabeling是一个支持softmax、crf、span等模型,注于序列标注(命名实体识别、词性标注、中文分词)的轻量级自然语言处理工具包,包含数据与实验
- 计算机学不学工程制图,如何学好工程制图
- MATLAB的PID调节器
- 1.java基础 jdk,jre,jvm作业 - 答案(jdk,jre,jvm)
- AID自定义桌面图标
- Qt下载安装教程,windows10亲测可用,版本5.12.11
- docker最新版本发布,附面试答案
- 假期培训日记(数论)
- 通过javascript获取sharepoint数据,使用JS导出Excel
- 2021年育婴员(五级)复审考试及育婴员(五级)实操考试视频
- “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛——G.养花【网络流】
- 新款云开发趣味测试小程序源码+功能超多
- 华硕笔记本电脑拆机清理灰尘涂抹硅汁教程
- 丰泽区python培训机构
热门文章
- 乔布斯传记概览:乔布斯18个让人着迷的地方
- 乔布斯一生中的3次阴差阳错、柳暗花明
- bug:刷机卡Logo界面,adb shell 报- exec '/system/bin/sh' failed: No such file or directory (2) -
- 惠普打印机驱动服务器系统安装教程,最简单的安装惠普1020打印机驱动的方法...
- Dz插件-Discuz插件-免费Discuz采集伪原创发布插件
- (面试总结)您不清楚的18个非技术面试题---今天教你巧妙回答
- 平民版均线量化交易模型
- 基于ricequant隐马尔科夫模型量化交易
- C/C++程序员桌面壁纸---简尚黑
- Bjui前端框架文档链接