PostgreSQL数据查询--详细速查手册

绝地灬酷狼 2022-06-07 07:21 1020阅读 0赞
  • PostgreSQL数据查询详细速查手册

    • 一基本查询语句

      • 1 SELECT语句的基本格式
    • 二单表查询

      • 01 查询所有字段
      • 02 查询指定字段
      • 03 查询指定记录
      • 04 范围查询IN 的用法
      • 05 范围查询BETWEEN AND 的用法
      • 06 模糊查询LIKE 的用法
      • 07 多条件查询AND OR 的用法
      • 07x 多表查询
      • 08 空值查询 IS NULL
      • 09 分组查询GROUP BY的用法
      • 10 查询结果去重复DISTINCT的用法
      • 11 查询结果排序ORDER BY 的用法
      • 12 查询结果限制数量LIMIT 的用法
    • 三聚合函数查询

      • 01 COUNT函数
      • 02 SUM函数
      • 03 AVG函数
      • 04 MAX函数
      • 05 MIN函数
    • 四连接查询

      • 01 内连接查询
      • 02 外连接查询
      • 03 复合条件连接查询
    • 五子查询

      • 01 ANYSOME
      • 02 ALL
      • 03 EXISTS
      • 04 IN
    • 六合并查询结果UNION ALL
    • 七表和字段的别名

      • 01 表的别名
      • 02 字段的别名
    • 八正则表达式查询

      • 01 以特定字符串开头结尾的记录
      • 02 号代替一个字符
      • 03 匹配多个字符
      • 04 匹配指定字符串
      • 05 匹配指定字符中的任意一个
      • 06 匹配指定字符以外的字符
      • 07 使用MMN指定字符串连续出现的次数
    • 九FAQ

      • 01 DISTINCT可以应用于所有的列吗
      • 02 ORDER BY可以和LIMIT混用吗
      • 03 单引号什么时候用
      • 04 WHERE子句必须使用吗
      • 05 为什么通配符格式正确却没有查出理想的数据
    • 参考资料

**
声明:

  • 本文资料多整理自权威书籍,并且
  • 所有SQL均在pgAdmin 4.1.6 + PostgreSQL 9.6.5 测试下运行通过!
  • 请放心使用。
  • (测试中表名存在模式限制,文中均已略去)

**

employee表:






















eid [PK] ename eage esalary esex eemail
integer character varying(20) integer integer character varying(1) character varying(32)

PostgreSQL数据查询–详细速查手册

一、基本查询语句

