Postgresql 基礎使用語法

1.數據類型

1.數字類型

類型 ???長度 ????說明 ?????范圍 ???與其他db比較

Smallint 2字節 小范圍整數類型 32768到+32767

integer 4字節 整數類型 2147483648到+2147483647

bigint 8字節 大范圍整數類型 -9233203685477808到+9223203685477807

decimal 可變 用戶指定 精度小數點前131072位;小數點后16383位

numeric 可變 用戶指定 精度小數點前131072位;小數點后16383位

real 4字節 變長,不精確 6位十進制精度

double precision 8字節 變長,不精確 15位十進制精度

smallserial 2字節 smallint I自增序列 1到32767

serial 4字節 Integer自增序列 1到2147483647

bigserial 8字節 bigint自增序列 1到922372036854775807

money 8字節 金錢類型

  1. 字符類型

類型

長度

說明

varchar(n),character varying(n)

變長

字符最大數有限制

char(n),character(n)

定長

固定長度字符串字符數沒達到最大值則使用空白填充

text

變長

無長度限制

  1. 日期時間

類型 長度 說明 范圍 與其他db比較

  1. 基本操作

2.1數據庫操作

//創建數據庫

CREATE DATABASE 庫名

//在創建數據庫時指定參數信息 WITH OWNER:所有者 ENCODING:編碼格式

CREATE DATABASE 庫名 WITH OWNER = postgres ENCODING = ‘utf-8’

//修改數據庫名稱

ALTER DATABASE 舊庫名 RENAME TO 新庫名

//修改連接限制數

ALTER DATABASE 庫名 CONNECTION LIMIT 20

//刪除數據庫

DROP DATABASE 庫名

2.2表操作

//創建表

CREATE TABLE 表名(

字段1 類型1,

字段2 類型2

);

例: ?

一,class_info表

create table class_info

(

????id ???????????????????serial not null

??????????????????????????constraint class_info_pk

??????????????????????????primary key,

????name ?????????????????varchar,

????write_date ???????????timestamp

);

serial not null constraint student_pk primary key,

"serial" 列被設置為 "not null",并且有一個名為 "student_pk" 的主鍵約束。

主鍵的作用是確保表中的每個數據行都可以被唯一地標識,并且主鍵值不能重復或為空。在創建主鍵約束后,系統會自動檢查插入的數據是否違反了主鍵的唯一性要求,如果有重復的主鍵值或缺少主鍵值,就會拋出錯誤,阻止插入操作。

comment on table student is '學生表'; comment on column student.name is '名稱';

給名為 student?的表添加注釋,注釋內容為 '學生表',用于描述表的作用或用途。

-- id serial not null 表示id自增??-- id integer not null 表示id不自增

二,studen?表

create table student

(

????id ???????????????????serial not null

??????????????????????????constraint student_pk?

??????????????????????????primary key,

????name ?????????????????varchar,

????class_id ????????????integer ?references "class_info"("id"),????//references 外鍵

????height ???????????????numeric,

????weight ???????????????numeric,

????write_date ???????????timestamp

);

//外鍵

外來鍵是一個(或數個)指向另外一個表格主鍵的欄位。

假設我們有兩個表格:一個 CUSTOMER 表格,里面記錄了所有顧客的資料;另一個 ORDERS 表格,里面記錄了所有顧客訂購的資料。在這里的一個限制,就是所有的訂購資料中的顧客,都一定是要跟在 CUSTOMER 表格中存在。在這里,我們就會在 ORDERS 表格中設定一個外來鍵,而這個外來鍵是指向 CUSTOMER 表格中的主鍵。這樣一來,我們就可以確定所有在 ORDERS 表格中的顧客都存在 CUSTOMER 表格中。換句話說,ORDERS表格之中,不能有任何顧客是不存在于 CUSTOMER 表格中的資料。

CUSTOMER 表格

欄位名

性質

SID

主鍵

Last_Name

First_Name

ORDERS 表格

欄位名

性質

Order_ID

主鍵

Order_Date

Customer_SID

外來鍵

Amount

2.3表操作

//修改表名

ALTER TABLE 舊表名 RENAME TO 新表名

//修改字段名

