前言

操作符是数据库具有的运算特性,对文本字符和一些标签字符的处理,使用操作符可以简化SQL代码,同时也可以节省开发时间和提高开发效率。

比较操作符

在PostgreSQL中,所有的数据类型都可以使用比较操作符,比较操作符运算结果返回一个布尔值。即 TRUE 或者 FALSE。比较操作符为双目操作符,因此被比较的两个值的数据类型必须是相同的数据类型或者在彼此之间可以进行隐式类型转换。在PostgreSQL中,提供的比较操作符有 > 、< 、<= 、>= 、= 、<> 或者 != 。在 PostgreSQL中,类似 a > b > c的操作是非法的,因为布尔值和数值之间无法做比较。

示例:

hrdb=\# SELECT 2 > 1 AS result; result \-------- t(1 row)

hrdb=\# SELECT 'a' = 'a' AS result; result \-------- t(1 row)

hrdb=\# SELECT 'a' <> 'b' AS result; result \-------- t(1 row)

hrdb=\# SELECT 'a' != 'b' AS result; result \-------- t(1 row)

hrdb=\# SELECT '@' > '!' AS result; result \-------- t(1 row)

hrdb=\# SELECT ascii('@'),ascii('!'); ascii | ascii \-------+------- 64 | 33(1 row)

hrdb=\# SELECT '@' > 'a' AS result; result \-------- f(1 row)

hrdb=\# SELECT ascii('@'),ascii('a'); ascii | ascii \-------+------- 64 | 97

在PostgreSQL中,除了比较的操作符以外,还有比较的谓词。有如下。

hrdb=> --BETWEEN AND谓词,表示范围。用法为某个指定的字符是否在此之间

hrdb=> SELECT 5 BETWEEN 1 AND 6 AS result;

result

--------

t

(1 row)

hrdb=> --上述等价于

hrdb=> SELECT 5 > 1 AND 5 < 6 AS result;

result

--------

t

(1 row)

hrdb=> --NOT BETWEEN AND ,表示不在某个范围

hrdb=> SELECT 5 NOT BETWEEN 7 AND 10 AS result;

result

--------

t

(1 row)

hrdb=> --BETWEEN SYMMETRIC AND,表示排序后比较

hrdb=> --该谓词的用法通常发生在BETWEEN AND之间出现倒序的情况

hrdb=> --如使用 SELECT 5 BETWEEN 10 AND 10; 将会返回FALSE

hrdb=> --因此要想返回TRUE需要按照如下使用

hrdb=> SELECT 5 BETWEEN SYMMETRIC 10 AND 1 AS result;

result

--------

t

(1 row)

hrdb=> --NOT BETWEEN SYMMETRIC AND与上述 BETWEEN SYMMETRIC AND 相反

hrdb=> --IS DISTINCT FROM 不等于,null 返回TRUE

hrdb=> SELECT 'a' IS DISTINCT FROM 'b' AS result;

result

--------

t

(1 row)

hrdb=> SELECT null IS DISTINCT FROM 'b' AS result;

result

--------

t

(1 row)

hrdb=> --IS NOT DISTINCT FROM 等于,null返回FALSE

hrdb=> SELECT 'a' IS NOT DISTINCT FROM 'b' AS result;

result

--------

f

(1 row)

hrdb=> SELECT null IS NOT DISTINCT FROM 'b' AS result;

result

--------

f

(1 row)

hrdb=> --IS NULL 判断为空

hrdb=> SELECT 'a' IS NULL AS result;

result

--------

f

(1 row)

hrdb=> SELECT '' IS NULL AS result;

result

--------

f

(1 row)

hrdb=> --IS NOT NULL 判断不为空

hrdb=> SELECT 'a' IS NOT NULL AS result;

result

--------

t

(1 row)

hrdb=> SELECT '' IS NOT NULL AS result;

result

--------

t

(1 row)

hrdb=> --ISNULL 判断为空 (非标准语法)

hrdb=> --NOTNULL 判断不为空(非标准语法)

hrdb=> SELECT 'a' ISNULL as result;

result

--------

f

(1 row)

hrdb=> SELECT '' NOTNULL AS result;

result

--------

t

(1 row)

hrdb=> --IS TRUE 判断是否为TRUE

hrdb=> SELECT 'A' > 'B' IS TRUE AS result;

result

--------

f

(1 row)

hrdb=> --IS NOT TRUE 判断是否为FALSE

hrdb=> SELECT 'A' > 'B' IS NOT TRUE AS result;

result

--------

t

(1 row)

hrdb=> --IS FALSE 判断是否为 FALSE

