PostgreSQL使用(四)——数据查询

说明:对于一门SQL语言,数据查询是我们非常常用的,也是SQL语言中非常大的一块。本文介绍PostgreSQL使用中的数据查询,如有一张表,内容如下:

在这里插入图片描述

简单查询

--- 1.查询某张表的全部数据
select * from tb_student;-- 2.查询某张表的指定字段
select id, name from tb_student;-- 3.给字段、表取别名查询,as可省略
select ts.id as 编号, ts.name as 姓名 from tb_student as ts;

单表指定条件查询

-- 1.查询指定记录,如id = 1
select * from tb_student where id = 1;-- 2.in查询,如id为1、2、3的记录
select * from tb_student where id in (1, 2, 3);-- 3.between and查询,如生日在1990年1月1日到2月1日之间的记录
select * from tb_student where birthdate between '1990-01-01' and '1990-02-01';-- 4.like模糊查询,如姓名以“李”开头的记录
select * from tb_student where name like '李%';

其中通配符%为匹配任意个字符,_为匹配一个字符,如

  • 李%:表示以李开头的记录;

  • %李%:表示字段中包含李的记录;

  • 李_:表示字段为两个字符,且第一个为李的记录;

单表指定条件复杂查询操作

-- 1.查询空值内容,如生日为空的记录
select * from tb_student where birthdate is null;-- 2.and、or多条件查询,如生日不为空并且姓名为“小何”的记录
select * from tb_student where birthdate is not null and name = '小何';-- 3.查询结果集排序,其中默认升序,asc可省略,desc表示降序
select * from tb_student order by id;-- 4.查询结果集排序,根据生日进行降序排序,null值排在最后,nulls first表示null值排在最前,默认是nulls last
select * from tb_student order by birthdate desc nulls last ;-- 5.limit关键字查询,按照成绩降序,取前3名
select * from tb_student order by score desc limit 3;-- 6.limit关键字查询,按照id排序,从第3个记录开始,取3条记录
select * from tb_student order by id limit 3 offset 2

注意事项:

  • 判断某个字段不为空或为空,不能写成 != null或者=null

  • order by 可指定多个字段,如order by id, score desc,表示按照id升序排序,id相同按照score降序排序;

  • limit 3 offset 2可实现分页功能,传递当前页码,每页显示条数,换成下面这个SQL即可

select * from tb_student limit 每页显示条数 offset (当前页码 - 1) * 每页显示条数

多表连接查询

创建一张班级表,学生表里新增一个班级字段,表示该学生所属的班级信息,如下:

(班级表)

在这里插入图片描述

(学生表,新增一个班级字段,表示所属班级的id)

在这里插入图片描述

-- 1.inner join查询,查交集,两个表中都能匹配上的,即每个学生都有班级的记录
select * from tb_student inner join tb_class on tb_student.class_id = tb_class.id;-- 2.left join,取左表全部数据与右表匹配,匹配不上的数据右侧补空,即全部的学生记录,学生的班级在班级表中匹配不上的补空
select * from tb_student left join tb_class on tb_student.class_id = tb_class.id;-- 3.right join,取右表全部数据与左表匹配,匹配不上的数据左侧补空,即全部的班级记录,班级信息在学生表中匹配不上的补空
select * from tb_student right join tb_class on tb_student.class_id = tb_class.id;

inner join 查询结果如下,取学生表和班级表里的交集记录;

在这里插入图片描述

left join 查询结果如下,取全部学生表与班级表的记录,匹配不上的班级用null填充;

在这里插入图片描述

right join 查询结果如下,取全部班级表与学生表的记录,匹配不上的学生用null填充;

在这里插入图片描述

子查询

-- 1.exists查询,查询学生表中在班级表中存在的记录
select * from tb_student where exists (select * from tb_class where tb_student.class_id = tb_class.id);-- 2.in关键字子查询,功能同上
select * from tb_student where class_id in (select id from tb_class);-- 3.标量子查询,查询学生表中班级名为“高一(1)班”的记录
select * from tb_student where class_id = (select id from tb_class where name = '高一(1)班');