1.1 SELECT语句的基本格式:

  1. SELECT
  2. {* | <字段列表>}
  3. [
  4. {FROM <表1>,<表2>..}
  5. [WHERE <表达式>]
  6. [GROUP BY <字段名>]
  7. [HAVING <表达式> [{
  8. <操作符1> <表达式1>}][..]]
  9. [ORDER BY <字段名> ASC | DESC ]
  10. [LIMIT <行数> [ OFFSET <偏移量> ]]

约定:

  • {} 内必选
  • [] 内可选
  • <> 内参数: 表达式、字段、参数
  • |  或者

二、单表查询

2.01 查询所有字段

语法:

  1. select * from 表名;

例:

  1. select * from mytable;

2.02 查询指定字段

语法:

  1. select 字段名 from 表名;

例:

  1. select id,name,age from employee;

2.03 查询指定记录

语法:

  1. select *|字段名 from 表名 where 字段=值;

where支持的条件判断符:






































操作符 说明
= 等于
<> , != 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于
between A and B 在A与B之间

例1:

  1. select * from employee where age>=18;

例2:

  1. select age,name from employee where salary between 2000 and 3000;

2.04 范围查询--IN 的用法

语法:

  1. select *|字段名 from 表名 where 字段 in (列表);

例1: 本命年员工

  1. select id,name from employee where age in (24,36,48,60);

例2: 某列表中员工 (char varing[]类型不支持)

  1. select * from employee where name in ('张三','李四','王五');

2.05 范围查询--BETWEEN AND 的用法

语法:在值A到B之间(包括A,B)

  1. select *|字段名 from 表名 where 字段 between A and B;

例1:

  1. select name from employee where age between 18 and 20;

2.06 模糊查询--LIKE 的用法

语法:字段包含字符串strA的记录,一般搭配 % 匹配任意字符。

  1. select *|字段名 from 表名 where 字段 like strA;

例1:所有姓张的,(char varing[]类型不支持)

  1. select * from employee where name like '张%';

例2:所有山东人,(char varing[]类型不支持)

  1. select * from employee where hometown like '%山东%';

2.07 多条件查询--AND 、 OR 的用法

语法:and并且关系,or或者关系

  1. select *|字段名 from 表名 where 字段1 条件1 and 字段2 条件2;
  2. select *|字段名 from 表名 where 字段1 条件1 or 字段2 条件2;

例1: 四十岁以上(且)姓张的.

  1. select * from employee where name like '张%' and age >=40;

例2: 四十岁以上或者薪水过万的.

  1. select * from employee where salary >=10000 or age >=40;

2.07x 多表查询

语法:与条件联合使用,否则将造成 m*n 倍增.m,n为记录数.

  1. select 表名1.字段1,别名2.字段2 from 表名1,表名2 [别名2] <条件>;

例:

  1. select u.name,t.name from user u,team t where t.id=u.team_id;

2.08 空值查询 IS NULL

语法: IS NULL

  1. select *|字段名 from 表名 where 字段1 条件1 and 字段2 条件2;

例2: 邮箱为空的.

  1. select * from employee where email is null;

2.09 分组查询:--GROUP BY的用法

GROUP BY 查询分组情况
/不会——————————-

语法: GROUP BY 字段1,按 字段1 分组。HAVING+条件 可以对分组进行筛选。

  1. select *|字段名 from 表名 group by 字段;

例1: 按性别分组.

  1. select * from employee group by sexy;

例1: .

  1. select id,name,age from employee group by age having count(age)>=10;

ERROR*
column “mytable.ename” must appear in the GROUP BY clause or be used in an aggregate function
——————————-不会/

添坑:
事实上group by 会将select <字段1> 结果集中<字段1>相同的记录合并,
所以,select <字段> 指定的字段必须

  1. 放入group by后,或者
  2. 放入having聚合函数中.

而且,group by 一般用来统计记录的分组情况,比如:分组,种类,部门.
结合having 聚合

  1. select esex,count(*) as total from employee group by esex order by esex DESC;

















esex total
F 19
M 23

2.10 查询结果:去重复--DISTINCT的用法

DISTINCT <字段> ,返回<字段>不同的记录

  1. select distinct *|单字段名 from 表名;

例1:

  1. select distinct *|单字段名 from 表名;

2.11 查询结果:排序--ORDER BY 的用法

ORDER BY 对查询结果排序
语法: ASC升序、DESC降序。[ASC|DESC]

  1. select *|字段名 from 表名 order by 字段1 ASC|DESC;

例1:按年龄增排序;查询所有员工.

  1. select * from employee order by age ASC;

例2:与GROUP BY联用;按性别分组,按年龄排序.

  1. select * from employee group by sex order by age ASC;

2.12 查询结果:限制数量--LIMIT 的用法

语法: LIMIT A [OFFSET B]; 限制查询数量A个,偏移量B个.(从第B条往后A条数据)

  1. select *|字段名 from 表名 limit A offset B;

例1:每页100条数据,偏移量300。(相当于第4页)

  1. select * from employee limit 100 offset 300;

三、聚合函数查询

聚合函数






























函数 描述
COUNT() 统计某列的行数,*则是表的字段数,指定列某记录为null时此条将被忽略
AVG() 统计某列的平均值,多列需要多次使用avg()
MAX() 求某列的最大值,支持日期和字符串比较
MIN() 求某列的最小值,同max()
SUM() 求某列的和,指定列某记录值为null时此条将被忽略

3.01 COUNT()函数

语法: [as str] 别名str (放到 str 列中)

  1. select [<字段>,]count(字段) [as str] from 表名;

例1:统计所有数据数量

  1. select count(*) as total from employee;

例2:按性别统计员工数量

  1. select esex,count(*) as total from employee group by esex;

3.02 SUM()函数

语法: [as str] 别名str (放到 str 列中)

  1. select [<字段>,]sum(字段) [as str] from 表名;

例1:统计薪水总和

  1. select sum(salary) as total from employee;

例2:统计不同性别的薪水情况

  1. select sex,sum(salary) as total from employee group by sex;

3.03 AVG()函数

语法: [as str] 别名str (放到 str 列中)

  1. select [<字段>,]avg(字段) [as str] from 表名;

例1:统计年龄平均值

  1. select avg(age) as average from employee;

例2:统计不同性别的年龄平均值

  1. select sex,avg(age) as total from employee group by sex;

3.04 MAX()函数

语法: [as str] 别名str (放到 str 列中)

  1. select [<字段>,]max(字段) [as str] from 表名;

例1:统计薪水最大值

  1. select max(salary) as maximum from employee;

例2:统计不同性别的薪水最大值

  1. select sex,max(salary) as maximum from employee group by sex;

3.05 MIN()函数

同MAX()的用法。

四、连接查询

4.01 内连接查询

4.02 外连接查询

4.03 复合条件连接查询

五、子查询

5.01 ANY、SOME

满足任意一个即可,any some 等价
where id > any (1,2,3)
where age > some (select age from table2…)

5.02 ALL

必须满足所有
where age > all (1,2.3)

5.03 EXISTS

满足exists子查询不为空 时进行外围查询。
select * form table where exists (select c1 form table2)

5.04 IN

where id in (1,2,3);

where id in (select ..)

六、合并查询结果--UNION [ALL]

union 将几次查询结果合并到一起,(从后面)连接起来。这就要求几次查询的字段名(别名也可以)、数据类型全部一致。
ALL将不合并重复字段。

  1. select c1,c2 from table1 union select c1,c2 from table2
  2. select c3,c4 from table3 union all select c1,c2 from table2

七、表和字段的别名

7.01 表的别名

7.02 字段的别名

八、正则表达式查询

8.01 以特定字符(串)开头、结尾的记录

8.02 . 号代替一个字符

8.03 *、+ 匹配多个字符

8.04 匹配指定字符串

8.05 匹配指定字符中的任意一个

8.06 匹配指定字符以外的字符

8.07 使用{M}、{M,N}指定字符串连续出现的次数

九、FAQ

9.01 DISTINCT可以应用于所有的列吗?

9.02 ORDER BY可以和LIMIT混用吗?

9.03 单引号什么时候用?

9.04 WHERE子句必须使用()吗

9.05 为什么通配符格式正确,却没有查出理想的数据?

参考资料:

  1. <<PostgresSQL 9 从零开始学>> ISBN 978-7-302-31673-2

发表评论

表情:
评论列表 (有 0 条评论,1020人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Nginx手册

    > Nginx是一款轻量级的HTTP服务器,采用事件驱动的异步非阻塞处理方式框架,这让其具有极好的IO性能,时常用于服务端的反向代理和负载均衡。 ![在这里插入图片描述][w

    相关 flex 手册

    Flex标准写法:   概述: 总的来说就是12个属性; 关于容器的6个,5个单一属性,分别定义了元素排列的方向, 行, 水平排列, 垂直排列, 空白分布, 和一个简写

    相关 Git手册

    `1024`了,程序猿们节日快乐,简单整理个供小白使用的git速查手册,之后有时间再完善,其实一会一些简单的操作平时工作就够用了(只要你别闹!一般不会有什么大问题),哈哈哈

    相关 DL概念手册

    > 编者按:入门深度学习的方法有很多,其中最便捷的是在线课程。但是,从做出这项选择起,新手要面临的就不仅是全新的知识体系,还有无数的陌生术语。在开始阅读前,请自问自答:什么是A

    相关 IDEA 快捷键手册

    IntelliJ IDEA 2021 Win 和 Mac 快捷键大全,IDEA 基本所有功能都可以通过快捷键来完成。 如果你掌握了所有IDEA的快捷键使用,那么你完全