🐴 1.环境准备
建表语句如下:
CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, ‘Paul’, 32, ‘California’, 20000.00 );
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, ‘Allen’, 25, ‘Texas’, 15000.00 );
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, ‘Teddy’, 23, ‘Norway’, 20000.00 );
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, ‘Mark’, 25, 'Rich-Mond ', 65000.00 );
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, ‘David’, 27, ‘Texas’, 85000.00 );
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, ‘Kim’, 22, ‘South-Hall’, 45000.00 );
INSERT INTO COMPANY(ID,NAME,AGE,ADDRESS,SALARY)
VALUES (7, ‘James’, 24, ‘Houston’, 10000.00 );
🐴 2.select语句
a 找出AGE大于等于25且薪资大于等于65000 --and
select * from company where age>=25 and salary>=65000;
b 找出AGE大于等于25或者薪资大于等于65000 --or
select * from company where age>=25 or salary>=65000;
c 找不age字段不为空的数据 --null
select * from company where age is not null;
d 找出表company name字段以Pa开头的数据 --like
select * from company where name like ‘Pa%’;
select * from company where salary::text like ‘20%’;
注意:PG的like只能匹配到字符串
e 找出age为25或者27的员工 --in
select * from company where age in (25,27);
f 找出age不为25或者27的员工 --not in
select * from company where age not in (25,27);
g 找出age不为25到27的员工 --between
select * from company where age between 25 and 27;
🐴 3.子查询
案例:找出年龄大于 薪资大于65000员工的年龄
select * from company where age>(
select age from company where salary>65000);
判断条件存不存在
select * from company
where exists (select age from company where salary>95000)
🐴 4.LIMIT字句
案例1:列出表company表前3条记录
select * from company limit 3;
案例2:列出表company表4-7的记录
select * from company limit 4 OFFSET 3;
🐴 5.order by
asc:升序 DESC:降序
案例:对表company name降序,薪资升序
select * from company order by name desc,salary asc;
🐴 6.group by
案例:查询company表同年龄段薪资的平均值
select age,avg(salary) from company group by age;
🐴 7.with子句
辅助的用法,便于大查询
案例:查找下工资小于20000的数据,并计算他们的和
with recursive t(n) as(
values(0)
union all
select salary from company where salary <20000
)
select sum(n) from t;
🐴 8.having子句
实例:
找出重名的员工的姓名
select name from company
group by name
having count(*)>1;
🐴 9.distinct
作用:去除重复值,获得唯一
实例:获取公司员工的姓名
select distinct name from company;
⛳️11. PostgreSQL数据库有什么优势?
PostgreSQL数据库是功能强大的开源数据库,
它支持丰富的数据类型(如JSON和JSONB类型、数组类型)和自定义类型。
PostgreSQL数据库提供了丰富的接口,可以很方便地扩展它的功能,
如可以在GiST框架下实现自己的索引类型,支持使用C语言写自定义函数、触发器,
也支持使用流行的编程语言写自定义函数。
PostgreSQL数据库具有以下优势:
PostgreSQL数据库是目前功能最强大的开源数据库,
它是最接近工业标准SQL92的查询语言,
至少实现了SQL:2011标准中要求的179项主要功能中的160项
(注:目前没有哪个数据库管理系统能完全实现SQL:2011标准中的所有主要功能)。
稳定可靠:PostgreSQL是唯一能做到数据零丢失的开源数据库。
目前有报道称国内外有部分银行使用PostgreSQL数据库。
开源省钱: PostgreSQL数据库是开源的、免费的,
而且使用的是类BSD协议,在使用和二次开发上基本没有限制。
支持广泛:PostgreSQL 数据库支持大量的主流开发语言,
包括C、C++、Perl、Python、Java、Tcl以及PHP等。
PostgreSQL社区活跃:PostgreSQL基本上每3个月推出一个补丁版本,
这意味着已知的Bug很快会被修复,有应用场景的需求也会及时得到响应。
● PostgreSQL是加州大学伯克利分校计算机系开发的,一个开源免费的关系式数据库管理系统,
经过长达15年以上的积极开发和不断改进,PostgreSQL已在可靠性、稳定性、数据一致性等获得了业内相对高的声誉。
● PostgreSQL可以运行在所有主流操作系统上,包括Linux、AIX、HP-UX、Solaris和Windows等34种平台。
● PostgreSQL是完全的事务安全性数据库,
完整地支持外键、联合、视图、触发器和存储过程(并支持多种语言开发存储过程)。
● PostgreSQL支持了大多数SQL标准的数据类型,
包括整型、数值型、布尔型、字节型、字符型、日期型、时间型、二进制的大对像(图片、声音和视频)。
● PostgreSQL的存储过程开发可以使用众多的程序语言,
包括Java、Perl、Python、Ruby、Tcl、C/C++和自带的PL/pgSQL,
其中的PL/pgSQL与Oracle的PL/SQL很相似,内置了数百个函数,
功能从基本的算术计算和字符串处理到加密逻辑计算并与Oracle有高度兼容性。
● PostgreSQL对很多高级开发语言有原生的编程接口,
如C/C++、Java、.Net、Perl、Python、Ruby、Tcl和ODBC以及其他语言等,也包含各种文档。
● PostgreSQL有很多高级功能,像多版本并发控制(MVCC)、按时间点恢复(PITR)、表空间、异步复制、嵌套事务、在线热备、复杂查询的规划和优化以及为容错而进行的预写日志等。
● PostgreSQL支持国际字符集、多字节编码并支持使用当地语言进行排序、大小写处理和格式化等操作。
● PostqreSQL有很多高品质的图形化的PostgreSQL管理工具软件,包括开源和商业性质的。
● PostgreSQL的源代码可以自由获取,它的授权是在非常自由的开源授权下,
这种授权允许用户在各种开源或是闭源项目中使用、修改和发布PostgreSQL的源代码。
用户对源代码的可以按用户意愿进行任何修改、改进。
● 目前有不少业务系统使用PostgreSQL在实际生产环境下管理着超过4TB的数据。
● PostgreSQL的快速发展是由于MySQL被Oracle公司收购导致的,
同时在2019年微软官宣收购PostgreSQL初创公司Citus Data。