ALTER TABLE 表名 RENAME 舊字段 TO 新字段

//修改字段類型

ALTER TABLE 表名 ALTER COLUMN 字段 TYPE 類型(VARCHAR(40))

//刪除字段

ALTER TABLE 表名 DROP COLUMN 字段

//添加字段

ALTER TABLE 表名 ADD COLUMN 字段 類型

//刪除表

DROP TABLE 表名

//刪除前進行判斷

DROP TABLE IF EXISTS 表名

一般drop table if exists是數據庫里面的,后面接表名如:drop table if exists xxx_book意思就是:如果數據庫中存在xxx_book表,就把它從數據庫中drop掉。

2.4往表中插入數據

//插入數據

INSERT INTO 表名 VALUES(1,'阿道夫','2022-10-10',NULL)

//指定字段插入數據

INSERT INTO 表名 (id,name) VALUES (‘2’,’王老五’);

批量導入

//將表數據插入到新表中

INSERT INTO 新表名 SELECT * FROM 表名;

//指定字段批量插入

INSERT?INTO?student1 (id,name) SELECT?id, name FROM?student;

往新表中插入其他表的指定字段數據

INSERT INTO?employee (e_id, name) SELECT?id, name FROM?company?WHERE?name?IS NOT NULL;

//往employee(e_id) 和 (name) 字段 插入 company表的 id name字段的值 如果name不為空的話

2.5 修改表數據

//更新數據,將id等于2的用戶名改成'張三' ,如果不指定更新條件,會全局更新

UPDATE 表名?SET name?= ‘張三?WHERE id =?2

2.6刪除表數據

//刪除id等于2的表數據

DELETE FROM 表名 WHERE id = 2

//刪除id在1到3的表數據

DELETE?FROM?student WHERE?id BETWEEN?1?and?3;

//清空數據表
DELETE?from?student;

TRUNCATE?TABLE?student;

2.7表查詢

//查詢所有字段內容

SELECT * FROM 表名

//批量字段查詢

SELECT id, name FROM student;

// ?多表查詢

SELECT student.name, student1.name ?FROM student;

// ?給表取別名后查詢,簡化代碼

SELECT s.id, s.name ?FROM student s;

2.7.1單表指定條件查詢

//in關鍵字查詢 查詢id為1,3,5的成員

SELECT id,name FROM 表名 WHERE id IN (1,3,5)

//between and 關鍵字查詢,在什么之間

SELECT id,name,birthday FROM 表名 WHERE birthday BETWEEN '2020-10-10'?AND?'2024-10-10'

//模糊查詢,查詢所有姓張的用戶

SElECT id, name FROM 表名 WHERE name LIKE ‘張%’

2.7.2單表指定條件復雜查詢

//查詢所有字段內容

SELECT * FROM student;

//只顯示前3條數據

SELECT * FROM student LIMIT 3;

//查詢三條數據,從第二條開始

SELECT * FROM student LIMIT 3 OFFSET 2;

//查詢姓名非空內容

SELECT id,name FROM student where name is NOT null;

//?1 or 3 :1與3 ;ORDER BY id ASC 按id升序 ORDER BY id DESC 按id降序 默認升序

SELECT id,name FROM student where id=1 OR id=3 ORDER BY id ;

2.7.3 多表查詢

//創建一個班級表,id為主鍵???id int?PRIMARY?KEY,

//創建學生表,id為主鍵,classid為外鍵,關聯表class的id

CONSTRAINT?pk_student_id FOREIGN?KEY(classid) REFERENCES?class(id)

//隱式內連接,關聯classid顯示student成員所在班級

SELECT student.id, class.id,student.name, class.name FROM student, class WHERE ?student.classid = class.id;

//顯示內連接,INNER JOIN不返回空值LEFT JOIN 左連接,RIGHT JOIN 右連接,不能匹配的數據也返回

//INNER JOIN,所以結果中只返回匹配的數據,不會有空值出現。

SELECT student.id, class.id,student.name, class.name

FROM student INNER JOIN class ON student.classid = class.id ;

例子:

SELECT c.id, c.name,c.address,e.huji,e.work_time,e.phone

FROM employee AS e

