一、查詢基礎
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