PostgreSQL學習筆記(二)—— 概覽

来源:https://www.cnblogs.com/GaiHeiluKamei/archive/2019/07/27/11255357.html
-Advertisement-
Play Games

資料庫 創建資料庫: 指定用戶名創建資料庫: 刪除資料庫: 訪問資料庫: 互動式環境下資料庫內執行 會進入到一個新頁面,要返回按 退出資料庫: 、`exit quit` 表 創建表: 查看表結構: 創建表時 表示註釋, 到行尾的東西都會被忽略 刪除表: 表中增加行: 命令可以一次性向表中裝填大量數據 ...


資料庫

  • 創建資料庫: createdb dbname

  • 指定用戶名創建資料庫: createdb -U username dbname

  • 刪除資料庫: dropdb dbname

  • 訪問資料庫: psql [-U username] dbname

  • 互動式環境下資料庫內執行select version();會進入到一個新頁面,要返回按q

  • 退出資料庫: \qexitquit

  • 創建表: CREATE TABLE weather (city varchar(80), temp_low int, temp_high int, date date);

  • 查看表結構: \d tablename;

  • 創建表時--表示註釋,--到行尾的東西都會被忽略

  • 刪除表: drop table tablename;

  • 表中增加行: insert into weather values('San Francisco', 46, 50, 0.25, '1994-11-27');

  • COPY命令可以一次性向表中裝填大量數據: COPY weather FROM '/home/user/weather.txt';

  • 查詢表: select city, (temp_lo+temp_hi)/2, date from weather;

  • 查詢結果消除重覆行: SELECT DISTINCT city FROM weather;

  • 指定表的列查詢: select weather.city, cities.location from weather, cities where cities.name = weather.city;

  • 設置別名: select * from weather w, cities c where w.city = c.name;

  • 聚集函數:
    • 最大值: select max(temp_lo) from weather;

    • 子查詢: select city from weather where temp_lo = (select max(temp_lo) from weather);

    • 組合: select city, max(temp_lo) from weather group by city;

    • Having: select city, max(temp_lo) from weather group by city having max(temp_lo) < 40;

    • like: select city, max(temp_lo) from weather where city like 's%' group by city having max(temp_lo) < 40;

    • where 和 having: WHERE在分組和聚集計算之前選取輸入行(因此,它控制哪些行進入聚集計算), 而HAVING在分組和聚集之後選取分組行。因此,WHERE子句不能包含聚集函數;因為試圖用聚集函數判斷哪些行應輸入給聚集運算是沒有意義的。相反,HAVING子句總是包含聚集函數(嚴格說來,你可以寫不使用聚集的HAVING子句, 但這樣做很少有用。同樣的條件用在WHERE階段會更有效)

  • 更新行: update weather set temp_hi = temp_hi - 2 where date > '1994-11-28';

  • 刪除行: delete from weather where city = 'Hayward';

    • 註: delete from tablename;會直接刪除表中所有行而刪除之前系統不會請求確認
  • 增加主鍵: alter table weather add primary key (city);

  • 增加外鍵: alter table weather add constraint foreignkeyName foreign key (city) references cities(name);

高級特性

  • 視圖:

    • create view myview as select city, temo_lo, date, location from weather, cities where city = name;

    • select * from myview;

  • 事務

    • 開啟一個事務需要將SQL命令用BEGINCOMMIT命令包圍起來,如下:

    • 在事務中如果並不想提交,可以發出ROLLBACK命令而不是COMMIT,這樣所有目前的更新將被取消

BEGIN;
UPDATE accounts SET balance = balance - 100.00
    WHERE name = 'Alice';
-- etc etc
COMMIT;
  • 保存點
    • 在使用SAVEPOINT定義一個保存點後,我們可以在必要時利用ROLLBACK TO回滾到該保存點。該事務中位於保存點和回滾點之間的資料庫修改都會被放棄,但是早於該保存點的修改則會被保存

    • 在回滾到保存點之後,它的定義依然存在,因此我們可以多次回滾到它。如果確定不再需要回滾到特定的保存點,它可以被釋放以便系統釋放一些資源。記住不管是釋放保存點還是回滾到保存點都會釋放定義在該保存點之後的所有其他保存點

BEGIN;
UPDATE accounts SET balance = balance - 100.00
    WHERE name = 'Alice';
SAVEPOINT my_savepoint;
UPDATE accounts SET balance = balance + 100.00
    WHERE name = 'Bob';
-- oops ... forget that and use Wally's account
ROLLBACK TO my_savepoint;
UPDATE accounts SET balance = balance + 100.00
    WHERE name = 'Wally';
COMMIT;
  • 視窗函數

    • 一個視窗函數調用總是包含一個直接跟在視窗函數名及其參數之後的OVER子句。這使得它從句法上和一個普通函數或非視窗函數區分開來。OVER子句決定究竟查詢中的哪些行被分離出來由視窗函數處理。
    • OVER子句中的PARTITION BY子句指定了將具有相同PARTITION BY表達式值的行分到組或者分區
    • eg: SELECT depname, empno, salary, rank() OVER (PARTITION BY depname ORDER BY salary DESC) FROM empsalary;
    • 視窗函數只允許出現在查詢的SELECT列表和ORDER BY子句中。它們不允許出現在其他地方,例如GROUP BYHAVINGWHERE子句中。這是因為視窗函數的執行邏輯是在處理完這些子句之後
