当前位置: 首页 > article >正文

数据库-PostgreSQL学习笔记

目录

  • PostgreSQL介绍与安装
    • docker安装
    • 腾讯云免费领用1个月
  • 数据库操作
    • 连接数据库实例
    • 创建数据库
    • 查看数据库列表
    • 使用数据库
    • 删除数据库
    • 修改数据库属性
  • 表操作
    • 字段类型
      • 整数
      • 浮点数
      • 日期与时间类型
      • 字符串类型
    • DDL
      • CREATE
      • DROP
      • ALTER
    • DML
      • INSERT
      • UPDATE
      • DELETE
  • 查询
    • 查询所有数据
    • 查询部分列
    • 指定条件查询
    • 查询结果排序
    • 分页查询
    • 多表查询
    • 子查询
      • exists
      • in
      • UNION查询
  • 高级特性
    • 视图
    • 外键
    • 插件
    • 函数
      • 聚合函数
  • 参考


PostgreSQL介绍与安装

docker安装

下载镜像:

docker pull postgre

启动容器:

docker run -d --name postgres --restart always -e POSTGRES_PASSWORD='admin'   -e POSTGRES_USER='admin' -e ALLOW_IP_RANGE=0.0.0.0/0 -v /data/postgres/data:/var/lib/postgresql -p 5432:5432 -d postgres

腾讯云免费领用1个月

学习中心-免费领取一个月
在这里插入图片描述
博主这里选择了白嫖~~~

数据库操作

连接数据库实例

windows下使用pgAdmin
linux下使用psql

psql -U 用户名 -h 访问地址 -p 端口 -d postgres

腾讯云提供了网页版的连接方式,博主直接使用这个,免得安装其他的了。

创建数据库

语法:

create database database_name;

示例:

create database lady_killer9;

在这里插入图片描述

查看数据库列表

在这里插入图片描述

使用数据库

使用数据库语法

psql 数据库名

例如:

psql lady_killer9 

腾讯云上,点一下就可以了。

退出当前数据库

\q

删除数据库

语法:

drop database database_name;

示例:

drop database lady_killer9;

在这里插入图片描述

修改数据库属性

语法:

alter database database_name xxx;

示例:
在这里插入图片描述

表操作

字段类型

整数

  • SMALLINT
  • INT(INTEGER)

浮点数

  • REAL: 6位10进制数字精度
  • NUMERIC(m,n):任意精度类型,m代表长度(含精度部分),n代表精度,四舍五入
    例如,NUMERIC(3,2) 可以保存 3.11,但是100.00就会报错,3.126可以,但会保存位3.13

日期与时间类型

  • TIME: 时间,例如:16:24:05
  • DATE:日期,例如:2023-12-02
  • TIMESTAMP:日期和时间,例如:2023-12-02 16:24:05

字符串类型

  • CHAR(n):固定长度字符串,不足补空白
  • VARCHAAR:变长字符串,有长度限制
  • TEXT:可以认为无长度限制

DDL

CREATE

CREATE TABLE weather (
    city            varchar(80),
    temp_lo         int,           -- low temperature
    temp_hi         int,           -- high temperature
    prcp            real,          -- precipitation
    date            date
);

在这里插入图片描述

DROP

语法:

DROP TABLE tablename;

示例:

DROP TABLE weather;

在这里插入图片描述

ALTER

ALTER TABLE weather RENAME to weather2;

在这里插入图片描述

DML

INSERT

插入数据

INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');

在这里插入图片描述
通过逗号分隔values后面的数据元组,可以批量插入。除此之外,可以从已有表进行

INSERT INTO weather2 SELECT * from weather;

在这里插入图片描述
也可以使用COPY命令进行本地文件读取,然后写入表格。

COPY weather FROM '/home/user/weather.txt';

当然,这里也引入了安全问题。

UPDATE

UPDATE weather SET temp_lo = 10 WHERE temp_hi = 50;

在这里插入图片描述

DELETE

DELETE FROM weather WHERE city = 'Hayward';

在这里插入图片描述

查询

查询所有数据

SELECT * FROM weather;

在这里插入图片描述

查询部分列

SELECT temp_lo,temp_hi FROM weather;

在这里插入图片描述

指定条件查询

SELECT * FROM weather WHERE city = 'San Francisco' AND prcp > 0.0;

在这里插入图片描述

查询结果排序

SELECT * FROM weather order by temp_lo;

在这里插入图片描述

分页查询

与 M Y S Q L 的 L I M I T m , n 语法不同, p o s t g r e s q l 使用的是 L I M I T 与 O F F S E T \color{red}{与MYSQL 的 LIMIT m,n语法不同,postgresql使用的是LIMIT与OFFSET} MYSQLLIMITm,n语法不同,postgresql使用的是LIMITOFFSET
,limit后面的数字是返回的数量,offset后面的是下标。

SELECT * FROM weather order by temp_lo LIMIT 1 OFFSET 1;

