【PostgreSql基础语法 】1、增删改查、where、limit、like模糊查询

Shell命令框和Navicat联合使用

    • 一、数据库层面(shell命令行)
    • 二、表格层面(Navicat)
    • 三、增删改查
      • 1. 增insert into
      • 2. 查询select
      • 3. UPDATE 改
      • 4. DELETE 删除
    • 四、 关键字
      • 1. AND
      • 2.OR
      • 3. NOT NULL 和 NULL
      • 4. LIKE 模糊查询
        • 4.1 like查找非字符类型
      • 5. IN 包含
        • 5.2 NOT IN
      • 6. BETWEEN 和 AND 的联合使用 包含两个端点值
      • 7. LIMIT
      • 8. OFFSET
      • 9. ORDER BY
      • 10. GROUP BY :
        • 10.1 何为分组
      • 11. HAVING 用来筛选分组后的各项数据
      • 12. DISTINCT 去重复 与select连用

一、数据库层面(shell命令行)

  1. 创建数据库

    postgres=# CREATE DATABASE school;
    
  2. 查看数据库

    postgres=# \l
    
  3. 选择数据库

    postgres=# \c school
    
  4. 删除数据库

    postgres=# DROP DATABASE school;
    

二、表格层面(Navicat)

  1. 创建表格

    CREATE TABLE table_name(字段名称 字段数据类型,column2 datatype,column3 datatype,.....columnN datatype,PRIMARY KEY( 一个或多个列 )
    );
    
  2. 删除表格

    DROP TABLE table_name;
    
  3. 创建schema模式

    CREATE SCHEMA myschema.表名(ID   INT              NOT NULL,NAME VARCHAR (20)     NOT NULL,AGE  INT              NOT NULL,ADDRESS  CHAR (25),SALARY   DECIMAL (18, 2),PRIMARY KEY (ID)
    );
    
  4. 删除schema模式

    • 删除一个空模式

      DROP SCHEMA myschema;
      
    • 删除一个模式及包含的所有对象

      DROP SCHEMA myschema CASCADE;
      

三、增删改查

1. 增insert into

sql语法

INSERT INTO TABLE_NAME (字段名1, column2, column3,...columnN) VALUES (value1, value2, value3,...valueN)

INSERT INTO TABLE_NAME (字段名1, column2, column3,...columnN)
VALUES (value1, value2, value3,...valueN);
// 举例
INSERT INTO book(id,name,age)VALUES(1,'张一山',24);
INSERT INTO book values (2,'王祖蓝',23);
INSERT INTO book values (3,'李一同');
INSERT INTO book values (4,'吴晓非');
INSERT INTO book values (5);
INSERT INTO book values (6,24);
// 遵循顺序对应
// 下面是结果
1	张一山	24
2	王祖蓝	23
3	李一同	null
4	吴晓非	null
5    null   null
6	 24     null

2. 查询select

SQL语法:

SELECT column1, column2,...columnN FROM table1 where 条件;

// 查询所有字段使用*;
SELECT * FROM book
// 查询系统当前时间
SELECT CURRENT_TIMESTAMP; 

3. UPDATE 改

sql语法:

UPDATE table_name SET column1 = value1, column2 = value2...., columnN = valueN WHERE [condition];

UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];

// 修改name=lcy字段的年龄age为16

UPDATE company SET age=16 WHERE name='lcy';

// 若不加where条件则 修改某个字段下的所有内容

UPDATE company set salary=13000, age=18

1 paul 18 加拿大 13000.00 2023-07-05
2 allen 18 纽约 13000.00 2023-07-20
3 teddy 18 加利福尼亚 13000.00 2023-07-06
4 mark 18 旧金山 13000.00 2023-07-07
5 ming 18 曼彻斯特 13000.00 2023-07-08
8 zx 18 北京 13000.00 2023-07-15
7 lqq 18 陕西 13000.00 2023-07-10
6 james 18 曼哈顿 13000.00 2023-07-09