标量子查询,指的是将一个查询的结果作为另一个查询的值来使用;

查询结果集合并

对于多个查询结果集合并,可使用union allunion,如下:

-- 1.union all合并,结果不去重,速度快
select * from tb_student where class_id in (1,2) union all select * from tb_student where birthdate is not null;-- 2.union 合并,结果去重,速度慢
select * from tb_student where class_id in (1,2) union select * from tb_student where birthdate is not null;

union all查询结果,有重复数据:

在这里插入图片描述

union查询结果,无重复数据:

在这里插入图片描述

需要注意,合并的结果集字段数量需要相等,如果不一样多,可以在字段少的那边加上null字段,使其相等。如下,我在两张表左右各自新增一个null字段:

在这里插入图片描述

总结

本文介绍了PostgreSQL使用中的数据查询,参考下面视频:

  • 一天学完 PostgreSQL

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/50209.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Qt】QLabel常用属性相关API

QLabel是Qt框架中用于显示文本或图案的小部件。在Qt应用程序中,QLabel是用来呈现静态文本或图像给用户的重要部分 QLabel属性陈列 属性说明textQLabel中的文本内容textFormat 文本的格式 Qt::PlainText 纯文本Qt::RichText 富文本Qt::MarkdownText markdown…

管理和监控 Oracle 数据库中的会话和进程,以及终止特定的会话

select username,count(username) from v$session where username is not null group by username;• 作用: 统计每个用户的当前会话数量。 • 介绍: 从 v$session 视图中选择 username 和 username 的计数,并对不为空的 username 进行分组。 SELECT sid, serial#,…

IntelliJIDEA------简介

IntelliJ IDEA 14是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支 持、Ant、JUnit、CVS整合、代码审查、 创新的GUI设计等方面的功能可以说是超常的。 IntelliJ IDEA特色功能 IDEA所提倡的…

【数据结构】排序算法(冒泡排序、插入排序、希尔排序、选择排序、堆排序、计数排序)

生命不可能有两次,但许多人连一次也不善于度过。💓💓💓 目录 ✨说在前面 🍋知识点一:排序的概念和应用 • 🌰1.排序及其概念 • 🌰2.排序的应用 • 🌰3.常见的排序算…

php 箭头函数详解

PHP 的箭头函数(也称为匿名函数或闭包函数)是一种简洁的定义单表达式函数的方法。这种语法是从 PHP 7.4 版本开始引入的,它使得创建简短的一次性使用的函数变得更加方便。 基本语法 箭头函数的基本语法如下: fn($parameters) &…

qt做的分页控件

介绍 qt做的分页控件 如何使用 创建 Pagination必须基于一个QWidget创建,否则会引发错误。 Pagination* pa new Pagination(QWidget*);设置总页数 Pagination需要设置一个总的页数,来初始化页码。 pa->SetTotalItem(count);设置可选的每页数量…

前端养成记-实现一个低配版简单版本的vue3表单自定义设计组件

简介: 通过使用了最新的vue3,vite2,TypeScript等主流技术开发,并配合使用vuedraggable 插件以及antd design vue 组件库实现低配版本的自定义表单设计组件; 项目地址:https://gitee.com/hejunqing/vue3-antdv-generator

PyTorch模型训练步步详解:从零开始构建深度学习流程

P y T o r c h 训练模型流程图 PyTorch训练模型流程图 P y T orc h 训练模型流程图

Python面试宝典第20题:精选问答题

题目1 解释Python中的GIL是什么,它是如何影响多线程程序的? 题目2 Python中的装饰器是什么,如何定义和使用一个装饰器? 题目3 Python中的迭代器和生成器有什么区别,并提供一个使用生成器的例子。 题目4 谈一谈你对Pyth…

非凸T0算法,如何获取超额收益?

