postgreSQL最全語法整理(可作為工具查詢使用)


一、查詢基礎

1、連接數據庫

C:\PostgreSQL\9.5\bin\psql.exe -U postgres -d shop

2、檢查數據庫連接是否成功   

SELECT 1;

3、創建數據庫   

CREATE DATABASE shop;

4、退出數據庫口令   

\q

5、\d 數據庫 ——得到所有表的名字

6、\d 表名 —— 得到表結構

7、創建表

CREATE TABLE <表名>

<列名1> <數據類型> <該列所需約束>,

<列名2> <數據類型> <該列所需約束>,

<列名3> <數據類型> <該列所需約束>,

<列名4> <數據類型> <該列所需約束>,

...

<該表的約束1>, <該表的約束2>,……);

8、刪除表      

DROP TABLE <表名>;

9、修改表-添加列

ALTER TABLE <表名> ADD COLUMN <列的定義>;

    注:Oracle和SQL Server中不用寫COLUMN: ALTER TABLE <表名> ADD <列名> ;

    oracle還可以這樣:ALTER TABLE <表名> ADD (<列名>,<列名>,<列名>... );

10、修改表-刪除列

ALTER TABLE <表名> DROP COLUMN <列名>;

11、插入數據   

BEGIN TRANSACTION;

INSERT INTO Product VALUES ('0001', 'T恤衫', '衣服', 1000, 500, '2009-09-20');

COMMIT;

注:在MySQL中運行時,BEGIN TRANSACTION改寫成 START TRANSACTION;在Oracle和DB2中運行時,無需使用BEGIN TRANSACTION;

12、變更表名

ALTER TABLE Product RENAME TO Product;

 

13、查詢語句

(1) 查詢全部列

  Select  *  from  <表名>;

星號(*)代表全部列的意思。

(2) 查詢指定列

SELECT <列名>,<列名>,…… FROM <表名>;

注:查詢多列時,需要使用逗號進行分隔。查詢結果中列的順序和

SELECT 子句中的順序相同

14、AS為列設置別名

例:SELECT  product_id as id,

product_name as name,

purchase_price as price

FROM  product;

別名可用中文,但要用“”。

15、SELECT子句可以用常數

例:SELECT '商品' as string,'2019-12-12' as date,product_id,product_name from product;

注:此處用單引號‘’。

16、查詢結果去重:distinct

例:select distinct product_type from product;

注:用distinct時null類型數據也會被作為一類數據;distinct也可以同時合並多列

17、WHERE子句添加查詢篩選條件

例:select product_name,product_type from product where product_type='衣服';

18、注釋的書寫方式

1行注釋:寫在--后面

多行注釋:寫在/*  和  */之間

19、使用(+、-、*、/)運算符

例:select product_name,sale_price,sale_price * 2 as “sale_price_x2” from product;

20、使用比較運算符

(1) 含義

 

(2) 字符串類型的數據原則上按字典的順序排序,不能與數字的大小順序混淆,如’1-3‘<’2’

(3) null數據不能用比較運算符

用特定語句:is null /is not null

21、邏輯運算符

(1) NOT運算符:用來否定某一條件

例:select product_name ,sale_price from product where not sale_price >= 1000;

(2) AND運算符

其兩側條件需同步成立,相當於”並且“

例:select product_name,purchase_price from product where product_type = '廚 房用具' and sale_price >=3000;

(3) OR運算符

其兩側條件只需一個成立,相當於”或者“

例:select product_name,purchase_price from product where product_type = '廚房用具' or sale_price >=3000;

(4) 運用括號控制運算優先級

例:select product_name,product_type,regist_date from product where product_type = '辦公用品' and (regist_date = '2009-09-11' or regist_date = '2009-09-20');

注:AND運算符優先於OR運算符,想要先執行OR語句可以用括號

二、聚合函數:多行匯集成一行

1、COUNT:計算表中的記錄數(行數)

 例:select count(*) from product;

計算某列非空行:SELECT COUNT(purchase_price)  FROM Product;

2、SUM: 計算表中數值列中數據的合計值

例:select sum(sale_price) from product

3、AVG: 計算表中數值列中數據的平均值

例:select avg(sale_price) from product;

4、MAX: 求出表中任意列中數據的最大值

MIN 求出表中任意列中數據的最小值

例:SELECT MAX(sale_price), MIN(purchase_price)  FROM Product;

 

5、使用聚合函數刪除重復值

6、Group by子句

(1) 只能存在 常數、聚合函數group by子句中指定的列名

(2) group by子句中不能用別名

(3) Where 子句中不能用聚合函數

例:select product_type,count(*) from product group by product_type;

7、Haveing 子句 :取符合條件的組

8、Order by:排序

三、數據更新

1、Insert

2、Delete from 【表名】

3、Update

(1) 多列更新

① -- 使用逗號對列進行分隔排列

UPDATE Product

SET sale_price = sale_price * 10,

purchase_price = purchase_price / 2

WHERE product_type = '廚房用具';

② -- 將列用()括起來的清單形式

UPDATE Product

SET (sale_price, purchase_price) = (sale_price * 10, 

purchase_price / 2)

WHERE product_type = '廚房用具';

 

4、事務是需要在同一個處理單元中執行的一系列更新處理的集合。

(1) 語法:

① 事務開始語句

② DML語句1,DML語句2,......

③ 事務結束語句(commit或rollback)

(2) 開啟事務語句:

① SQLserver、postgreSQL)Begin transaction

② (MySQL) start transaction

(3) 提交事務--commit

(4) 取消處理--rollback

5、ACID特性:所有的DBMS都遵循四種特性

(1) 原子性atomicity

(2) 一致性consistency

(3) 隔離性isolation

(4) 持久性durability

四、復雜查詢

1.創建視圖 view:保存好的select語句

(1)語法:

CREATE VIEW 視圖名稱(<視圖列名1>, <視圖列名2>, ……)

AS

<SELECT語句>

(2)法則:盡量避免在視圖的基礎上創建視圖,會降低sql效率

(3)法則:定義視圖時不能使用order by 語句

(4)法則:部分情況可以對視圖進行更新,如既沒有聚合也沒有結合的select語句

視圖設定為只讀,因此需要on insert do instead規則

例:CREATE OR REPLACE RULE insert_rule

AS ON INSERT

TO ProductJim DO INSTEAD

INSERT INTO Product VALUES (

new.product_id,

new.product_name,

new.product_type,

new.sale_price,

new.purchase_price,

new.regist_date);

2.刪除視圖:drop view 【表名】

3.刪除關聯視圖:DROP VIEW ProductSum CASCADE;

4.關聯子查詢:在子查詢中添加條件

 

五、函數

1.ABS絕對值:ABS(數值)

2.Mod求余:mod(被除數,除數)

3.Round四舍五入:round(對象數值,保留小數位數)

4.|| 拼接:字符串1||字符串2

5.Length字符串長度:length(字符串)

6.lower小寫轉換:lower(字符串)

7.upper大寫轉換:upper(字符串)

8.replace字符串的替換:replace(對象字符串,替換前字符串,替換后字符串)

9.Substring(對象字符串 from 截取的起始位置 for 截取的字符數)

10.Current_date當前日期

11.Current_time當前時間

12.Current_timestamp當前日期和時間

13.Extract(日期元素 from 日期)

14.cast類型轉換:cast(轉換前的值 as 想要轉換的數據類型

15.Coalesce講null值轉換為其他值:coalesce(數值1,數值2,數值3......)

16.like字符串部分一致查詢(%代表“0字符以上任意字符串”)

17.Like+指定字符串查詢:

select * from samplelike where strcol like ‘abc__’;

查詢”abc+任意三個字符”的字符串

18.Between范圍查詢

19.Is null ,is not null判斷是否為null

20.in謂語--or 的簡便用法

21.Exists

22.case表達式

語法:case when <求值表達式> then <表達式>

When <求值表達式> then <表達式>

When <求值表達式> then <表達式>

...

Else <>

          End

六、集合運算

1.Union表的加法

2.Union all包含重復行

3.Except記錄的減法(Oracle中使用minus

4.Inner join內聯結

5.Outer join外聯結

6.Cross join 交叉聯結

七、SQL高級處理

1.窗口函數

(1)語法:<窗口函數> OVER ([PARTITION BY <列清單>]  

ORDER BY <排序用列清單>)

PARTITION BY:能夠設定排序的對象范圍

ORDER BY:能夠指定按照哪一列、何種順序排序

(2)Rank函數:排序時,如存在相同位次的記錄會跳過之后的位次(1,1,1,4)

(3)Dense_rank函數:排序時,如果存在相同位次,不會跳過(1,1,2,3)

(4)Row_number函數:賦予唯一連續位次

2.聚合函數作為窗口函數

(1)Sum函數:此處與純聚合函數不一樣,此處為累計

 

(2)Avg函數:計算移動平均

 

①Rows 2 preseding:(移動平均:截止到之前2行)

②Rows 2 following :(移動平均:截止到之后2行)

3.Grouping運算符

(1)Rollup同時得出合算和小計

(2)Grouping讓null更加容易分辨

(3)Cube用數據搭積木

(4)Grouping sets取得期望的積木

(5)   可以從rollup或者cube的結果中取出部分記錄

八、應用程序連接數據庫

驅動:可以從網上下載(PostgreSQL JDBC Driver :https://jdbc.postgresql.org/download.html)

(1)ODBC:open database connectivity

(2)JDBC:java database connectivity

(3)C:\PostgreSQL\java\jdk\bin\java -cp D:\soft\PostgreSQL\jdbc\*;. DBConnect1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM