【postgresql 基础入门】数据表的查询基本知识,条件过滤、单列多列排序、按页浏览数据、数据去重,得到你想要的数据

这篇具有很好参考价值的文章主要介绍了【postgresql 基础入门】数据表的查询基本知识,条件过滤、单列多列排序、按页浏览数据、数据去重,得到你想要的数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

查询数据

专栏内容

  • postgresql内核源码分析
  • 手写数据库toadb
  • 并发编程

开源贡献

  • toadb开源库

个人主页:我的主页
管理社区:开源数据库
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.

系列文章

  • 入门准备
  • postgrersql基础架构
  • 快速使用
  • 初始化集群
  • 数据库服务管理
  • psql客户端使用
  • pgAdmin图形化客户端
  • 数据库的使用
  • 创建数据库
  • 数据库操作
  • 表的使用
  • 表的创建
  • 表的操作
  • 数据查询
  • 数据查询

前言

postgresql 数据库是一款通用的关系型数据,在开源数据库中能与商业数据媲美,在业界也越来越流行。

因为是开源数据库,不仅公开源码,还有很多使用案例,好用的插件,所以它的慢慢变成了数据库的先驱和标准,通过postgresql可以很好从使用到原理,彻底搞懂;

如果是学习编程,也可以学到丰富的编程知识,数据结构,编程技巧,它里面还有很多精妙的架构设计,分层思想,可以灵活定制的思想。

本专栏主要介绍postgresql 入门使用,数据库维护管理,通过这些使用来了解数据库原理,慢慢了解postgresql是什么样的数据库,能做那些事情,以及如何做好服务,最关键的是这些知识都是面试的必备项。

概要介绍

PostgreSQL是一种强大的开源关系数据库管理系统。在这个系统中,你可以使用SQL(Structured Query Language)来查询和操作数据。

本文将从以下几个方面来分享,如何使用SQL来查询数据,通过过滤,排序得到想要的数据,并且可以按需要的行数进行分批返回;

  • SELECT 语句的基本语法
  • WHERE 子句用于过滤数据
  • ORDER BY 子句用于排序数据
  • LIMIT 和 OFFSET 子句用于限制返回的数据量
  • DISTINCT 去重数据

SELECT 语句基本语法

在数据库中最复杂的SQL语句就是SELECT,语法解析的大部分代码都是处理它的各种子句及组合;
这里介绍它的最基本常用的语法格式;

语法

SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
    [ * | expression [ [ AS ] output_name ] [, ...] ]
    [ FROM from_item [, ...] ]
    [ WHERE condition ]
    [ ORDER BY expression [ ASC | DESC ] ]
    [ LIMIT { count | ALL } ]
    [ OFFSET start [ ROW | ROWS ] ]

准备数据

你可以使用以下的SQL语句在PostgreSQL中插入10000条随机数据:

CREATE TABLE tbl_company (  
    ID INT PRIMARY KEY NOT NULL,  
    NAME TEXT NOT NULL,  
    ADDRESS CHAR(50),  
    SALARY REAL,
    founded DATE
);
db_factory2=> INSERT INTO tbl_company (id, name, address, salary, founded)
SELECT
    generate_series(1, 10000) AS id,
    'Name ' || generate_series(1, 10000) AS name,
    'Address ' || generate_series(1, 10000) AS address,
    (random() * 100000)::REAL AS salary,
    CURRENT_DATE - (random() * 10 * INTERVAL '1 year') AS founded
ORDER BY id;
INSERT 0 10000

在这个语句中,我们使用了generate_series函数生成了一个从1到10000的序列,用于生成唯一的id。

然后,我们使用字符串连接操作符(||)和generate_series函数生成随机的姓名和地址。

接下来,我们使用random()函数生成一个范围在0到1之间的随机数,乘以100000后将其转换为REAL类型作为薪资。

最后,我们使用CURRENT_DATE减去一个范围在0到10之间的随机年份,以生成成立日期。

这样我们就有了10000条原始数据,下面我们来进行SQL查询分析吧;

基本用法

指定要查询的列名,从那张表里获取数据,SQL如下:

SELECT name, founded
FROM tbl_company;

也可以用*代替所有的列名

WHERE子句过滤数据

WHERE子句用于过滤SELECT语句返回的数据。基本语法如下:

SELECT column1, column2, ...
FROM table_name
WHERE condition;