// 和IN连用

UPDATE company set salary=19000,age=19 WHERE id IN(1,2,3)

// 和like连用

UPDATE company set salary=700,age=19 WHERE name like '%y'

5 ming 18 曼彻斯特 13000.00 2023-07-08
6 james 18 曼哈顿 13000.00 2023-07-09
1 paul 19 加拿大 19000.00 2023-07-05
2 allen 19 纽约 19000.00 2023-07-20
4 mark 21 旧金山 11000.00 2023-07-07
7 lqq 19 陕西 700.00 2023-07-10
8 zx 19 北京 700.00 2023-07-15
3 teddy 19 加利福尼亚 700.00 2023-07-06

4. DELETE 删除

delete删除表的内容,drop删除表的结构
sql语法:

DROP TABLE 表名;
TRUNCATE TABLE 表名

语法:DELETE FROM table_name WHERE [condition];

// 条件删除

DELETE FROM company WHERE name='james'

// 删除表里所有内容

DELETE FROM company

区别:
使用 TRUNCATE TABLE 表名=DELETE FROM company但是前者不会产生日志

四、 关键字

1. AND

AND 表示多个条件必须同时成立

找出 AGE(年龄) 字段大于等于 25,并且 SALARY(薪资) 字段大于等于 16000 的数据:
SELECT * FROM company WHERE age>=25 AND salary >= 16000

2.OR

OR 表示示多个条件中只需满足其中任意一个即可

找出 AGE(年龄) 字段大于等于 25,或者 SALARY(薪资) 字段大于等于 26000 的数据:SELECT * FROM company WHERE age>=25 OR salary >= 26000

3. NOT NULL 和 NULL

在公司表中找出 AGE(年龄) 字段不为空/为空的记录:
SELECT * FROM company WHERE age IS NOT NULL;
SELECT * FROM company WHERE age IS NULL;

4. LIKE 模糊查询

模糊查询就需要用到like操作符。另外还有两个通配符。

①%通配符。%表示出现任意字符,出现的字符数可以是0,1,无数。

②_ 通配符。_ 表示出现有且仅有一次字符。

  • 如果没有使用以上两种通配符,LIKE 子句和等号 = 得到的结果是一样的。

在 PostgreSQL 中,LIKE 子句是只能用于对字符进行比较,因此在下面例子中,我们要将整型数据类型转化为字符串数据类型。

实例描述
WHERE SALARY::text LIKE ‘200%’找出 SALARY 字段中以 200 开头的数据。
WHERE SALARY::text LIKE ‘%200%’找出 SALARY 字段中含有 200 字符的数据。
WHERE SALARY::text LIKE ‘_00%’找出 SALARY 字段中在第二和第三个位置上有 00 的数据。
WHERE SALARY::text LIKE ‘2_%_%’找出 SALARY 字段中以 2 开头的字符长度大于 3 的数据。
WHERE SALARY::text LIKE ‘%2’找出 SALARY 字段中以 2 结尾的数据
WHERE SALARY::text LIKE ‘_2%3’找出 SALARY 字段中 2 在第二个位置上并且以 3 结尾的数据
WHERE SALARY::text LIKE ‘2___3’找出 SALARY 字段中以 2 开头,3 结尾并且是 5 位数的数据

如:在 COMPANY 表中找出 NAME(名字) 字段中以 Pa 开头的的数据:

SELECT * FROM company WHERE name like 'pa%';//以pa开头的
SELECT * FROM company WHERE name like '%l%';// name中含有字母l的
SELECT * FROM company WHERE name like '%l';//以字母l结尾的

当我们大概知道name后面有一个字符,前面有一个字符的时候,我们就可使用_

SELECT * FROM company WHERE name like '_z_';

4.1 like查找非字符类型

// 查询年龄=19的
SELECT * FROM company WHERE age::TEXT like '19'
1 paul 19 加拿大 19000.00 2023-07-05
2 allen 19 纽约 19000.00 2023-07-20
7 lcx 19 陕西 700.00 2023-07-10

