PostgreSQL基础知识之SQL操作符实践指南_PostgreSQL

来源:脚本之家  责任编辑:小易  

一、创建测试表david=# create table emp (david(# id int,david(# name varchar);CREATE TABLEdavid=# 二、插入测试数据复制代码david=# insert into emp values (1, 'david');INSERT 0 1david=# insert into emp values (1, 'david');INSERT 0 1david=# insert into emp values (1, 'david');INSERT 0 1david=# insert into emp values (2, 'sandy');INSERT 0 1david=# insert into emp values (2, 'sandy');INSERT 0 1david=# insert into emp values (3, 'renee'); INSERT 0 1david=# insert into emp values (4, 'jack'); INSERT 0 1david=# insert into emp values (5, 'rose'); INSERT 0 1david=# 复制代码三、查询初始化数据复制代码david=# select ctid, * from emp;ctid | id | name -------+----+-------(0,1) | 1 | david(0,2) | 1 | david(0,3) | 1 | david(0,4) | 2 | sandy(0,5) | 2 | sandy(0,6) | 3 | renee(0,7) | 4 | jack(0,8) | 5 | rose(8 rows)david=# 复制代码查询重复数据数复制代码david=# select distinct id, count(*) from emp group by id having count(*) > 1;id | count ----+-------1 | 32 | 2(2 rows)david=# 复制代码查询出 id 为1的记录有3条,id 为2的记录有2条。四、查询要保留的数据以 min(ctid) 或 max(ctid) 为准。复制代码david=# select ctid, * from emp where ctid in (select min(ctid) from emp group by id);ctid | id | name -------+----+-------(0,1) | 1 | david(0,4) | 2 | sandy(0,6) | 3 | renee(0,7) | 4 | jack(0,8) | 5 | rose(5 rows)david=# 复制代码五、删除重复数据david=# delete from emp where ctid not in (select min(ctid) from emp group by id);DELETE 3david=# 六、查看最后结果复制代码david=# select ctid, * from emp;ctid | id | name -------+----+-------(0,1) | 1 | david(0,4) | 2 | sandy(0,6) | 3 | renee(0,7) | 4 | jack(0,8) | 5 | rose(5 rows)david=# 复制代码说明:如果表中已经有标明唯一的序列主键值,可以把该值替换上述的ctid直接删除。七、其他方法也可以使用以下SQL删除重复数据。复制代码david=# delete from emp adavid-# where a.ctid <>david-# (david(# select min(b.ctid) from emp bdavid(# where a.id = b.iddavid(# );DELETE 3david=# 复制代码说明:在表数据量较大的情况下,这种删除方法效率很高www.zgxue.com防采集请勿采集本网。

前言

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

pg_class where relname='test_ctime'; relname | relfilenode | reltablespace ------------+-------------+--------------- test_ctime | 24650 | 0 (1 row) 备注:在 PostgreSQL 的

比较操作符

在pgAdminIII的Query窗口中执行SQL语句: create extension dblink; 它会创建dblink的扩展(默认是没有的),然后就可以在数据库的“拓展"中看到dblink了, 然后,就可以使用

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

PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为PostgreSQL,版本 4.2为基础的对象关系型数据库管理系统(ORDBMS)。PostgreSQL支持大

示例:

教育部批准了69所高等学校开展现代远程教育试点,对这69所高校培养的达到本、专科毕业要求的网络教育学生,由学校按照国家有关规定颁发高等教育学历证书,学历证书电子

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

sql基础肯定得学了。根据要注入的网站类型学习该网站使用的编程语言,比如PHP、JS 知识,比如MySQL、Oracle、PostgreSQL等等。

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

1、通过命令行查询 d 数据库 —— 得到所有表的名字 d 表名 —— 得到表结构 2、通过SQL语句查询 "select * from pg_tables" —— 得到当前db中所有表的信息

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; 将会返回FALSEhrdb=> --因此要想返回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 返回TRUEhrdb=> 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返回FALSEhrdb=> 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 判断是否为TRUEhrdb=> 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 判断是否为 FALSEhrdb=> SELECT 'A' > 'B' IS FALSE AS result; result -------- t(1 row)hrdb=> --IS NOT FALSE 判断是否不为FALSEhrdb=> 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;

它的主要用户群体和Oracle目前冲突不大,而目前市场上MySQL的高级人才奇缺,因此,许多人认为MySQL的前途还是很光明的;PostgreSQL也是一款很不错的开源数据库系统,但

温馨提示

使用下面的命令即可查询安装的版本:psql --version PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为PostgreSQL,版本 4.2为基础的对象

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

Select * from (Select * from 表名) 括号内为第一个查询。

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

特别针对多CPU、云、网络应用与高并发进行了优化。 PostgreSQL PostgreSQL标榜自己是世界上最先进的开源数据库。PostgreSQL的一些粉丝说它能与Oracle相媲美,而且

