数据库的查询

一、基本查询

语法: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 数据库查询相关推荐

  1. PostgreSQL数据库查询——scan.l分析

    src/backend/parser/scan.l --> lexical scanner for PostgreSQL 该文件中的规则需要和psql lexer一致.Lex用来生成扫描器,其工 ...

  2. postgresql时间查询范围内,范围外

    postgresql数据库 查询某个日期的所有数据 select * from 表名 where where to_char(create_time,'yyyy-mm-dd')='2019-10-10 ...

  3. PostgreSQL数据库查询表的大小

    PostgreSQL数据库查询数据库中每张表的大小, --数据库中单个表的大小(不包含索引) select pg_size_pretty(pg_relation_size('表名')); --查出所有 ...

  4. python postgresql跨数据库查询_Postgresql跨数据库查询

    postgres 跨数据库查询 dblink 的安装 linux #cd postgres源码安装目录/contrib/dblink # make # make install 注意: 如果你在安装了 ...

  5. PostgreSQL数据库sql查询如何获取汉字拼音首字母

    一.前言 在实际开发过程中,经常会使用模糊查询,根据某个关键字模糊搜索,一般是 name like '%123%' 这样查,但是如果某个关键字用户不记得呢,只知道首字母,又如何模糊查询呢?例如,查询 ...

  6. python postgresql跨数据库查询_python访问PostgreSQL数据库之连接库Psycopg2

    python访问PostgreSQL数据库之连接库Psycopg2 作者:佣工7001 由于要在python访问PostgreSQL数据库,需要一个符合DB-API的连接库.通过搜索,锁定两个候选库: ...

  7. python 数据库查询结果邮件提醒_python读取postgresql数据库并发送相关提醒邮件

    代码如下: #!/usr/bin/env python import smtplib from email.mime.text import MIMEText import psycopg2 impo ...

  8. PLC按条件查询MySQL/SQLServer/PostgreSQL数据库,将数据写入寄存器

    IGT-DSER智能网关模块,支持各种PLC.智能仪表.远程IO与数据库之间双向通讯,既可以读取设备的数据上报到SQL数据库,也可以从数据库查询数据后写入到设备:     PLC协议转HTTP    ...

  9. 数据库服务器 之 PostgreSQL数据库的日常维护工作

    来自:LinuxSir.Org 摘要:为了保持所安装的 PostgreSQL 服务器平稳运行, 我们必须做一些日常性的维护工作.我们在这里讨论的这些工作都是经常重复的事情, 可以很容易地使用标准的 U ...

最新文章

  1. 浅析移动端网站建设前都需要考虑哪些因素?
  2. 根据”so劫持”过360加固详细分析
  3. cad蜂鸟工具_蜂鸟视图地图数据中台,全面提升商业地产的可视化信息管控
  4. 制作html5谭木记页面,北斗区域地理配套练习答案
  5. linux之安装Clion和运行使用总结
  6. Flume整合SparkStreaming出现UnsupportedClassVersionError: org/apache/spark/streaming/flume/sink/SparkFlum
  7. Linux(ubuntu)更换内核方法
  8. 马云湖畔大学开学致辞:企业家要比谁都相信未来
  9. opengl将bmp读成像素_在 opengl 环境下将 texture 保存为 bmp 图片
  10. linux vnc 蓝屏,【典型问题分析 之 蓝屏问题】
  11. 小刘同学的sansen-virtuosoIC618电路仿真记录
  12. 模块1--BH1750的应用(IIC)
  13. Xmind for Mac 绿色破解(包含激活序列码)
  14. 时间序列实践(天池大赛)之一
  15. raw图片处理软件:DxO PhotoLab for Mac
  16. 云原生Java架构师——KubeSphere DevOps流水线部署RuoyiCloud
  17. java怎么把背景设成纯透明,怎么把BufferedImage设置背景为透明
  18. Jep解析字符串数学公式
  19. MCE | 间歇性禁食增强抗癌疗效
  20. 简单爬取Library genesis 免费文献下载网

热门文章

  1. 分布式WLAN全双工链路加权调度算法
  2. 阿里物联网平台(IOT)——业务服务器获取阿里iot平台接入设备的实时设备采集数据
  3. 栅格地图矢量化的一个思路
  4. 积分-钉钉考勤-加分
  5. 网站自动回复客服源码
  6. 多米诺骨牌java_通过递归和回溯找到所有可能的多米诺骨牌链
  7. 我的世界热力膨胀JAVA_我的世界1.12-1.6.4热力膨胀 Thermal Expansion Mod下载
  8. android中的m、mm、mmm、make指令
  9. 300 秒就完成第一超算 1 万年的计算量,量子霸权真时代要来了吗
  10. 总结 of 字节跳动的比赛(Bute Cup2018)——新闻标题生成