INNER JOIN company AS c ON e.e_id = c.id;

子查詢

子查詢或稱為內部查詢、嵌套查詢,指的是在 PostgreSQL 查詢中的 WHERE 子句中嵌入查詢語句。

一個 SELECT 語句的查詢結果能夠作為另一個語句的輸入值

//EXISTS關鍵字子查詢

SELECT?* FROM?student WHERE?EXISTS

(SELECT?class.id FROM?class WHERE?class.name = '二班'?AND?student.classid = class.id);

//IN 關鍵字子查詢

SELECT?* FROM?student WHERE?student.classid IN

(SELECT?class.id FROM?class WHERE?class.name = '二班'?);

查詢結果合并操作

UNION???????????????? 可去重復 ????????執行速度慢

UNION ALL ????????不可去重復???????? 執行速度快

  1. 運算符

??3.1算術運算符 + ??- ??* ??%

3.2比較運算符 = ??返回t f

3.3 邏輯運算符 NOT(邏輯非) ?AND(邏輯與) ?OR(邏輯或)

//判斷2是否在1~3之間 T?

SELECT 2 BETWEEN 1 AND 3;

//判斷2是否在234集合中 T

SELECT 2 in (2,3,4);

//like運算符模糊匹配 %代表多個字符 ?_代表一個字符

SELECT 'abc' LIKE 'a%', --T

?'abc' LIKE '_a_', --F

?'abc' LIKE '_b_', --T

?'abc' NOT LIKE '_b_'; --F

SELECT LEAST(1,2,3), --返回最小值:1

?GREATEST(1,2,3); --返回最大值:3

  1. ?函數

4.1數值函數

SELECT 函數(字段名) from 表名;???!!!!!

4.2字符串函數

?SELECT 函數(字段名) from 表名;!!!!

4.3日期時間函數

CURRENT_DATA ??= 2023-08-03

CURRENT_TIME ??= 18:18:01.412198+08

NOW ???????????= 2023-08-03 18:18:01.412198+08

EXTRACT使用 (相當于轉換時間格式)

?

  1. ?自定義函數

CREATE FUNCTION //聲明創建函數

ADD(INTEGER,INTEGER) //定義函數名稱

RETURNS INTEGER //定義函數返回值

AS'SELECT $1 + $2;' //定義函數體

LANGUAGE SQL //用以實現函數的語言名字

RETURNS NULL ON NULL INPUT; ?? //定義參數為NULL時處理情況

例子:

?

  1. ?數據庫索引

?

使用索引的優缺點

優點

通過創建唯一的索引,可以保證數據庫表中每一行數據的唯一性。

可以大大提高查詢速度

加速表與表之間的連接

減少查詢中分組和排序的時間

缺點

創建和維護索引耗費時間,數據量越多耗費的時間越多

索引需要占用物理空間

對表的數據進行增加、刪除、修改的時候,索引也需要動態維護,降低了數據的維護速度。

//-- 創建索引 此處默認使用B-tree

CREATE?INDEX student_name_index ON?student(name);

//-- 刪除索引

DROP?INDEX student_name_index;

  1. ?數據庫視圖

使用視圖具有 簡單化、安全性、邏輯數據獨立性

--創建視圖top3,展示id,name,birthday 條件是id<=3 ?并且按id降序

CREATE VIEW top3 AS SELECT id,name,birthday FROM student where id <= 3 ORDER BY id desc;

--查看視圖

SELECT * FROM top3;

--刪除視圖

?