逻辑操作符

创建和编辑PostgreSQL数据库对象。EMS PostgreSQL Manager允许你运行SQL脚本语言,可视化数据库设计以及管理用户及其权限。使用EMS PostgreSQL Manager你将能

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

在项目中,本人就遇到过这样的情况,一番摸索过后发现终于发现其中的奥秘,首先,Postgresql 安装时,会往用户组中添加一个postgresql用户,而这个用户就是阻止你密码验证不能

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

介绍:PostgreSQL内部的概览,可以结合上面的pg代码结构来阅读 《PostgreSQL 中的 Json —从使用到源码》 介绍:PostgreSQL 中的 Json —从使用到源码 《PostgreSQL锁

示例:

教育部批准了69所高等学校开展现代远程教育试点,对这69所高校培养的达到本、专科毕业要求的网络教育学生,由学校按照国家有关规定颁发高等教育学历证书,学历证书电子

hrdb=> --2 > 1 为 TRUE, 'a' < 'b' 为TRUE,那么 AND 返回TRUEhrdb=> SELECT 2 > 1 AND 'a' < 'b' AS result; result -------- t(1 row)hrdb=> --1 < 2 为 TRUE, 2 > 1为FALSE,那么 AND 的结果为 FALSEhrdb=> SELECT 1 < 2 AND 2 > 1 AS result; result -------- t(1 row)hrdb=> -- NULL 和 2 > 1 为TRUE做比较,那么 AND 返回NULLhrdb=> 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 返回FALSEhrdb=> 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 返回TRUEhrdb=> SELECT 2 > 1 AND 'a' < 'b' AS result; result -------- t(1 row)hrdb=> --1 < 2 为 TRUE, 2 > 1为FALSE,那么 OR 的结果为 TRUEhrdb=> SELECT 1 < 2 AND 2 > 1 AS result; result -------- t(1 row)hrdb=> hrdb=> -- NULL 和 2 > 1 为TRUE做比较,那么 OR 返回 TRUEhrdb=> SELECT NULL AND 2 > 1 AS result; result -------- (1 row)hrdb=> --2 < 1 为 FALSE,'b' < 'a' 为FALSE,那么 OR 返回 FALSEhrdb=> SELECT 2 < 1 AND 'b' < 'a' AS result; result -------- f(1 row)hrdb=> -- NULL 和 1 > 2 为FALSE做比较,那么 OR 返回 NULLhrdb=> SELECT NULL AND 1 > 2 AS result; result -------- f(1 row)hrdb=> --NULL 和 NULL 那么 OR 的结果为 NULLhrdb=> SELECT NULL AND NULL AS result; result --------

主键是表中的一个或多个字段,它的值用于惟一地标识表中的某一条记录.;使用索引可快速访问数据库表中的特定信息。 索引是对数据库表中一列或多列的值进行排序的一种

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

算数操作符

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

示例:

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

hrdb=> --%取余操作符,5 除以 3 ,返回余数 2hrdb=> SELECT 5 % 3 AS result; result -------- 2(1 row)hrdb=> --^求幂操作,3 的 4次方为81hrdb=> SELECT 3^4 AS result; result -------- 81(1 row)hrdb=> --|/平方根,25的平方根为 5hrdb=> SELECT |/ 25 AS result; result -------- 5(1 row)hrdb=> --||/立方根,27 的立方根为 3hrdb=> SELECT ||/ 27 AS result; result -------------------- 3.0000000000000004(1 row)hrdb=> --!阶乘后缀,5的阶乘为 120hrdb=> SELECT 5 ! AS result; result -------- 120(1 row)hrdb=> --!!阶乘前缀,5的阶乘为 120hrdb=> SELECT !! 5 AS result; result -------- 120(1 row)hrdb=> --@绝对值,-1的绝对值为 1hrdb=> SELECT @ -1 AS result; result -------- 1(1 row)hrdb=> --& 按位与,5 & 3的值为 1hrdb=> --计算过程hrdb=> --5 用二进制表示 0000 0101hrdb=> --3 用二进制表示 0000 0011hrdb=> --按位与操作,同时为1则为1,否则为0hrdb=> --按位与操作,同时为1则为1,否则为0hrdb=> -- 5 & 3 0000 0001 再转换为10进制为 1hrdb=> SELECT 5 & 3 AS result; result -------- 1(1 row)hrdb=> --| 按位或,6 | 3 的值为 7hrdb=> --计算过程hrdb=> --6 用二进制表示 0000 0110hrdb=> --3 用二进制表示 0000 0011hrdb=> --按位或操作,只要有一个为1则为1hrdb=> --6 | 3 0000 0111 转换为10进制为7hrdb=> SELECT 6 | 3 AS result; result -------- 7(1 row)hrdb=> --# 按位异或,8 # 5 的值为13hrdb=> --计算过程hrdb=> --8 用二进制表示 0000 1000hrdb=> --5 用二进制表示 0000 0101hrdb=> --按位异或操作,不同为1,相同为0hrdb=> --8 # 5 0000 1101 转换为10进制为 13hrdb=> SELECT 8 # 5 AS result; result -------- 13(1 row)hrdb=> --~按位取反,7 按位取反的值为 16hrdb=> --计算过程 hrdb=> --7 用二进制表示 0000 0111hrdb=> --按位取反,最高位为0 取 1表示符号,其余按位取反hrdb=> --~7 1000 1000 转换为10进制为-8hrdb=> SELECT ~7 AS result; result -------- -8(1 row)hrdb=> --<<左移,4 左移 2位的值为:hrdb=> --计算过程hrdb=> --4用二进制表示 0000 0100hrdb=> --4左移两位 000001 0000 位数不足用 0 补位hrdb=> --转换为10进制后为 16。因此左移类似于平方操作,但是效率比平方高hrdb=> SELECT 4 << 2 AS result; result -------- 16(1 row)hrdb=> -->>右移,8 右移 3 位的值为1hrdb=> --8 用二进制表示 0000 1000hrdb=> --8 >> 3 , 0 0001000 多出的0去掉转换为10进制,为1hrdb=> SELECT 8 >> 3 AS result; result -------- 1(1 row)