什么是非凸 T0 算法? 非凸 T0 算法基于投资者持有的股票持仓,利用机器学习等技术,短周期预测,全自动操作,抓取行情波动价差,增厚产品收益。通过开仓金额限制、持仓时长控制等,把控盈亏风险&…

学习笔记:MySQL数据库操作5

1. 触发器(Triggers) 触发器是数据库的一种高级功能,它允许在执行特定数据库操作(如INSERT、UPDATE、DELETE)之前或之后自动执行一段代码。 1.1 创建商品和订单表 商品表(goods) gid: 商品编号…

会话存储、本地存储,路由导航守卫、web会话跟踪、JWT生成token、axios请求拦截、响应拦截

1、会话存储、本地存储 前端浏览器中存储用户信息,会话存储、本地存储、cookie 会话存储(sessionStorage):会话期间存储,关闭浏览器后,数据就会销毁 sessionStorage.setItem("account",resp.d…

反射型与dom型的xss的区别【源码分析】

反射型 XSS 和 DOM 型 XSS 都属于跨站脚本攻击 (XSS) 的类型,它们的共同点是均能通过注入恶意脚本在用户浏览器中执行,不同点是dom型xss不经过服务器,而反射型是经过服务器的。但是,它们在攻击方式、执行过程和防御措施上有所不同…

flask后端+vue前端——后端怎么发文件给前端?

首先,前端axios请求的responseType要设置为blob const service axios.create({baseURL: http://127.0.0.1/api,timeout: 5000});//向后端发送数据,后端根据这个数据data生成文件返回send_coordinate(data){return service.post(/,data,{responseType: …

c++栈笔记

一种常见的数据结构&#xff0c;遵循后进先出&#xff0c;先进后出的原则。地址不连续&#xff0c;栈顶&#xff08;top&#xff09; 1.常见函数 stack<int> s;定义一个参数类型为int 的栈 名为ss.push()向栈中插入元素s.emplace()压栈&#xff0c;无返回值s.pop()删除…

@SpingFrameWork

SpingFrameWork 一、技术体系结构 单一架构&#xff0c;一个大的项目&#xff0c;一个工程&#xff0c;导出war包在一个tomcat上运行&#xff08;主要用spring、springMVC、Mybatis&#xff09;分布式架构&#xff0c;一个项目&#xff0c;但是有多个模块&#xff0c;但是每个…

摆脱想得太多做得太少的困境,拥抱财富与成功

在生活的舞台上,我们常常目睹这样的场景:有些人怀揣着美好的梦想和周全的计划,却始终未能迈出实质性的步伐,最终被困顿的现状所束缚。就如同那位卖豆腐的人,每日在夜里为自己编织着绚烂的未来蓝图,却在黎明来临时,依旧重复着昨日卖豆腐的生活,一辈子在原地徘徊,无法挣…

Servlet2-HTTP协议、HttpServletRequest类、HttpServletResponse类

目录 HTTP协议 什么是HTTP协议 HTTP协议的特点 请求的HTTP协议格式 GET请求 POST请求 常用的请求头说明 哪些是GET请求&#xff0c;哪些是POST请求 响应的HTTP协议格式 常见的响应码说明 MIME类型说明 HttpServletRequest类 作用 常用方法 如何获取请求参数 po…

IP 泄露: 原因与避免方法

始终关注您的IP信息&#xff01; 您的IP地址不仅显示您的位置&#xff0c;它包含几乎所有的互联网活动信息&#xff01; 如果出现IP泄漏&#xff0c;几乎所有的信息都会被捕获甚至非法利用&#xff01; 那么&#xff0c;网站究竟如何追踪您的IP地址&#xff1f;您又如何有效…

Layui---输入事件

输入实时监听 //监听表单单选框复选框选择 form.on(radio, function (data) {console.log(data.value); //得到被选中的值 });//监听表单下拉菜单选择form.on(select, function (data) //监听表单下拉菜单选择form.on(select, function (data) ​ //监听表单复选框选择form.…