首页 > 其他分享 >【我和openGauss的故事】openGauss易知易会的几个实用特性

【我和openGauss的故事】openGauss易知易会的几个实用特性

时间:2023-07-31 19:01:43浏览次数:41  
标签:name sky email 实用 select openGauss com id 知易

【我和openGauss的故事】openGauss易知易会的几个实用特性

使用openGauss已经有很长一段时间了,本文将介绍几个简单易用的数据库特性。

  • 单列显示整行数据
  • where比较列合并
  • 独立写布尔列
  • using关键字
  • domain

单列显示整行数据

首先我们准备测试数据表:

create table users(id int,name text,email text,deleted_at timestamp,delete boolean);
insert into users values(1,'jerome','[email protected]',null,false);
insert into users values(2,'sara','[email protected]','2001-09-11',true);
insert into users values(3,'dolores','[email protected]',null,false);
insert into users values(4,'evan','[email protected]',null,false);

通常我们使用如下语句进行查询

openGauss#  select * from users;
 id |  name   |           email            |     deleted_at      | delete 
----+---------+----------------------------+---------------------+--------
  1 | jerome  | [email protected]    |                     | f
  2 | sara    | [email protected]       | 2001-09-11 00:00:00 | t
  3 | dolores | [email protected]              |                     | f
  4 | evan    | [email protected] |                     | f
(4 rows)

也可以使用下面的语句进行查询,尤其是列较多时

openGauss# select users from users;
                         users                         
-------------------------------------------------------
 (1,jerome,[email protected],,f)
 (2,sara,[email protected],"2001-09-11 00:00:00",t)
 (3,dolores,[email protected],,f)
 (4,evan,[email protected],,f)
(4 rows)

上面是将所有列作为行类型返回单列,可以比较简洁的返回数据。

where比较列合并

假设我们有以下查询:

select id, name, emailfrom userswhere name = 'dolores'  and email = '[email protected]';

根据名称和邮箱查询用户,有的时候where条件后面可能会出现1=1

select id, name, emailfrom userswhere 1=1  and name = 'dolores'  and email = '[email protected]';

应用层需要比较方便进行where条件拼接。

其实可以去掉and,使用如下语句:

select id, name, emailfrom userswhere (name, email) = ('dolores','[email protected]');

可以查询到同样的结果

我们还可以使用in来满足or条件,例如下面的查询:

select id, name, emailfrom userswhere deleted_at is nulland (     (name = 'dolores' and email = '[email protected]')     or     (name = 'evan' and email = '[email protected]'));

可以将其缩短为:

select id, name, emailfrom userswhere deleted_at is null and (name, email)  in (('dolores','[email protected]'),('evan','[email protected]'));

这可以使查询更短且更易于阅读。

独立写布尔列

接下来的查询,获取未删除的用户,比较常见的是这种写法:

select id, name, emailfrom userswhere delete =  false;

多数人并不知道布尔值不需要与另一个布尔值进行比较,可以这样写:

select id, name, emailfrom userswhere not delete;

这样阅读起来也更好,结果如下:

id |  name   |           email            ----+---------+----------------------------  1 | jerome  | [email protected]  3 | dolores | [email protected]  4 | evan    | [email protected](3 rows)

using关键字

当我们做多张表的join连接时,如果join字段的名称相同可以使用using关键字来简化语句

select ...  from  t1   join  t2    on  t1.id = t2.id;

可以改写为:

select ...  from  t1   join  t2 using  (id);

多个字段还可以使用逗号进行分隔:

on t1.a = t2.a and t1.b = t2.b

改写为

using (a,b);

domain

domain也是比较有用的一个特性,例如可以很多需要进行相同限制的列创建自定义类型:

create domain my_addr varchar(100) not null default 'n/a';

或者是作为别名支持兼容性数据类型:

create domain binary_float as float;

本文总结了几个有帮助的实用特性,大家在日常使用过程中可以进一步挖掘。

标签:name,sky,email,实用,select,openGauss,com,id,知易
From: https://blog.51cto.com/u_16191492/6911678