DROP VIEW top3;

  1. ?主鍵` 外鍵

主鍵 使用PRIMARY KEY語句設置為主鍵

外鍵 CONSTRAINT?pk_student_id FOREIGN?KEY(classid) REFERENCES?class(id) ?關聯其他表的主鍵

  1. ?約束

主鍵與約束的區別,主鍵的值是非空唯一,且一個表只能有一個主鍵,可以有多個約束

    1. // UNIQUE?唯一約束
    2. // NOT?NULL?非空約束
    3. // DEFAULT?默認值約束

例子:

CREATE TABLE student(

id INT UNIQUE, ?? ?// UNIQUE 唯一約束

name VARCHAR(30) NOT NULL, ?// NOT NULL 非空約束

birthday DATE,

score NUMERIC(5,2) DEFAULT 0.0 ?// DEFAULT 默認值約束

);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/37659.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/37659.shtml
英文地址,請注明出處:http://en.pswp.cn/news/37659.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

rust學習-tokio::time

示例 use std::time::Duration; use tokio::{task, time::interval};#[tokio::main] async fn main() {let mut interval interval(Duration::from_secs(1));let handle task::spawn(async move {loop {interval.tick().await;println!("tick");}});handle.await.…

【大數據】一些基本概念

一、數據庫、數據倉庫、數據湖 1.什么是數據庫 (Database, DB) 數據庫是指長期儲存在計算機中的有組織的, 可共享的數據集合 就是存儲數據的倉庫 數據庫有三個特點: 永久存儲, 有組織, 可共享 數據庫是一種結構化數據存儲技術&#xff0c;用于存儲和管理有組織的數據。數據庫…

微信小程序云開發快速入門(2/4)

前言 我們對《微信小程序云開發快速入門&#xff08;1/4&#xff09;》的知識進行回顧一下。在上章節我們知道了云開發的優勢以及能力&#xff0c;并且我們還完成了碼仔備忘錄的本地版到網絡版的改造&#xff0c;主要學習了云數據庫同時還通過在小程序使用云API直接操作了云數…

SciencePub學術| 智能計量類重點SCIE征稿中

SciencePub學術 刊源推薦: 智能計量類重點SCIE征稿中&#xff01;信息如下&#xff0c;錄滿為止&#xff1a; 一、期刊概況&#xff1a; 智能計量類重點SCIE 【期刊簡介】IF&#xff1a;2.0-2.5&#xff0c;JCR3區&#xff0c;中科院4區&#xff1b; 【版面類型】正刊&#…

new BigDecimal(double val)注意事項 / JWT解析BigDecimal類型數據

前言&#xff1a; 公司項目中有一個板塊需要解析JWT令牌獲取載荷里面封裝的數據&#xff0c;遇到要解析一個BigDecimal類型的數據 問題發現過程&#xff1a; 正常來說&#xff0c;我們解析一個JWT令牌的步驟如下&#xff1a; public static Claims getDataFromToken(String tok…

極狐GitLab 企業級 CI/CD 規模化落地實踐指南(一)

目錄 template 引用&#xff0c;減少代碼冗余&#xff0c;增強 CI/CD 構建擴展性 問題 1&#xff1a;代碼冗余&#xff0c;低效實踐 問題 2&#xff1a;維護性難&#xff0c;工作量大 ? local ? file ? remote ? template 收益 1&#xff1a;一處修改&#xff0c;多…

TIOBE2023年8月榜單發布,Python超越老將C/C++蟬聯冠軍

TIOBE 編程社區指數是一個衡量編程語言受歡迎程度的指標&#xff0c;評判的依據來自世界范圍內的工程師、課程、供應商及搜索引擎&#xff0c;TIOBE 官網近日公布了 2023 年 8 月的編程語言排行榜。 此次的榜單中&#xff0c;Python依舊穩居第一&#xff0c;占比達到了13.33%。…

jpg圖片太大怎么壓縮?這樣做輕松壓縮圖片

圖片太大會給存儲、分享帶來麻煩&#xff0c;但其實現在壓縮圖片大小也不是什么難事&#xff0c;下面就給大家分享幾個一直用的圖片壓縮方法&#xff0c;包含批量壓縮、在線壓縮、免費壓縮等多種方式&#xff0c;大家按需自取哈~ 方法一&#xff1a;嗨格式壓縮大師 這是一個可…

Kotlin Executors線程池newSingleThreadExecutor單線程

Kotlin Executors線程池newSingleThreadExecutor單線程 import java.util.concurrent.Executorsfun main() {val mExecutorService Executors.newSingleThreadExecutor()for (i in 1..5) {mExecutorService.execute {println("seq-$i tid:${Thread.currentThread().threa…

typeScript 之 基礎

工具: PlayGround 源碼&#xff1a; GitHub TypeScript 變量聲明 typeScript中變量聲明注意&#xff1a; 開頭不能以數字開頭變量名稱可以包含數字和字母除了下劃線_和美元$符號外&#xff0c;不能包含其他任意特殊字符 聲明的結構&#xff1a; let 變量名&#xff1a; 類型…

面試經典150題——羅馬數字轉整數

羅馬數字包含以下七種字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 數值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如&#x…

docker 學習-- 01 基礎知識

docker 學習-- 01 基礎知識 文章目錄 docker 學習-- 01 基礎知識1.前言1.1 docker 是什么1.2 docker優點1.2.1 統一開發和生產環境:1.2.2 高性能:1.2.3 更輕松的維護和拓展&#xff1a;1.2.4 更輕松的遷移&#xff1a; 1.3 docker缺點1.3.1 運行環境受限1.3.2 文件管理和網絡端…

item_sku-獲取sku詳細信息

一、接口參數說明&#xff1a; item_sku-獲取sku詳細信息&#xff0c;點擊更多API調試&#xff0c;請移步注冊API賬號點擊獲取測試key和secret 公共參數 請求地址: https://api-gw.onebound.cn/taobao/item_sku 名稱類型必須描述keyString是調用key&#xff08;點擊獲取測試…

安全中間件的設計思路和簡單實踐

rasp 的侵入式特性和攔截特性導致開發和運維普通不太愿意配合&#xff0c;當生產環境出現問題時往往第一時間先把責任推給 rasp&#xff0c;逐漸的安全部門普遍只能把 rasp 設置為告警模式&#xff0c;而且越是大的集群攔截開的就越少&#xff0c;所以字節的 elkeid 和某外賣大…

P13-CNN學習1.3-ResNet(神之一手~)

論文地址:CVPR 2016 Open Access Repository https://arxiv.org/pdf/1512.03385.pdf Abstract 翻譯 深層的神經網絡越來越難以訓練。我們提供了一個殘差學習框架用來訓練那些非常深的神經網絡。我們重新定義了網絡的學習方式&#xff0c;讓網絡可以直接學習輸入信息與輸出信息…

Python-OpenCV中的圖像處理-圖像直方圖

Python-OpenCV中的圖像處理-圖像直方圖 圖像直方圖統計直方圖繪制直方圖Matplotlib繪制灰度直方圖Matplotlib繪制RGB直方圖 使用掩膜統計直方圖直方圖均衡化Numpy圖像直方圖均衡化OpenCV中的直方圖均衡化CLAHE 有限對比適應性直方圖均衡化 2D直方圖OpenCV中的2D直方圖Numpy中2D…

代碼隨想錄算法訓練營20期|第七天|哈希表part02|454.四數相加II ● 383. 贖金信 ● 15. 三數之和 ● 18. 四數之和 ● 總結

454.四數相加II 比較巧思的解法&#xff0c;先把nums1 和nums2的數兩兩相加&#xff0c;并存儲sum和次數 再在nums3和nums4里找對應和sum和為0的數值i,j Time: N^2 Space:N^2, 最壞情況下A和B的值各不相同&#xff0c;相加產生的數字個數為 n^2 class Solution {public int fo…

Spring AOP實踐:如何通過aop記錄日志?

目錄 一、依賴 二、自定義注解 三、切面 一、依賴 以SpringBoot工程為例&#xff0c;導入aop的依賴。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency> 二…

為什么要自動化Web測試?

Web自動化是更快地實現所需結果的較佳方式。自動化測試在市場上引起了巨大的轟動。此軟件測試過程可以讓您使用正確的自動化測試工具和技術集自動執行測試過程。我們執行它是為了檢查軟件應用程序是否具有完全按照我們希望它執行的方式執行的勇氣。 比以往更快地獲得反饋 自動化…

基于Promise.resolve實現Koa請求隊列中間件

本文作者為360奇舞團前端工程師 前言 最近在做一個 AIGC 項目&#xff0c;后端基于 Koa2 實現。其中有一個需求就是調用兄弟業務線服務端 AIGC 能力生成圖片。但由于目前兄弟業務線的 AIGC 項目也是處于測試階段&#xff0c;能夠提供的服務器資源有限&#xff0c;當并發請求資源…