OpenGauss 醫(yī)院業(yè)務(wù)表數(shù)據(jù)操作-插入和簡單查詢

本次教程基于醫(yī)院門診掛號場景,將 reg_time 字段調(diào)整為僅“年月日”格式(DATE 類型),并保留完整語法定義和解釋。

一、前置準備:新建醫(yī)院門診掛號表

1. 操作環(huán)境說明

  • 執(zhí)行用戶:普通用戶 user_hospital

  • 數(shù)據(jù)庫db_cloud_hospital

  • gsql 提示符db_cloud_hospital=>

2. 連接并切換到目標環(huán)境

# 操作系統(tǒng)終端執(zhí)行
su - omm
gsql -d db_cloud_hospital -U user_hospital -p 26000
# 成功后提示符:db_cloud_hospital=>

3. 新建門診掛號表(reg_time 僅年月日)

表名:t_outpatient_reg(門診掛號表),reg_time 改為 DATE 類型(僅存儲年月日):

-- db_cloud_hospital=> 下執(zhí)行(先刪除舊表,避免沖突)
DROP TABLE IF EXISTS t_outpatient_reg;

CREATE TABLE t_outpatient_reg (
    reg_id INT PRIMARY KEY,           -- 掛號ID(主鍵,唯一標識)
    patient_name VARCHAR(50) NOT NULL, -- 患者姓名(非空)
    department VARCHAR(50) NOT NULL,   -- 就診科室(非空)
    doctor_name VARCHAR(50),           -- 接診醫(yī)生
    reg_fee NUMERIC(5,2) NOT NULL,     -- 掛號費(非空)
    reg_time DATE DEFAULT CURRENT_DATE  -- 掛號日期(僅年月日,默認當天)
);
-- 成功提示:DROP TABLE、CREATE TABLE

二、添加數(shù)據(jù)(INSERT)

完整語法定義

INSERT INTO 表名 [ ( column_name [, ...] ) ]
    { VALUES {( { expression | DEFAULT } [, ...] ) }[, ...] 
    | query };

語法解釋

  • column_name:目標表中的字段名。目標字段可以按順序排列。如果沒有列出任何字段,則默認全部字段,且順序為表聲明時的順序。

  • VALUES 子句:該子句和 query 提供的值在表中從左到右關(guān)聯(lián)到對應(yīng)列。其中 expression 是給對應(yīng)屬性列的一個有效表達式或值,DEFAULT 表示對應(yīng)屬性列的缺省值。

  • query 子句:一個查詢語句(SELECT 語句),將查詢結(jié)果作為錄入的數(shù)據(jù)。

  • 注意

    • 使用 INSERT 語句添加數(shù)據(jù)時,字段名是可以省略的。

    • 如果不指定字段名,值的順序必須和數(shù)據(jù)表定義的字段順序相同。

    • 如果指定字段名,值的順序要和指定的字段名順序保持一致。


1. 添加單條數(shù)據(jù)的3種方式

方式1:指定所有字段名

-- db_cloud_hospital=> 下執(zhí)行(reg_time 格式:'YYYY-MM-DD')
INSERT INTO t_outpatient_reg (reg_id, patient_name, department, doctor_name, reg_fee, reg_time)
VALUES (1001, '張三', '內(nèi)科', '王醫(yī)生', 25.00, '2026-03-24');
-- 成功提示:INSERT 0 1

方式2:省略所有字段名

?? 注意:值的順序必須和建表時的字段順序完全一致

-- db_cloud_hospital=> 下執(zhí)行
INSERT INTO t_outpatient_reg
VALUES (1002, '李四', '外科', '李醫(yī)生', 30.00, '2026-03-24');
-- 成功提示:INSERT 0 1

方式3:指定部分字段名(利用默認值)

未指定的 reg_time 會自動填充當天日期

-- db_cloud_hospital=> 下執(zhí)行
INSERT INTO t_outpatient_reg (reg_id, patient_name, department, reg_fee)
VALUES (1003, '王五', '兒科', 20.00);
-- 成功提示:INSERT 0 1

2. 添加多條數(shù)據(jù)

完整語法定義

INSERT [INTO] 數(shù)據(jù)表名稱 [(字段名[, ...])] VALUES
(第1條記錄的值1, 第1條記錄的值2, ...), 
(第2條記錄的值1, 第2條記錄的值2, ...),
...
(第n條記錄的值1, 第n條記錄的值2, ...);

醫(yī)院場景示例

-- db_cloud_hospital=> 下執(zhí)行
INSERT INTO t_outpatient_reg
VALUES 
(1004, '趙六', '內(nèi)科', '王醫(yī)生', 25.00, '2026-03-25'),
(1005, '錢七', '外科', '張醫(yī)生', 30.00, '2026-03-25'),
(1006, '孫八', '兒科', '劉醫(yī)生', 20.00, '2026-03-25');
-- 成功提示:INSERT 0 3

三、排序查詢(ORDER BY)

完整語法定義

SELECT * | {字段名[, ...]} FROM 數(shù)據(jù)表名稱
ORDER BY 字段名1 [ASC | DESC][, 字段名2 [ASC | DESC]]...;

語法解釋

  • 如果不指定排序方式,默認按照 ASC(升序)排序。

醫(yī)院場景示例

1. 單字段升序(ASC,默認)

按掛號費從低到高排序

-- db_cloud_hospital=> 下執(zhí)行
SELECT * FROM t_outpatient_reg ORDER BY reg_fee ASC;
-- 等價于:SELECT * FROM t_outpatient_reg ORDER BY reg_fee;

2. 單字段降序(DESC)

按掛號日期從晚到早排序