// 查询年龄以2开头的
SELECT * FROM company WHERE age::TEXT like '2_'
// 查询工资以19开头的
SELECT * FROM company WHERE salary::TEXT like '19%'

5. IN 包含

比如使用or时:薪水在where salary = 10000 or 20000时,就可以使用in子句
SELECT * FROM company WHERE salary=17000 OR salary=19000;
现在我们可以直接使用IN子句:可以是1个或多个
SELECT * FROM company WHERE salary in(17000,19000,12000);
SELECT * FROM company WHERE salary in(28000);

5.2 NOT IN

刚好和IN相反

6. BETWEEN 和 AND 的联合使用 包含两个端点值

// 找出工资在4500到9000之间的
SELECT * FROM "company" WHERE salary BETWEEN 4500 AND 9000;

7. LIMIT

主要用于分页查询 一般分页关键字放在最后的

limit 子句用于限制 SELECT 语句中查询的数据的数量。

基本语法:

SELECT column1, column2 FROM table_name LIMIT [no of rows]

举例:
// 返回四个数据
SELECT * FROM company LIMIT 4
// 返回四个数据并按照id排序
SELECT * FROM company ORDER BY id LIMIT 4

8. OFFSET

  • 概念:OFFSET 偏移量(初始偏移量为0)offset 1 :意思就是从第2行开始
    注:LIMIT x OFFSET y 是为了与PostgreSQL兼容, 查询出的数据结果集为 [y+1,x+y]。

  • offset使用: offset x

  • sql语法:

    // 从x+1行开始 取数据
    SELECT * FROM "company" OFFSET 1从第二行开始取数据 含x+1行的数据

  • 配合limit使用

    // 全部数据

    5 ming 18 曼彻斯特 13000.00 2023-07-08
    1 paul 19 加拿大 19000.00 2023-07-05
    2 allen 19 纽约 19000.00 2023-07-20
    4 mark 21 旧金山 11000.00 2023-07-07
    7 lcx 19 陕西 700.00 2023-07-10
    8 zx 19 北京 700.00 2023-07-15
    3 teddy 19 加利福尼亚 700.00 2023-07-06
    6 ljj 28 shanxi 900.00 2023-07-19

    // 从第2行开始,取4行数据

    SELECT * FROM "company" LIMIT 4 OFFSET 1

    1 paul 19 加拿大 19000.00 2023-07-05
    2 allen 19 纽约 19000.00 2023-07-20
    4 mark 21 旧金山 11000.00 2023-07-07
    7 lcx 19 陕西 700.00 2023-07-10

9. ORDER BY

  • 概念:排序, 一般配合where子句一起使用

  • 基础语法

    SELECT column-list
    FROM   table_name
    [WHERE condition]
    [ORDER BY column1, column2, .. columnN] [ASC | DESC];
  • 默认是升序排序 即 order by column asc,若想改成降序则使用 desc

    // 按照id降序排序
    SELECT * FROM company ORDER BY id desc

10. GROUP BY :

  • 基础知识:分组,配合select使用 和聚合函数使用

    GROUP BY子句通常与聚合函数一起用于统计数据。
    GROUP BY子句将行排列成组,聚合函数返回每个组的统计量。

    • 概念:

      目的GROUP BY 语句和 SELECT 语句一起使用,用来对相同的数据进行分组。

      位置:GROUP BY 在一个 SELECT 语句中,放在 WHRER 子句的后面,ORDER BY 子句的前面。

      SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME;

    • 语法:

      SELECT column-list
      FROM table_name
      WHERE [ conditions ]
      GROUP BY column1, column2....columnN
      
    • 使用 group by 时 只能select 出 分组字段和聚合函数

    • 举例

      // 全部

      5 ming 18 曼彻斯特 13000.00 2023-07-08
      1 paul 19 加拿大 19000.00 2023-07-05
      2 allen 19 纽约 19000.00 2023-07-20
      4 mark 21 旧金山 11000.00 2023-07-07
      7 lcx 19 陕西 700.00 2023-07-10
      8 zx 19 北京 700.00 2023-07-15
      3 teddy 19 加利福尼亚 700.00 2023-07-06
      6 ljj 28 shanxi 900.00 2023-07-19

      // 根据name进行分组,并且找出每个人的工资总额

      SELECT name,SUM(salary) FROM company GROUP BY name

      teddy 700.00
      allen 19000.00
      ljj 900.00
      lcx 700.00
      paul 19000.00
      ming 13000.00
      mark 11000.00
      zx 700.00