示例:假设我们只想获取创立时间在2019年前的企业名称和ID:

SELECT id, name, founded FROM tbl_company WHERE founded < '2019-01-01';

当然可以带多个条件,条件之间可以用 AND 表示与的关系,OR 表示或的关系 进行串联;

ORDER BY子句排序

ORDER BY子句用于根据指定的列对SELECT语句返回的数据进行排序。基本语法如下:

SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...;

其中ASC表示按升序进行排列,也就是从小到大; DESC 表示按降序进行排列,也就是从大到小进行显示;

示例:假设按纳税额从降序排列:

select id, name, salary, founded from tbl_company order by salary desc;

当然也可以带有多个列的排序,数据库处理时会按order by 子句中的顺序,优先第一个,如果有相同的再按第二列进行排序,依次进行;

LIMIT和OFFSET按页返回

当按条件查询的结果非常多时,我们希望分批查看,这里就可以用limit 和 offset子句,达到分页显示的效果;

LIMIT子句用于限制SELECT语句返回的数据行数。基本语法如下:

SELECT column1, column2, ...
FROM table_name
LIMIT number_of_rows;

示例:我们获取纳税前五的企业信息

select id, name, salary, founded from tbl_company order by salary desc limit 5;

OFFSET子句与LIMIT子句一起使用,可以跳过指定数量的行。基本语法如下:

SELECT column1, column2, ...
FROM table_name
LIMIT number_of_rows OFFSET offset;

示例:我们获取纳税的第6到10名的企业信息

select id, name, salary, founded from tbl_company order by salary desc limit 5 offset 5; 

OFFSET子句与LIMIT子句的联合使用,可以达到翻页的效果,如果每页限制为100条;

-- page1
select id, name, salary, founded from tbl_company order by salary desc limit 100 offset 0; 

-- page2
select id, name, salary, founded from tbl_company order by salary desc limit 100 offset 100; 

-- page3
select id, name, salary, founded from tbl_company order by salary desc limit 100 offset 200; 

DISTINCT 去重数据

DISTINCT关键字用于从结果集中返回唯一的行。它可以用于单个列或多个列。

请注意,DISTINCT关键字适用于整个结果集,而不仅仅是选择的列; 这意味着在查询中使用DISTINCT时,所有选择的列的组合必须是唯一的。

为了演示,我们在tbl_company表中插入几行重复数据;

db_factory2=> insert into tbl_company values(10001, 'Name 1','Address 10001',8888,'2023-9-19');
INSERT 0 1
db_factory2=> insert into tbl_company values(10002, 'Name 10002','Address 1',8888,'2023-9-19');
INSERT 0 1
db_factory2=> insert into tbl_company values(10003, 'Name 10003','Address 10003',8888,'2023-9-19');
INSERT 0 1

结果集只有一列时

db_factory2=> select distinct name from tbl_company where id > 10000 or id < 10;
    name
------------
 Name 1
 Name 10002
 Name 10003
 Name 2
 Name 3
 Name 4
 Name 5
 Name 6
 Name 7
 Name 8
 Name 9
(11 rows)

可以看到结果中没有重复项,我们插入的id=10001与id=1的name列值是一样的,在结果集中进行了过滤;

结果集有多列时

db_factory2=> select distinct name, salary from tbl_company where id > 10000;
    name    | salary
------------+--------
 Name 1     |   8888
 Name 10002 |   8888
 Name 10003 |   8888
(3 rows)

查询namesalary两列数据,发现salary列还是有重复数据,但是对于两列的组合结果集来说,是没有重复行的;

下面是对于两列都有重复行的情况进行演示;

db_factory2=> select distinct  salary, founded from tbl_company where id > 10000;
 salary |  founded
--------+------------
   8888 | 2023-09-19
(1 row)

db_factory2=> select  salary, founded from tbl_company where id > 10000;
 salary |  founded
--------+------------
   8888 | 2023-09-19
   8888 | 2023-09-19
   8888 | 2023-09-19
(3 rows)

可以看到加DISTINCT与不加的效果,对于整行重复的都进行了过滤;

DISTINCT关键字 只能写在所有列的开始位置,因为它是针对所有列的结果集;

结尾

非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力!

作者邮箱:study@senllang.onaliyun.com
如有错误或者疏漏欢迎指出,互相学习。

注:未经同意,不得转载!文章来源地址https://www.toymoban.com/news/detail-727708.html