-- db_cloud_hospital=> 下執(zhí)行
SELECT * FROM t_outpatient_reg ORDER BY reg_time DESC;

3. 多字段組合排序

先按科室升序,科室相同時按掛號費降序

-- db_cloud_hospital=> 下執(zhí)行
SELECT * FROM t_outpatient_reg ORDER BY department ASC, reg_fee DESC;

四、限量查詢(LIMIT)

完整語法定義

SELECT [查詢選項] * | {字段名[, ...]} FROM 數(shù)據(jù)表名稱 [WHERE 條件表達式]
LIMIT [OFFSET, ] 記錄數(shù);

語法解釋

  • OFFSET 為可選項,如果不指定 OFFSET 的值,默認值為 0,表示從第 1 條數(shù)據(jù)開始獲??;OFFSET 值為 1 則從第 2 條數(shù)據(jù)開始獲取,以此類推。

  • “記錄數(shù)”表示查詢結(jié)果中的最大條數(shù)限制。


醫(yī)院場景示例

1. 基礎(chǔ) LIMIT(取前 N 條)

取掛號日期最早的前3條記錄

-- db_cloud_hospital=> 下執(zhí)行
SELECT * FROM t_outpatient_reg ORDER BY reg_time ASC LIMIT 3;

2. LIMIT + OFFSET(跳過 M 條取 N 條)

跳過前2條,取第3-5條(共3條)

-- db_cloud_hospital=> 下執(zhí)行
SELECT * FROM t_outpatient_reg ORDER BY reg_id LIMIT 2, 3;
-- 等價于:SELECT * FROM t_outpatient_reg ORDER BY reg_id LIMIT 3 OFFSET 2;

五、修改/刪除操作的排序和限量

完整語法定義

# 對修改操作進行排序和限量
UPDATE 數(shù)據(jù)表名稱 SET 字段名1=新值1[, 字段名2=新值2, ...] [WHERE 條件表達式]
ORDER BY 字段名1 [ASC | DESC][, 字段名2 [ASC | DESC]] LIMIT 記錄數(shù);

# 對刪除操作進行排序和限量
DELETE FROM 數(shù)據(jù)表名稱 [WHERE 條件表達式]
ORDER BY 字段名1 [ASC | DESC][, 字段名2 [ASC | DESC]] LIMIT 記錄數(shù);

醫(yī)院場景示例

1. 修改操作的排序和限量

給掛號費最低的2條記錄,每人上調(diào)5元掛號費

-- db_cloud_hospital=> 下執(zhí)行
UPDATE t_outpatient_reg 
SET reg_fee = reg_fee + 5 
ORDER BY reg_fee ASC 
LIMIT 2;
-- 成功提示:UPDATE 2

-- 驗證更新結(jié)果
SELECT * FROM t_outpatient_reg ORDER BY reg_fee ASC;

2. 刪除操作的排序和限量

刪除掛號日期最早的1條記錄

-- db_cloud_hospital=> 下執(zhí)行
DELETE FROM t_outpatient_reg 
ORDER BY reg_time ASC 
LIMIT 1;
-- 成功提示:DELETE 1

-- 驗證刪除結(jié)果
SELECT * FROM t_outpatient_reg ORDER BY reg_time ASC;

六、操作總結(jié)(醫(yī)院場景速查)

操作類型 醫(yī)院業(yè)務(wù)場景示例 核心語法關(guān)鍵詞
添加單條掛號 掛1個內(nèi)科的號 INSERT INTO ... VALUES
批量添加掛號 一次性掛3個不同科室的號 INSERT INTO ... VALUES (...), (...)
排序查詢 按掛號費從低到高查看所有號源 ORDER BY ... ASC/DESC
分頁查詢 查看第2頁的掛號記錄(每頁3條) LIMIT ... OFFSET ...
排序限量修改 給最便宜的2個號源調(diào)價 UPDATE ... ORDER BY ... LIMIT
排序限量刪除 刪除最早的1個過期掛號記錄 DELETE ... ORDER BY ... LIMIT

查用操作總結(jié)(醫(yī)院場景速查)

查詢類型 核心操作(快捷命令) 詳細查詢(系統(tǒng)表) 醫(yī)院場景示例
查詢表空間 \db [表空間名] SELECT * FROM pg_tablespace 查看 ts_cloud_hospital 路徑
查詢數(shù)據(jù)庫 \l [數(shù)據(jù)庫名] SELECT * FROM pg_database 查看 db_cloud_hospital 字符集
查看所有表 \dt [表前綴] SELECT * FROM pg_tables 查看 public 模式下所有醫(yī)院業(yè)務(wù)表
查看表結(jié)構(gòu) \d 表名 SELECT * FROM pg_attribute 查看 t_outpatient_reg 字段 / 約束
查看表詳細結(jié)構(gòu) \d+ 表名 SELECT * FROM pg_tables, pg_indexes 查看 t_outpatient_reg 索引 / 權(quán)限

注意事項

  1. 快捷命令(\db、\l、\dt、\d、\d+)無需加分號,直接在 gsql 提示符下執(zhí)行;
  2. 系統(tǒng)表查詢(如 pg_tablespacepg_database)需加分號,執(zhí)行后會返回具體字段信息;
  3. 普通用戶(user_hospital)可查看所有表、表空間、數(shù)據(jù)庫的基礎(chǔ)信息,但無法查看系統(tǒng)級敏感權(quán)限;
  4. 若查詢不到目標表 / 表空間 / 數(shù)據(jù)庫,需確認:① 已連接到正確的數(shù)據(jù)庫;② 擁有對應(yīng)查詢權(quán)限;③ 目標對象已創(chuàng)建。

(注:)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容