10.1 何为分组

目前我们表中的数据人名都是一个,我们现在往表中加入几条数据

1 paul 19 加拿大 19000.00 2023-07-05
2 allen 19 纽约 19000.00 2023-07-20
4 mark 21 旧金山 11000.00 2023-07-07
7 lcx 19 陕西 700.00 2023-07-10
8 zx 19 北京 700.00 2023-07-15
3 teddy 19 加利福尼亚 700.00 2023-07-06
6 ljj 28 shanxi 900.00 2023-07-19
9 paul 24 Houston 20000.00 2023-07-11
10 James 44 Norway 5000.00 2023-07-19
11 James 45 Texas 5000.00 2023-07-20

再次进行一次分组看
SELECT name,SUM(salary) FROM company GROUP BY name

teddy 700.00
allen 19000.00
James 10000.00
ljj 900.00
lcx 700.00
paul 39000.00
ming 13000.00
mark 11000.00
zx 700.00
发现james和paul已经进行了合并相加

// 根据name进行分组,并且找出每个人的工资总额,根据工资总额进行排序

SELECT name,SUM(salary) FROM company GROUP BY name ORDER BY SUM(salary)

teddy 700.00
lcx 700.00
zx 700.00
ljj 900.00
mark 11000.00
ming 13000.00
paul 19000.00
allen 19000.00

// 根据name进行分组,并且找出每个人的工资总额,且筛选出年龄大于20的数据,最后根据工资总额进行排序

SELECT name,SUM(salary) FROM company WHERE age>20 GROUP BY name ORDER BY SUM(salary)

ljj 900.00
mark 11000.00

11. HAVING 用来筛选分组后的各项数据

  • 基础语法:HAVING 是在由 GROUP BY 子句创建的分组基础上设置条件,所以要放在group by后面

     SELECT column1, column2FROM table1WHERE [ conditions ]GROUP BY column1, column2HAVING [ conditions ]ORDER BY column1, column2
    
  • 位置:

    AVING 子句必须放置于 GROUP BY 子句后面,ORDER BY 子句前面

  • 举例

    // 找出根据 NAME 字段值进行分组,并且 name(名称) 字段的计数少于 2 数据

    select name from company group by name having count(name) < 2

    teddy
    allen
    ljj
    lcx
    ming
    mark
    zx

    // 找出根据 NAME 字段值进行分组,并且 name(名称) 字段的计数大于 1 数据

    select name from company group by name having count(name) > 1

    James
    paul
    其他: SELECT id,salary FROM company GROUP BY salary,id HAVING MAx(age)>23 ORDER BY id

12. DISTINCT 去重复 与select连用

  • 概念:

    DISTINCT 关键字与 SELECT 语句一起使用,用于去除重复记录,只获取唯一的记录

  • 基础语法
    SELECT DISTINCT column1, column2,.....columnN FROM table_name WHERE [condition]

  • 举例
    剔除company中重复的name 我们可以在结果中看到去掉了重复的james和paul

SELECT DISTINCT name FROM company

teddy
allen
James
ljj
lcx
paul
ming
mark
zx

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/133832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux boot阶段内存分配(x86)

x86中没有boot memory allocator&#xff0c;是用 memblock 来分配的。 memblock有memory 与reserved两种类型&#xff0c;它们的内存是静态内存&#xff0c;不需要用memblock本身去维护&#xff0c;它们被标记为__initdata_memblock&#xff0c;会在boot结束后&#xff08;fre…