hrdb=> SELECT 'A' > 'B' IS FALSE AS result;

result

--------

t

(1 row)

hrdb=> --IS NOT FALSE 判断是否不为FALSE

hrdb=> SELECT 'A' > 'B' IS NOT FALSE AS result;

result

--------

f

(1 row)

--IS UNKNOWN 未知

hrdb=> SELECT NULL IS UNKNOWN AS result;

result

--------

t

--IS NOT UNKNOWN

SELECT 'a' > 'b' IS NOT UNKNOWN AS result;

温馨提示

字符之间的比较通常使用ascii值比较大小。同时,UNKNOWN 和 NOT UNKNOWN 通常和IS NULL 和IS NOT NULL类似。在PostgreSQL中,还有比较函数, num_nonnulls(VARIADIC "any"),表示返回一个非空输入字符的总个数。num_nulls(VARIADIC "any"),表示返回一个null值的总个数。如下:

hrdb=> SELECT num_nonnulls(1,null,2) AS total_nonnulls;

total_nonnulls

----------------

2

(1 row)

hrdb=> SELECT num_nonnulls('PostgreSQL','MySQL','','null',null) AS total_nonnulls;

total_nonnulls

----------------

4

(1 row)

hrdb=> SELECT num_nulls(1,null,2) AS total_nulls;

total_nulls

-------------

1

(1 row)

hrdb=> SELECT num_nulls('PostgreSQL','MySQL','','null',null) AS total_nulls;

total_nulls

-------------

1

逻辑操作符

在PostgreSQL中,逻辑操作符有 AND、 OR 和 NOT,逻辑操作符返回的结果通常为一个布尔值或者NULL,即 TRUE、FALSE或者NULL。其中NULL表示运算结果未知。同时对于逻辑操作符都有优先级顺序,AND 、OR 和 NOT的优先级顺序为: NOT > AND >OR。

对于逻辑操作符的之间的运算结果参考下表:

示例:

hrdb=> --2 > 1 为 TRUE, 'a' < 'b' 为TRUE,那么 AND 返回TRUE

hrdb=> SELECT 2 > 1 AND 'a' < 'b' AS result;

result

--------

t

(1 row)

hrdb=> --1 < 2 为 TRUE, 2 > 1为FALSE,那么 AND 的结果为 FALSE

hrdb=> SELECT 1 < 2 AND 2 > 1 AS result;

result

--------

t

(1 row)

hrdb=> -- NULL 和 2 > 1 为TRUE做比较,那么 AND 返回NULL

hrdb=> SELECT NULL AND 2 > 1 AS result;

result

--------

(1 row)

hrdb=> --2 < 1 为 FALSE,'b' < 'a' 为FALSE,那么 AND 返回 FALSE

hrdb=> SELECT 2 < 1 AND 'b' < 'a' AS result;

result

--------

f

(1 row)

hrdb=> -- NULL 和 1 > 2 为FALSE做比较,那么 AND 返回FALSE

hrdb=> SELECT NULL AND 1 > 2 AS result;

result

--------

f

(1 row)

hrdb=> --NULL 和 NULL AND 的结果为 NULL

hrdb=> SELECT NULL AND NULL AS result;

result

--------

(1 row)

hrdb=> --2 > 1 为 TRUE, 'a' < 'b' 为TRUE,那么 OR 返回TRUE

hrdb=> SELECT 2 > 1 AND 'a' < 'b' AS result;

result

--------

t

(1 row)

hrdb=> --1 < 2 为 TRUE, 2 > 1为FALSE,那么 OR 的结果为 TRUE

hrdb=> SELECT 1 < 2 AND 2 > 1 AS result;

result

--------

t

(1 row)

hrdb=>

hrdb=> -- NULL 和 2 > 1 为TRUE做比较,那么 OR 返回 TRUE

hrdb=> SELECT NULL AND 2 > 1 AS result;

result

--------

(1 row)

hrdb=> --2 < 1 为 FALSE,'b' < 'a' 为FALSE,那么 OR 返回 FALSE

hrdb=> SELECT 2 < 1 AND 'b' < 'a' AS result;

result

--------

f

(1 row)

hrdb=> -- NULL 和 1 > 2 为FALSE做比较,那么 OR 返回 NULL

hrdb=> SELECT NULL AND 1 > 2 AS result;

result

--------

f

(1 row)

hrdb=> --NULL 和 NULL 那么 OR 的结果为 NULL

hrdb=> SELECT NULL AND NULL AS result;

result

--------

关于 NOT 结果,在这里不做示例,有兴趣的可以下去自行验证。

算数操作符

