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使用中的数据查询,参考下面视频:

  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何中应

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值