渗透实战靶机2wp

0x00 简介 1、测试环境 目标IP&#xff1a;10.xxxx 测试IP&#xff1a;192.168.139.128 测试环境&#xff1a;win10、kali等 测试时间&#xff1a;2021.7.22-2021.7.22 测试人员&#xff1a;ruanruan 2、测试过程 本次实战主要通过对收集到的端口、目录等信息进行持续整…

润和软件HopeStage与奇安信网神终端安全管理系统、可信浏览器完成产品兼容性互认证

近日&#xff0c;江苏润和软件股份有限公司&#xff08;以下简称“润和软件”&#xff09;HopeStage 操作系统与奇安信网神信息技术&#xff08;北京&#xff09;股份有限公司&#xff08;以下简称“奇安信”&#xff09;终端安全管理系统、可信浏览器完成产品兼容性测试。 测试…

SQLSugar查询返回DataTable

SQLSugar是一个用于执行SQL查询的C#库&#xff0c;它提供了简单易用的API接口来执行SQL查询。要查询返回DataTable&#xff0c;可以使用SQLSugar的QueryHelper类。 以下是一个示例代码&#xff0c;展示了如何使用SQLSugar的QueryHelper类查询返回DataTable&#xff1a; 首先&…

SICP01(待续)

一、Lisp概览 语言&#xff1a;规则本身计算机科学的任务&#xff1a;形式化有关”怎么做“的指令性知识&#xff0c;并付诸实践问题产生&#xff1a;构建大型系统的时候难以管理解决方法&#xff1a;在大系统中控制复杂度的方法也是计算机所关注的注意&#xff1a;计算机中的…

阿里云二级域名绑定与宝塔Nginx反向代理配置

在阿里或者腾讯...各大域名商买好域名&#xff0c;备案解析好&#xff0c;目标URL&#xff0c;是真正的地址&#xff0c;比如一些端口&#xff0c;后者会自动填写。 注意ssl配置好&#xff0c;这里不要带反代端口

vue中异步更新$nextTick

1.需求 编辑标题, 编辑框自动聚焦 点击编辑&#xff0c;显示编辑框让编辑框&#xff0c;立刻获取焦点 2.代码实现 <template><div class"app"><div v-if"isShowEdit"><input type"text" v-model"editValue"…

王道p18 第12题假设 A中的 n个元素保存在一个一维数组中,请设计一个尽可能高效的算法,找出A的主元素。若存在主元素,则输出该元素:否则输出-1

视频讲解在&#xff1a;&#x1f447; p18 第12题 c语言实现王道数据结构课后习题_哔哩哔哩_bilibili 从前向后扫描数组元素&#xff0c;标记出一个可能成为主元素的元素 Num。然后重新计数&#xff0c;确认 Num 是否是主元素。 我们可分为以下两步: 1.选取候选的主元素。依…

【软考:系统集成项目管理】之 项目成本管理

1. 成本管理的过程 制订成本管理计划成本估算成本预算成本控制 2. 过程的输入、输出、工具与技术 过程输入工具与技术输出1. 制订成本管理计划1. 项目管理计划 2. 项目章程 3. 事业环境因素 4. 组织过程资产1. 专家判断 2. 分析技术 3. 会议1. 成本管理计划2. 成本估算1. 成…

YOLO目标检测——汽车头部尾部检测数据集【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;用于训练自动驾驶系统中的车辆感知模块&#xff0c;以实现对周围车辆头部和尾部的准确检测和识别数据集说明&#xff1a;汽车头部尾部检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富标签说明&#xff1a;使用lableimg标注软…

【JMeter】后置处理器的分类以及场景介绍