-- 展示如何將每一個員工的薪水與他/她所在部門的平均薪水進行比較
SELECT depname, empno, salary, avg(salary) OVER (PARTITION BY depname) FROM empsalary;

/*  depname  | empno | salary |          avg
-----------+-------+--------+-----------------------
 develop   |    11 |   5200 | 5020.0000000000000000
 develop   |     7 |   4200 | 5020.0000000000000000
 develop   |     9 |   4500 | 5020.0000000000000000
 develop   |     8 |   6000 | 5020.0000000000000000
 develop   |    10 |   5200 | 5020.0000000000000000
 personnel |     5 |   3500 | 3700.0000000000000000
 personnel |     2 |   3900 | 3700.0000000000000000
 sales     |     3 |   4800 | 4866.6666666666666667
 sales     |     1 |   5000 | 4866.6666666666666667
 sales     |     4 |   4800 | 4866.6666666666666667
 */
 --最開始的三個輸出列直接來自於表empsalary,並且表中每一行都有一個輸出行。第四列表示對與當前行具有相同depname值的所有表行取得平均值(這實際和非視窗avg聚集函數是相同的函數,但是OVER子句使得它被當做一個視窗函數處理併在一個合適的視窗幀上計算。)
  • 繼承
--創建兩個表:cities、capitals。自然地,首都也是城市,所以我們需要有某種方式能夠在列舉所有城市的時候也隱式地包含首都。
CREATE TABLE cities (
    name        text,
    population  real,
    altitude    int     -- (in ft)
);

CREATE TABLE capitals (
    state       char(2)
) INHERITS (cities);
--在這種情況下,一個capitals的行從它的父親cities繼承了所有列(name、population和altitude)
-- 查找所有海拔高於500尺且不是州首府的城市
SELECT name, altitude 
    FROM ONLY cities
    WHERE altitude > 500;
-- ONLY用於指示查詢只在cities表上進行而不會涉及到繼承層次中位於cities之下的其他表。很多我們已經討論過的命令 — SELECT、UPDATE 和DELETE — 都支持這個ONLY記號
-- 儘管繼承很有用,但是它還未與唯一約束或外鍵集成,這也限制了它的可用性

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Linux內核網站: "https://www.kernel.org/" Redhat官網: "https://www.redhat.com/en" SUSE官網: "https://www.suse.com/" Centos官網: "https://centos.org/" Debian官網: " ...
  • hostname #電腦名 passwd #修改密碼 reboot #重啟 shutdown –r now #立刻重啟(root用戶使用) shutdown –r 10 #過10分鐘自動重啟(root用戶使用) shutdown –r 18:00 #在時間為18:00的時候重啟(root用戶使用) ...
  • man 有兩個選項: 當我們使用的時候,如果沒有建立whatis 資料庫 就會出現 nothing appropriate 的信息; 我們可以使用 makewhatis 來更新; 當然也可以使用 mandb 命令: 之後你就可以進行使用關鍵字進行搜索了; 簡單記錄,防止遺忘;如果對您有幫助,請點擊推 ...
  • 硬體配置: CPU:i5 9400f 主板:微型msi迫擊炮B360 記憶體:威剛 ddr4 8g 2133 *2 顯卡:技嘉1050ti 4g 顯示器:koiso 4K (使用的dp介面連接,hdmi介面直接黑屏) 硬碟:海康視威c2000 256g + 三星256G固態(裝win10) 藍牙接收器 ...
  • 使用CentOS7搭建OwnCloud私有雲(LAMP環境),不關閉SELinux。 ...
  • 1. linux 目錄解釋系統啟動必須: /boot:存放的啟動 Linux 時使用的內核文件,包括連接文件以及鏡像文件。 /etc:存放所有的系統需要的配置文件和子目錄列表,更改目錄下的文件可能會導致系統不能啟動。 /lib:存放基本的動態連接共用庫(比如c++庫),其作用類似於Windows里的 ...
  • 大概在一周前看了燕十八老師講解的mysql資料庫視頻,也跟著學了一周,我就想把我這一周所學的知識跟大家分享一下;因為是第一次寫博客,所以可能會寫的很爛,請大家多多包涵。文章中有不對的地方還請大家指出來,我會加以改正。 我們先來學習對資料庫進行連接並且對錶進行最基本的增刪改查: 先來進行對資料庫伺服器 ...
  • [學習筆記] parallelize並行化集合是根據一個已經存在的Scala集合創建的RDD對象。集合的裡面的元素將會被拷貝進入新創建出的一個可被並行操作的分散式數據集。例如:val rdd03 = sc.parallelize(List(1, 4, 3, 7, 5)) 根據系統環境來進行切分多個s ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...