相关文章

  • 祝贺!openGauss社区技术委员会主席李国良当选2023 IEEE FELLOW
    祝贺!openGauss社区技术委员会主席李国良当选2023IEEEFELLOW[openGauss](javascript:void(0);)2022-11-2917:56发表于广东近日,IEEE(InstituteofElectricalandElectronicEngineers)公布了2023年度Fellow名单,全球共有319位学者入选,华人学者占104位(约占总人数的31%)。其中,openGa......
  • openGauss获2022年度创新产品奖!
    openGauss获2022年度创新产品奖![openGauss](javascript:void(0);)2022-12-2920:46发表于广东喜讯openGauss企业级开源数据库获IT1682022年度创新产品奖!获奖理由开源社区是openGauss的重要创新平台,提供openGauss与开发者、用户、产业伙伴联接的桥梁。openGauss以社区为依托,联合......
  • Unity的IPostprocessBuild:深入解析与实用案例
    UnityIPostprocessBuild技术文章UnityIPostprocessBuild是Unity引擎中的一个非常有用的功能,它可以让开发者在构建项目后自动执行一些操作。这个功能可以帮助开发者提高工作效率,减少手动操作的时间和错误率。在本文中,我们将介绍UnityIPostprocessBuild的使用方法,并提供三个使用......
  • openGauss学习笔记-26 openGauss 高级数据管理-约束
    openGauss学习笔记-26openGauss高级数据管理-约束约束子句用于声明约束,新行或者更新的行必须满足这些约束才能成功插入或更新。如果存在违反约束的数据行为,行为会被约束终止。约束可以在创建表时规定(通过CREATETABLE语句),或者在表创建之后规定(通过ALTERTABLE语句)。约束可......
  • [linux]VIM实用技巧
    一、文本对象1.文本对象文本对象:基于结构定义的文本区域文本对象字符由两个字符组成,第一个字符永远是a/ii开头的文本对象会选择分隔符内部的文本a开头的文本对象会选择分隔符在内的整个文本即:i不包含边界,a包含边界注:1.文本对象可结合可视模式使用(v—可视字符)2.文本对象可结......
  • openGauss学习笔记-25 openGauss 聚集函数
    openGauss学习笔记-25openGauss聚集函数25.1sum(expression)描述:所有输入行的expression总和。返回类型:通常情况下输入数据类型和输出数据类型是相同的,但以下情况会发生类型转换:对于SMALLINT或INT输入,输出类型为BIGINT。对于BIGINT输入,输出类型为NUMBER。对于浮点数输......
  • 7大openGauss商业版发布,共推规模落地行业核心场景
    openGauss商业版发布了很多产品,是基于openGauss推出商业发行版目前海量数据库Vastbase表现最佳,一直是TOP1众所周知,opengauss起源于postgresql,在此基础上做了改良海量数据库从postgresql就已经开始做商业版,一直做到opengauss,经验最丰富于此同时,南大通用也是拥有20......
  • 7大openGauss商业版发布,共推规模落地行业核心场景
    openGauss商业版发布了很多产品,是基于openGauss推出商业发行版目前海量数据库Vastbase表现最佳,一直是TOP1众所周知,opengauss起源于postgresql,在此基础上做了改良海量数据库从postgresql就已经开始做商业版,一直做到opengauss,经验最丰富于此同时,南大通用也是拥有2......
  • 实用工具 Anaconda
    介绍Anaconda 介绍:Anaconda 是可以便捷获取包且对包能够进行管理,同时对环境可以统一管理的工具。适用Windows、macOS、Linux平台。Anaconda拥有conda包、环境管理器、1000+开源库。Anaconda包含180+的科学包以及其依赖项,如conda、numpy、scipy、ipythonnotebook......
  • openGauss学习笔记-24 openGauss 简单数据管理-模式匹配操作符
    openGauss学习笔记-24openGauss简单数据管理-模式匹配操作符数据库提供了三种独立的实现模式匹配的方法:SQLLIKE操作符、SIMILARTO操作符和POSIX-风格的正则表达式。除了这些基本的操作符外,还有一些函数可用于提取或替换匹配子串并在匹配位置分离一个串。24.1LIKE描述:判断字......