1.常用后置处理器的分类 Json提取器 针对响应体的返回结果是json格式的会自动生成新的变量名为【提取器中变量名_MatchNr】,取到的个数由jsonpath expression取到的个数决定 可以当作普通变量调用,调用语法:${提取器中变量名_MatchNr}正则表达式提取器 返回结果是任何数据格…

一款好用的PDF转翻页电子书网站

​你是否曾经遇到过PDF文件无法翻页或者阅读不便的问题&#xff1f;今天给大家推荐一款好用的PDF转翻页电子书网站&#xff0c;让你轻松阅读PDF文件&#xff0c;不再烦恼翻页问题&#xff01; 一、网站介绍 这款FLBOOK在线制作电子杂志网站支持多种电子文件格式转换&#xff0…

C# 9.0 record和with的定义及使用

C# 9 引入record&#xff0c;它一种可以创建的新引用类型&#xff0c;而不是类或结构。 C# 10 添加了 record structs&#xff0c;以便可以将记录定义为值类型。 记录与类不同&#xff0c;区别在于record类型使用基于值的相等性。 两个记录类型的变量在它们的类型和值都相同时&…

JWT简介 JWT结构 JWT示例 前端添加JWT令牌功能 后端程序

目录 1. JWT简述 1.1 什么是JWT 1.2 为什么使用JWT 1.3 JWT结构 1.4 验证过程 2. JWT示例 2.1 后台程序 2.2 前台加入jwt令牌功能 1. JWT简述 1.1 什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准&#xff08;(RFC 7…

〔001〕虚幻 UE5 安装教程

✨ 目录 🎈 下载启动程序🎈 注册个人账户🎈 选择引擎版本🎈 选择安装选项🎈 虚幻商城的使用🎈 每月免费插件🎈 安装插件🎈 下载启动程序 下载地址:https://www.unrealengine.com/zh-CN/download点击上面地址,下载 UE5 启动程序并安装🎈 注册个人账户 打开商…

Linux多虚拟主机和配置限制访问与日志

目录 一、多虚拟主机 1.配置单网卡多个ip 2.给每个主机站点设置主页 3.测试访问 二、限制访问 1.限制所有 2.放行192.168.0.0/24网段访问 三、日志与状态页 1.定义访客日志 2.状态页配置 一、多虚拟主机 1.配置单网卡多个ip ip address add 192.168.0.231/24 dev e…

案例研究|腾讯音乐娱乐集团与JumpServer共探安全运维审计解决方案

近年来&#xff0c;得益于人民消费水平的提升以及版权意识的加强&#xff0c;用户付费意愿和在线用户数量持续增长&#xff0c;中国在线音乐市场呈现出稳定增长的发展态势。随着腾讯音乐于2018年12月上市&#xff0c;进一步推动了中国在线音乐市场的发展。 腾讯音乐娱乐集团&a…

rust入门基础案例:猜数字游戏

案例出处是《Rust权威指南》&#xff0c;书中有更加详细的解释。从这个例子中&#xff0c;我们可以了解到 rust 的两个操作&#xff1a; 如何从控制台读取用户输入rust 如何生成随机数 代码格式化 编译器可在保存时对代码做格式化处理&#xff0c;底层调用 rustfmt 来实现&a…

Kubernetes Dashboard 用户名密码方式登录

Author&#xff1a;rab 前言 为了 K8s 集群安全&#xff0c;默认情况下 Dashboard 以 Token 的形式登录的&#xff0c;那如果我们想以用户名/密码的方式登录该怎么操作呢&#xff1f;其实只需要我们创建用户并进行 ClusterRoleBinding 绑定即可&#xff0c;接下来是具体的操作…

【MedusaSTears】怎么禁用edge浏览器截图功能?

版本 Microsoft Edge 版本 119.0.2151.44 (正式版本) (64 位) Ctrl Shift S 竟然是浏览器的截屏? 特么的啥时候多了这么个快捷键? 然后还没办法禁用,真TMD傻哔 edge://settings/accessibility解决方式: 参考资料: 怎么禁用edge浏览器截图功能&#xff1f; 您好&#x…