到了这里,关于【postgresql 基础入门】数据表的查询基本知识,条件过滤、单列多列排序、按页浏览数据、数据去重,得到你想要的数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL数据表查询

    😇作者介绍:一个有梦想、有理想、有目标的,且渴望能够学有所成的追梦人。 🎆学习格言:不读书的人,思想就会停止。——狄德罗 ⛪️个人主页:进入博主主页 🗼专栏系列:进入MySQL知识专栏 🌼欢迎小伙伴们访问到博主的文章内容,在浏览阅读过程发现需要纠正的地

    2024年02月11日
    浏览(72)
  • SQL Server多数据表之间的数据查询和分组查询

    在SQL中,多数据表之间的查询主要用于以下方面: 在SQL Server中,多数据表之间的数据查询主要用于以下几个方面: 关联数据提取 :现代数据库通常将数据分散在多个相关的表中以便于管理。例如,订单信息可能存储在一个表中,而客户信息可能存储在另一个表中。为了获取

    2024年01月24日
    浏览(62)
  • HBase数据表查询操作和获取多版本数据

    HBase数据模型是一个多维稀疏映射。 HBase中的表包含列族,其列限定符包含值和时间戳。在大多数 HappyBase API 中,列族和限定符名称被指定为单个字符串,例如cf1:col1,而不是作为两个单独的参数。虽然列族和限定符在 HBase 数据模型中是不同的概念,但它们在与数据交互时几

    2024年02月15日
    浏览(44)
  • MySQL数据库——MySQL SELECT:数据表查询语句

    在 MySQL 中,可以使用 SELECT 语句来查询数据。查询数据是指从数据库中根据需求,使用不同的查询方式来获取不同的数据,是使用频率最高、最重要的操作。 SELECT 的语法格式如下: 其中,各条子句的含义如下: {*|字段列名} 包含星号通配符的字段列表,表示所要查询字段的

    2024年02月05日
    浏览(80)
  • SQL Server 数据表模糊查询(like 用法)以及查询函数

    在SQL Server Management Studio (SSMS) 中,进行模糊查询主要是通过使用 like 操作符来实现的。 like 操作符用于在 where 语句中搜索列中具有指定模式的数据。 我们在简单例子中来了解: % 通配符:表示任意数量的字符。 这个例子会选择 column_name 列中包含\\\"pattern\\\"这个词的所有记录,就

    2024年01月22日
    浏览(78)
  • Mysql 查询数据库或数据表中的数据量以及数据大小

     许多数据库的元数据都是存储在mysql中的,例如hive、startrockes,因此可以通过mysql中的“information_schema.TABLES”表来查询对应数据库或对应数据表的具体信息。 1、查询各个数据库中的数据条数和数据大小 2、查询各个数据表中的数据条数和数据大小 3、查看指定数据库容量大小

    2024年04月27日
    浏览(57)
  • 8-MySQL查询高级用法,数据表的关联关系

    1.分组 group by 详情见,发布的第七篇博客文章,7- MySQL函数 2.排序 order by 说明: 在MySQL中,ORDER BY是一种用于对查询结果进行排序的。它可以根据一列或多列的值,以升序或降序的方式对查询结果进行排序,使得查询者可以更加方便 地查看、分析和处理数据。 使用OR

    2024年02月08日
    浏览(54)
  • 查询Oracle当前用户下,所有数据表的总条数

    查询Oracle当前用户下,所有数据表的总条数 方法1:存储过程 (文末有方法2,一个SQL也可轻松搞定!) 右键点击 Procedures ,点击 New 点击 OK 把存储过程写进去,然后点击编译运行: 3.2.1 方法一 方法2 点击File -- New -- Test Window 写入刚刚新增的存储过程 方法2:SQL select sum(t.NUM_RO

    2024年02月12日
    浏览(58)
  • SQL学习(六)--DML(针对数据表记录的查询操作)

    目录 一、 单表查询 小拓展: 数据准备: 1.   查询整张表的数据

    2023年04月27日
    浏览(57)
  • MySql基础教程(三):创建数据表、数据增删改查、删除数据表

    创建MySQL数据表需要以下信息: 表名 表字段名 定义每个表字段 1.1 语法 下面是创建MySQL数据表的SQL通用语法: 以下例子在 nobug 数据库中创建数据表 nobug_user : 实例解析: 如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,

    2024年02月11日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包