在这里插入图片描述
每页显示数量count,和页码(从1开始)的关系如下:

limit count offset ((page_num-1)*count)

多表查询

SELECT * FROM weather JOIN cities ON city = name;

在这里插入图片描述
注意,列名有重复时,可以使用表的别名来区分。

SELECT weather.city, weather.temp_lo, weather.temp_hi,
       weather.prcp, weather.date, cities.location
    FROM weather JOIN cities ON weather.city = cities.name;

同样,postgresql也有外连接,左外连接

SELECT * FROM weather LEFT OUTER JOIN cities ON weather.city = cities.name;

在这里插入图片描述

子查询

exists

子查询结果为真,返回主查询结果,否则不返回。

SELECT * FROM weather WHERE EXISTS (SELECT city FROM cities WHERE NAME = 'lady_killer9');

在这里插入图片描述

SELECT * FROM weather WHERE EXISTS (SELECT city FROM cities WHERE NAME = 'San Francisco');

在这里插入图片描述

SELECT * FROM weather WHERE EXISTS (SELECT city FROM cities WHERE NAME = 'San Francisco' and city = name);

在这里插入图片描述

in

子查询结果作为结果集,主查询条件的字段从里面查找。

SELECT * FROM weather WHERE city in (SELECT NAME FROM cities WHERE NAME = 'San Francisco');

UNION查询

union查询用于合并查询结果,会去除重复的。

SELECT * FROM weather UNION SELECT * FROM weather WHERE city = 'San Francisco';

在这里插入图片描述
不想去除时,在UNION后添加ALL即可。

SELECT * FROM weather UNION ALL SELECT * FROM weather WHERE city = 'San Francisco';

在这里插入图片描述

高级特性

视图

如果你对一些数据感兴趣,又不想每次都写查询语句,可以建立一个视图,这个视图让你像普通表一样使用。

CREATE VIEW myview AS
    SELECT name, temp_lo, temp_hi, prcp, date, location
        FROM weather, cities
        WHERE city = name;

SELECT * FROM myview;

在这里插入图片描述

外键

用于保护数据完整性,防止插入脏数据。

CREATE TABLE cities2 (
        name     varchar(80) primary key,
        location point
);

CREATE TABLE weather2 (
        city      varchar(80) references cities2(name),
        temp_lo   int,
        temp_hi   int,
        prcp      real,
        date      date
);

在这里插入图片描述

插件

函数

聚合函数

max
查询最大值,min是最小值,不再展示。

SELECT max(temp_lo) FROM weather;

在这里插入图片描述
注意:max不能直接放到where中。
count
用于统计数量。

SELECT city, count(*), max(temp_lo) FROM weather GROUP BY city;

在这里插入图片描述
sum
用于求和
avg
用于求平均值

SELECT sum(temp_lo),avg(temp_lo) FROM weather;

在这里插入图片描述
有聚合函数时,可以通过HAVING进行过滤

SELECT city, count(*), max(temp_lo) FROM weather GROUP BY city HAVING max(temp_lo) < 40;

在这里插入图片描述

参考

postgresql官网
postgresql教程
腾讯云-postgresql
数据库-Mysql使用学习笔记(命令行及图形化界面)


http://www.kler.cn/news/156102.html

相关文章:

  • Presto:基于内存的OLAP查询引擎
  • C/C++ 整数二分以及浮点数二分
  • 项目实战一-性能测试筑基
  • 【PTA-C语言】编程练习3 - 循环结构Ⅰ
  • 蓝桥杯物联网竞赛_STM32L071_8_ADC扩展模块
  • 什么是Anaconda
  • jsp高校教师调课管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
  • GeoServer漏洞(CVE-2023-25157)
  • 491. 递增子序列
  • Golang语言基础之切片
  • 一些后端测试的东西
  • day5 两数之和为x
  • SSM SpringBoot vue社团事务管理系统
  • mysql中的锁及其作用
  • 【迅搜05】索引配置(二)字段定义与设计
  • Vue经典面试题源码级分析【一】
  • python之UDP网络应用程序开发
  • 传感器:探索Android中的传感器功能与使用
  • Linux 进程状态
  • Linux socket编程(9):IO复用之poll和epoll详解
  • 【算法】单调队列 滑动窗口最大值
  • 51单片机项目(19)——基于51单片机的传送带产品计数器
  • 轻量封装WebGPU渲染系统示例<42>- vsm阴影实现过程(源码)
  • conda旧环境快速复制新环境
  • 使用mongodb实现简单的读写操作
  • Leetcode刷题详解——乘积为正数的最长子数组长度
  • 〖大前端 - 基础入门三大核心之JS篇㊻〗- JS + CSS实现动画
  • jvm的2种赋值机制
  • 唯创知音WT2605C语音芯片MP3音频IC:轻松实现指令随机播放与无缝循环播放等功能
  • Siemens-NXUG二次开发-C/C++/Python环境配置[20231204]