PostgreSQL中的算数操作符号有 +(加法) 、-(减法) 、* (乘法)、/(除法) 、%(取余)、^(幂运算符)、|/(平方根)、||/(立方根)、!(阶乘[后缀])、!!(阶乘[前缀])、@(绝对值)、&(按位与)、|(按位或)、#(按位异或)、~(按位取反)、<>(右移)操作符,这些操作符简化了数学运算方式。

示例:

加减乘除示例在此略。此示例重点介绍一下后面的操作符号。

hrdb=> --%取余操作符,5 除以 3 ,返回余数 2

hrdb=> SELECT 5 % 3 AS result;

result

--------

2

(1 row)

hrdb=> --^求幂操作,3 的 4次方为81

hrdb=> SELECT 3^4 AS result;

result

--------

81

(1 row)

hrdb=> --|/平方根,25的平方根为 5

hrdb=> SELECT |/ 25 AS result;

result

--------

5

(1 row)

hrdb=> --||/立方根,27 的立方根为 3

hrdb=> SELECT ||/ 27 AS result;

result

--------------------

3.0000000000000004

(1 row)

hrdb=> --!阶乘后缀,5的阶乘为 120

hrdb=> SELECT 5 ! AS result;

result

--------

120

(1 row)

hrdb=> --!!阶乘前缀,5的阶乘为 120

hrdb=> SELECT !! 5 AS result;

result

--------

120

(1 row)

hrdb=> --@绝对值,-1的绝对值为 1

hrdb=> SELECT @ -1 AS result;

result

--------

1

(1 row)

hrdb=> --& 按位与,5 & 3的值为 1

hrdb=> --计算过程

hrdb=> --5 用二进制表示 0000 0101

hrdb=> --3 用二进制表示 0000 0011

hrdb=> --按位与操作,同时为1则为1,否则为0

hrdb=> --按位与操作,同时为1则为1,否则为0

hrdb=> -- 5 & 3 0000 0001 再转换为10进制为 1

hrdb=> SELECT 5 & 3 AS result;

result

--------

1

(1 row)

hrdb=> --| 按位或,6 | 3 的值为 7

hrdb=> --计算过程

hrdb=> --6 用二进制表示 0000 0110

hrdb=> --3 用二进制表示 0000 0011

hrdb=> --按位或操作,只要有一个为1则为1

hrdb=> --6 | 3 0000 0111 转换为10进制为7

hrdb=> SELECT 6 | 3 AS result;

result

--------

7

(1 row)

hrdb=> --# 按位异或,8 # 5 的值为13

hrdb=> --计算过程

hrdb=> --8 用二进制表示 0000 1000

hrdb=> --5 用二进制表示 0000 0101

hrdb=> --按位异或操作,不同为1,相同为0

hrdb=> --8 # 5 0000 1101 转换为10进制为 13

hrdb=> SELECT 8 # 5 AS result;

result

--------

13

(1 row)

hrdb=> --~按位取反,7 按位取反的值为 16

hrdb=> --计算过程

hrdb=> --7 用二进制表示 0000 0111

hrdb=> --按位取反,最高位为0 取 1表示符号,其余按位取反

hrdb=> --~7 1000 1000 转换为10进制为-8

hrdb=> SELECT ~7 AS result;

result

--------

-8

(1 row)

hrdb=> --<

hrdb=> --计算过程

hrdb=> --4用二进制表示 0000 0100

hrdb=> --4左移两位 000001 0000 位数不足用 0 补位

hrdb=> --转换为10进制后为 16。因此左移类似于平方操作,但是效率比平方高

hrdb=> SELECT 4 << 2 AS result;

result

--------

16

(1 row)

hrdb=> -->>右移,8 右移 3 位的值为1

hrdb=> --8 用二进制表示 0000 1000

hrdb=> --8 >> 3 , 0 0001000 多出的0去掉转换为10进制,为1

hrdb=> SELECT 8 >> 3 AS result;

result

--------

1

(1 row)

总结

在PostgreSQL 中,除了以上三种操作符为关系型数据库中常用的操作符外,还有其它的操作符为PostgreSQL中独有的操作符,比如文本查找操作符,@@(tsvector类型与tsquery类型字符是否匹配),@>(tsquery类型之间是否包含),>=(包含或者等于)。几何操作符如@-@(表示图形的周长或者长度),@@(表示圆心),(表示圆心距),&&(表示图形是否重叠)等,感兴趣的同学下去自行验证。

到此这篇关于PostgreSQL基础知识之SQL操作符实践的文章就介绍到这了,更多相关PostgreSQL之SQL操作符实践内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