总结

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

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

你系统中应该没有安装postgresql数据库(它不是系统自带的)内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • postgresql教程(七):函数和操作符详解(3)
  • postgresql教程(五):函数和操作符详解(1)
  • postgresql教程(六):函数和操作符详解(2)
  • postgresql主从异步流复制方案的深入探究
  • postgresql中关闭死锁进程的方法
  • postgresql 安装和简单使用
  • postgresql教程(十八):客户端命令(2)
  • postgresql error: invalid escape string 解决办法
  • linux centos 7源码编译安装postgresql9.5
  • postgresql教程(十九):sql语言函数
  • postgresql实现一个通用标签系统
  • windows上postgresql安装配置教程
  • sql server数据迁移至postgresql出错的解释以及解决方案
  • postgresql
  • 在PostgreSQL中如何删除重复记录
  • centos7怎么打开postgresql
  • 如何启动postgresql windows
  • 如何找到PostgreSQL数据库上次更新的时间
  • CI框架下执行postgresql dblink函数没反应,也不报错。
  • greenplum version 4.3使用的postgresql是哪个版本
  • 哪里可以学习postgresql,最好是网络授课,网上好像很少有相关...
  • 零基础学习sql注入 需要学习哪些基础知识
  • 如何查PostgreSQL 数据库中所有的表
  • SQL Server 与 PostgreSQL 区别
  • linux 如何查询PostgreSQL的版本
  • postgresql 如何将查询结果作为另一个表的名字来使用
  • MySQL与PostgreSQL比较 哪个数据库更好
  • EMS SQL Manager 破解版 for PostgreSQL好不好
  • 如何实现Postgresql数据库的重装与postgres密码重置
  • PostgreSQL 有哪些经典入门书籍
  • 为什么选择PostgreSQL而不是MySQL
  • Postgresql如何引用具有多个唯一主键的表
  • 如何列出所有PostgreSQL数据库和表
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess数据库文摘数据库其它首页postgresql教程(七):函数和操作符详解(3)postgresql教程(五):函数和操作符详解(1)postgresql教程(六):函数和操作符详解(2)postgresql主从异步流复制方案的深入探究postgresql中关闭死锁进程的方法postgresql 安装和简单使用postgresql教程(十八):客户端命令(2)postgresql error: invalid escape string 解决办法linux centos 7源码编译安装postgresql9.5postgresql教程(十九):sql语言函数postgresql实现一个通用标签系统windows上postgresql安装配置教程sql server数据迁移至postgresql出错的解释以及解决方案postgresql 角色与用户管理介绍windows下postgresql数据库的下载windows下postgresql安装图解15个postgresql数据库实用命令分postgresql中的oid和xid 说明postgresql alter语句常用操作小windows postgresql 安装图文教程postgresql 安装和简单使用postgresql 创建表分区postgresql新手入门教程解决postgresql服务启动后占用100% cpu卡postgresql教程(十五):系统表详解初识postgresql存储过程postgresql 如何获取当前日期时间及注意事postgresql教程(十三):数据库管理详解postgresql管理工具phppgadmin入门指南postgresql 角色与用户管理介绍linux centos 7源码编译安装postgresql9.postgresql图(graph)的递归查询实例postgresql教程(四):数据类型详解
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved