PostgreSQL 数据库查询
数据库的查询
一、基本查询
语法:SELECT查询基本格式
①、创建frui表
create table fruit(
f_id character(10) not null,
s_id integer not null,
f_name character(255) not null,
f_price decimal(8,2) not null,
primary key(f_id));
②、插入字段
insert into fruit (f_id,s_id,f_name,f_price)
values('a1',101,'apple',5.2),
('b1',101,'berry',10.2),
('bs1',102,'orange',11.2),
('bs2',105,'melon',8.2),
('t1',102,'banana',7.2),
('t2',102,'grape',16.5),
('o2',103,'cherry',9.6);
③、查询数据库
二、单表查询
单表查询是从一张数据表中查询所需数据。
(一)、查询所有字段
1、使用通配符“*”查询所有字段
select * from 表名;
2、指定所有字段进行查询
select 字段, 字段,··· from fruit;
(二)、查询指定的字段
1、查询单个字段
select 字段 from 表名;
2、查询多个字段
select 字段1,字段2·· from 表名;
(三)、查询指定记录
select f_price from fruit where f_name='banana';
要求在查询的结果中消除重复的行。结果行的顺序可能变化。可以组合使用 DISTINCT 和 ORDER BY 来保证获取一致
的结果:
(四)、IN关键字查询
IN操作符用来查询满足指定条件范围内的记录,使用IN操作符时,将所有检索条件用括号括起来,检索条件用逗号分隔开,只要满足查询范围内的一个值即为匹配项。
select s_id,f_name,f_price from fruit where s_id in (102,103);
也可以使用NOT来检索不在条件范围内的记录。
select s_id,f_name,f_price from fruit where s_id not in (102,103);
(五)、BETWEEN AND关键字的范围查询
①、它是用来查询某个范围内的值,该操作符需要两个参数,即范围的开始值和结束值,如果记录的字段值满足指定的范围查询条件,则这些记录被返回。
select s_id,f_name,f_price from fruit where f_price between 5.2 and 8.2;
②、BETWEEN AND 操作符前可以加关键字NOT,表示指定范围之外的值,如果字段值不满足指定的范围内的值,则这些记录被返回。
select s_id,f_name,f_price from fruit where f_price not between 5.2 and 8.2;
(六)、带LIKE的字符匹配查询
通配符是一种在SQL的WHERE条件句子中拥有特殊含义的字符,SQL语句支持通配符,可以和LIKE一起使用的通配符是“%”。
①、查询以‘a’开头的水果名称;
select s_id,f_name from fruit where f_name LIKE 'a%';
②、查询水果中含有b的水果
select s_id,f_name from fruit where f_name LIKE '%b%';
(七)、查询空值
1、创建表
②、插入数据
③、查询为空的字段
select id,name ,email from customers where email is null;
与 IS NULL 相反的是NOT IS NULL ,该关键字查找字段不为空。
select id,name ,email from customers where email is not null;
(八)、AND查询
PostgreSQL在where子句中使用AND操作符,限定只有满足所有查询条件的记录才会被返回。可以使用AND连接两个甚至多个查询条件,多个表达式之间用AND分开。
select s_id ,f_name,f_price from fruit where s_id=101 and f_price >=6.0;
查询s_id =102 、103 ,价格大于等于5,并且是‘banana’的记录
select f_id ,f_name,f_price from fruit where s_id in('102','103') and f_price >=5.0 and f_name ='banana';
(九)、OR查询
在WHERE中使用OR操作符,表示记录只需要满足其中一个条件即可返回。OR也可以连接两个甚至多个查询条件,多个条件表达式之间用OR分开。
select s_id ,f_name,f_price from fruit where s_id='101' or s_id='102';
(十)、查询结果不重复
消除重复记录
(十一)、对结果进行排序
1、列排序
select s_id ,f_name,f_price from fruit order by f_name;
2、指定排序方向
(十二)、分组查询
1、创建分组
对水果进行分组,每类水果有几种
select s_id , count(*) as total from fruit group by s_id ;
2、HAVING过滤分组
GROUP BY 可以和HAVING一起限定显示所需满足的条件,只有满足条件的分组才会被显示。
分组,并显示水果种类大于1;
3、GROUP BY 和ORDER BY一起用
select s_id , count(f_name) from fruit group by s_id having count(f_name)>1 order by count(f_name);
(十三)、限制查询结果的数量
SELECT将返回所有匹配的行,可能是表中所有的行,如仅仅需要返回第一行或是前几行,使用LIMIT关键字:
查询前两行的数据:
如果指定返回记录的开始位置,则返回结果为从“位置偏移量”参数开始的指定行数,“行数”参数指定返回的记录条数。
三、集合函数查询
(一)、COUNT()函数
COUNT()函数统计数据表中包含的记录行的总数,或者根据查询结果返回列中包含的数据行数。
两种使用方法: COUNT(*) 计算表中总的行数,不管某列是否有数值或者为空值。
COUNT(字段名)计算指定列下总的行数,计算时将忽略字段值为空值的行。
①、查询customers一共有几列
指定列的值为空的行被COUNT()函数与GROUP BY 关键字一起使用
②、水果s_id分组,以及查询每组水果的数量
(二)、SUM()函数
SUM()是一个求总和的函数,返回指定列表的总和。
①、查询id=101 的水果价格总和
②SUM()也可以和group by、order by一起使用,计算每个分组的总和
价格分组,并查询每组价格总和,并按照价格升序排列
SUM()在进行操作时,会忽略值为NULL 的行
(三)、AVG()函数
AVG()函数通过计算返回的行数和每一行数据的和,求得指定列数据的平均值。
①、求id=101的价格平均
②、平均、分组、排序
AVG()函数在使用的时候,其参数为要计算的列名称,如果要得到多个列的多个平均值,则需要在每一列上使用AVG()函数。
(四)、MAX()函数
MAX()返回指定列中的最大值。
①、查询价格最高的
②、查询每组价格最高的,并且排序
MAX()函数不仅适用于查询数值类型,也适用于查询字符类型。
(五)、MIN()函数
MIN()函数返回查询列中最小值。
MIN()和MAX()函数一样,不仅适用于查询数值类型,也适用于查询字符类型。
四、连接查询
(一)、内连接
(二)、外连接
请参考我之前写过的博客:https://blog.csdn.net/qq_28289405/article/details/80254001
五、子查询
子查询是指一个查询语句嵌套在另一个查询语句内部的查询。在SELECT子句中先计算子查询,子查询结果作为外层另一个查询的过滤条件,查询可以基于一个表或是多个表。子查询中常用的操作符有ANY(SOME) 、ALL、IN 、EXISIT。子查询可以添加到SELECT 、UPDATE 、DELETE语句中,而且可以进行多层嵌套。子查询中也可以使用比较运算符,如“<”、“>”、“>=”、“!=”、“<=”等。
(一)、ANY 、SOME关键字的子查询
1、创建表并插入数据
ANY关键字接在一个比较操作符的后面,表示与子查询返回的任何值比较为TRUE,则返回TRUE。
(二)、ALL关键字的子查询
使用ALL需要同时满足所有内层查询的条件。ALL接在一个比较操作符后,表示与子查询返回的所有值比较为TRUE时,则返回TRUE;
select num1 from tb11 where num1 > all(select num2 from tb12);
(三)、带EXISTS关键字的子查询
EXISTS关键字后面的参数是一个任意的子查询,系统对子查询进行运算以判断它是否返回行,如果至少返回一行,那么EXISTS的结果为TRUE,此时外层查询语句将进行查询;如果子查询没有返回任何行,那么EXISTS的结果为FLASE,此时外层语句将不进行查询。
查询customers表中id=102的顾客,存在在fruit表中的纪录:
select * from fruit where exists(select f_name from customers where s_id=102);
EXISTS --- 关键字可以和条件表达式一起用。
EXISTS 和NOT EXISTS的结果只取决于是否会返回行,而不取决于这些行的内容,所以这个子查询输入列表通常是无关紧要的。
(四)、带IN关键字的子查询
IN关键字进行子查询的时候,内层查询语句仅仅返回一个数据列,这个数据列里的值将提供给外层查询语句进行比较操作。
PostgreSQL 数据库查询相关推荐
- PostgreSQL数据库查询——scan.l分析
src/backend/parser/scan.l --> lexical scanner for PostgreSQL 该文件中的规则需要和psql lexer一致.Lex用来生成扫描器,其工 ...
- postgresql时间查询范围内,范围外
postgresql数据库 查询某个日期的所有数据 select * from 表名 where where to_char(create_time,'yyyy-mm-dd')='2019-10-10 ...
- PostgreSQL数据库查询表的大小
PostgreSQL数据库查询数据库中每张表的大小, --数据库中单个表的大小(不包含索引) select pg_size_pretty(pg_relation_size('表名')); --查出所有 ...
- python postgresql跨数据库查询_Postgresql跨数据库查询
postgres 跨数据库查询 dblink 的安装 linux #cd postgres源码安装目录/contrib/dblink # make # make install 注意: 如果你在安装了 ...
- PostgreSQL数据库sql查询如何获取汉字拼音首字母
一.前言 在实际开发过程中,经常会使用模糊查询,根据某个关键字模糊搜索,一般是 name like '%123%' 这样查,但是如果某个关键字用户不记得呢,只知道首字母,又如何模糊查询呢?例如,查询 ...
- python postgresql跨数据库查询_python访问PostgreSQL数据库之连接库Psycopg2
python访问PostgreSQL数据库之连接库Psycopg2 作者:佣工7001 由于要在python访问PostgreSQL数据库,需要一个符合DB-API的连接库.通过搜索,锁定两个候选库: ...
- python 数据库查询结果邮件提醒_python读取postgresql数据库并发送相关提醒邮件
代码如下: #!/usr/bin/env python import smtplib from email.mime.text import MIMEText import psycopg2 impo ...
- PLC按条件查询MySQL/SQLServer/PostgreSQL数据库,将数据写入寄存器
IGT-DSER智能网关模块,支持各种PLC.智能仪表.远程IO与数据库之间双向通讯,既可以读取设备的数据上报到SQL数据库,也可以从数据库查询数据后写入到设备: PLC协议转HTTP ...
- 数据库服务器 之 PostgreSQL数据库的日常维护工作
来自:LinuxSir.Org 摘要:为了保持所安装的 PostgreSQL 服务器平稳运行, 我们必须做一些日常性的维护工作.我们在这里讨论的这些工作都是经常重复的事情, 可以很容易地使用标准的 U ...
最新文章
- 浅析移动端网站建设前都需要考虑哪些因素?
- 根据”so劫持”过360加固详细分析
- cad蜂鸟工具_蜂鸟视图地图数据中台,全面提升商业地产的可视化信息管控
- 制作html5谭木记页面,北斗区域地理配套练习答案
- linux之安装Clion和运行使用总结
- Flume整合SparkStreaming出现UnsupportedClassVersionError: org/apache/spark/streaming/flume/sink/SparkFlum
- Linux(ubuntu)更换内核方法
- 马云湖畔大学开学致辞:企业家要比谁都相信未来
- opengl将bmp读成像素_在 opengl 环境下将 texture 保存为 bmp 图片
- linux vnc 蓝屏,【典型问题分析 之 蓝屏问题】
- 小刘同学的sansen-virtuosoIC618电路仿真记录
- 模块1--BH1750的应用(IIC)
- Xmind for Mac 绿色破解(包含激活序列码)
- 时间序列实践(天池大赛)之一
- raw图片处理软件:DxO PhotoLab for Mac
- 云原生Java架构师——KubeSphere DevOps流水线部署RuoyiCloud
- java怎么把背景设成纯透明,怎么把BufferedImage设置背景为透明
- Jep解析字符串数学公式
- MCE | 间歇性禁食增强抗癌疗效
- 简单爬取Library genesis 免费文献下载网
热门文章
- 分布式WLAN全双工链路加权调度算法
- 阿里物联网平台(IOT)——业务服务器获取阿里iot平台接入设备的实时设备采集数据
- 栅格地图矢量化的一个思路
- 积分-钉钉考勤-加分
- 网站自动回复客服源码
- 多米诺骨牌java_通过递归和回溯找到所有可能的多米诺骨牌链
- 我的世界热力膨胀JAVA_我的世界1.12-1.6.4热力膨胀 Thermal Expansion Mod下载
- android中的m、mm、mmm、make指令
- 300 秒就完成第一超算 1 万年的计算量,量子霸权真时代要来了吗
- 总结 of 字节跳动的比赛(Bute Cup2018)——新闻标题生成