mysql 立方根函数_PostgreSQL基础知识之SQL操作符实践指南相关推荐

  1. mysql 立方根函数_Java实现牛顿迭代法求解平方根、立方根

    一.简介 牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法. ...

  2. iif能用到mysql中吗_数据库基础知识:SQL中的IIF语句详解

    IIf 返回由逻辑测试确定的两个数值或字符串值之一. 语法 数字 IIf(Logical EXPression, Numeric Expression1, Numeric Expression2) 如 ...

  3. 求立方根函数cbrt

    #include <float.h> #include <math.h> 由于VS2012 2013以上版本的编译器才带cbrt cbrf 求根函数,以下编译器版本只好自己去网 ...

  4. Analysis Services基础知识——深入SQL Server 2008

    Analysis Services基础知识 --深入SQL Server 2008 这一节中,我们将介绍Analysis Services的体系结构,这个体系结构在SQLServer2005中建立,并 ...

  5. [Python学习] 专题一.函数的基础知识

            最近才开始学习Python语言,但就发现了它很多优势(如语言简洁.网络爬虫方面深有体会).我主要是通过<Python基础教程>和"51CTO学院 智普教育的pyt ...

  6. mysql 死锁监视器_并发基础知识:死锁和对象监视器

    mysql 死锁监视器 本文是我们名为Java Concurrency Essentials的学院课程的一部分. 在本课程中,您将深入探讨并发的魔力. 将向您介绍并发和并发代码的基础知识,并学习诸如原 ...

  7. python函数定义的基本格式_python函数的基础知识

    一. 函数的定义 用一个名字来封装具有某种功能的代码块 二.函数的特性 减少重复 方便修改 保持代码一致性 三.函数的格式 封装格式 1 def 函数名(参数列表) 2 代码块 3 return 返回 ...

  8. SEO 基础知识? 2023学习SEO最佳指南

    文章目录 搜索引擎优化基础知识 什么是搜索引擎优化? 为什么搜索引擎优化很重要? SEO有什么好处? 如何做搜索引擎优化 关键词研究 内容优化 网站结构优化(页面SEO) 外部链接优化 移动优化 分析 ...

  9. 1在mysql进行定义操作系统_Mysql基础知识一

    1.数据库的定义 数据:描述事物符号记录.(包括数字.文字.图形.图像.声音.档案记录等)以记录形式统一的格式进行存储.广义上的数据:出现在计算机内部的一切二进制数据流都为数据狭义上的数据:只是数字或 ...

最新文章

  1. 数据分享 | LSTM神经网络架构和原理及其在Python中的预测应用(附视频)
  2. 完美脱壳组装PE的一般步骤(Obsidium1.3.6.4 DEMO 主程序)
  3. jenkins自动部署配置
  4. android 距离设置多少dp核实,【Android学习】android布局中几个距离单位的区别:px、dp、sp...
  5. android webview 例子,android – webview shouldinterceptrequest示例
  6. Silverlight中动画的性能浅析
  7. 如何解决layui下select组件大数据卡顿问题
  8. 华硕win10键盘失灵_华硕笔记本键盘失灵,小编告诉你华硕笔记本键盘失灵怎么解决...
  9. 计算机怎么把文字转换成表格,如何将EXCEL的图片转换成excel表格或者文字?,Word将文字转化成表格...
  10. 三线压力传感器原理_空调压力传感器三线原理图 压力传感器内部原理
  11. Java:15位或18位居民身份证号码简单校验(正则表达式)
  12. 集合综合案例:播放器
  13. 多任务让你走得更慢(很好,转自infoq)
  14. 大数据学习一般都需要学习哪些知识
  15. 速腾 RS-Bpearl 显示点云
  16. 惠普服务器装系统无法识别u盘,惠普uefi bios无法识别u盘的解决方法
  17. Ubuntu Desktop gedit
  18. Android — 在服务中发送通知Notification
  19. 每日一个代码-第一天
  20. jsp+servlet+mysql实现的在线鲜花商城

热门文章

  1. GDAL算法进度条使用说明
  2. 五十八种网络故障及其解决办法
  3. 科学家名言录[人生]
  4. 【NodeJS】运行在服务端的JavaScript
  5. Linux多线程同步的几种方式
  6. vb退出窗体代码_VB中基本概念(3)
  7. android mvp模式例子_关于Android市场这件事,没有饱和的市场只有饱和的思维
  8. 讲讲我和Spring创始级程序员共同review代码的故事
  9. 美团小程序框架mpvue入门教程
  10. 【372天】我爱刷题系列131(2018.02.12)