文章目錄
一、數據定義
1、定義模式
模式相當於一個數據空間,目錄,沒有具體內容
把一個模式授權給一個用戶
create schema <模式名> authorization <用戶名>
如果模式名爲空則模式名隱含爲用戶名
刪除模式
drop schema <模式名> <cascade(刪除所有數據庫對象)/restrict(只有在該模式下沒有對象時執行刪除)>
2、基本表的定義
create table <表名>
(<列名><數據類型>[<列級完整性約束條件>]
[,<列名><數據類型>[<列級完整性約束條件>]]
[,<表級完整性約束條件>]
);
列級完整性約束:primary key , unique
表級完整性約束:foreign key (列) references 表(列),primary key(列1,列2),unique(列)
模式與表,每個表屬於一個模式
方法一:create table <模式名>.<表名>(…);
方法二:創建模式時同時創建表
方法三:set search_path to <模式名>,<表名>;
3、修改基本表
alter table <表名> 操作;
操作 | 語句 |
---|---|
新加列 | add <新列名><數據類型>[完整性約束] |
加表級完整性約束 | add<表級完整性約束> |
刪除列 | drop <列名> [cascade(刪除引用該列的其他對象) |
刪除完整性約束 | drop constraint <完整性約束> [cascade |
修改列 | alter column <列名><數據類型> |
刪除基本表
drop table <表名> [restrict|cascade];
4、索引
加快查詢速度
B+樹索引,Hash散列索引
create [unqiue每個索引值只對應唯一的數據記錄][cluster聚簇索引] index <索引名> on <表名>([<列名><次序asc/desc>])
刪除索引
drop index <索引名>;
二、數據查詢
1、單表查詢
語句 | 含義 |
---|---|
select | 指定要顯示的屬性列 |
from | 指定查詢對象(基本表或視圖) |
where | 指定查詢條件 |
group by | 對查詢結果按指定列的值分組,該屬性列值相同的分爲一組。通常在每組中作用聚集函數 |
having | 只有滿足指定條件的組才予以輸出 |
order by | 對查詢結果表按指定列的值的升序或降序排序 |
(1)選擇表中若干列
在table中查詢指定列aaa,bbb,ccc
select aaa,bbb,ccc
from table;
在table中查詢全部列
select *
from table;
虛列
select子句的目標列表達式不僅可以是屬性,也可以是表達式。也可以加入常量值作爲新的列。
列別名
在屬性後空格加別名可以改變查詢結果的列標題
select 屬性名1 別名1,屬性名2 別名2
from table;
(2)選擇表中若干元組
去重
在屬性前加distinct去掉重複行
select distinct a
from table;
常用查詢條件
查詢條件 | 謂詞 |
---|---|
比較 | =,<,>,<=,>=,!=,<>,!>,!<,NOT+上述比較運算符 |
確定範圍 | between and ,not between and |
確定集合 | in, not in <值表>(a,b,c) |
字符匹配 | like ,not like ‘匹配串’ |
空值 | is null, is not null |
多重條件 | and,or,not(and優先級高於or) |
select x
from table
where 條件語句;
關於匹配串
可以是完整字符串,或者含有%(任意長度字符串)和_(任意單個字符)
匹配串中如果有通配符則需要轉義 ‘_’ escape ‘’
(3)order by子句
可按一個或多個屬性列排序
對於控制顯示次序由具體系統實現決定
升序:asc;降序:desc;缺省值爲升序
多個屬性按出現順序作爲優先級排序
select x
from table
order by a,b asc(desc);
(4)聚集函數
語句 | 含義 |
---|---|
count(*) | 統計元組個數 |
count([distinct/all] <列名>) | 統計一列中值的個數 |
sum([distinct/all] <列名>) | 計算一列值的和(必須爲數值類型) |
avg([distinct/all] <列名>) | 計算一列值的平均值(必須爲數值類型) |
max/min([distinct/all] <列名>) | 求最大值/最小值 |
(5)group by 子句
細化聚集函數,按指定列或多列值相等的分爲一組
若沒有分組,聚集函數作用於整個聚集函數
分組後作用於每個組
(6)having
條件語句
與where不同的地方在於,having作用於組,where作用於記錄元組
聚集函數在條件語句中只能用having
select a
from table
group by a
having count(*)>1;
2、連接查詢
一般格式:
[<表名1>.]<列名1><比較運算符>[<表名2>.]<列名2>
(1)等值與非等值連接
運算符爲"="
select table1.*,table2.*
from table1,table2
where table1.a=table2.b
自然連接可以通過select中去掉重複字段來實現
where可以同時支持連接和選擇
(2)自身連接
通過別名來實現區分
select tablea.a,tableb.b
from table tablea,table tableb
where tablea.c=tableb.d
tablea和tableb是表table的別名
(3)外連接
select x
from tablea left/right out join tableb on
(tablea.x=tableb.x);
左外連接左表保留右表爲null
右外連接右表保留左表爲null
(4)多表連接
通過and連接連接條件
3、嵌套查詢
將一個查詢嵌套在另一個查詢中的查詢稱爲嵌套查詢
不相關查詢子查詢和父查詢屬性不相關
相關查詢可用別名加條件
(1)in謂詞
select a /*父查詢*/
from table1
where b in
(select b /*子查詢*/
from table2
where ...
);
一般可以通過連接查詢實現
(2)比較運算符
確切知道內層查詢返回單值使用比較運算符
(3)帶有any或all
any和all的對象爲某個查詢結果,表示其中任意一個值或者全部值
any和all必須與比較運算符同時使用
any和all運算符等價於min和max聚集函數的某種形式
(4)帶有exists
exist對象爲查詢結果,表示這個查詢結果是否爲空,返回真值
內存查詢非空返回真值
內存查詢爲空返回假值
子查詢目標列表達式通常用*,因爲給出列名沒有意義
一般用於相關查詢
所有其他子查詢都能用exists謂詞的子查詢等價替換
4、集合查詢
種類 | 代碼 |
---|---|
並 | union |
交 | intersect |
差 | except |
參加操作的各查詢結果列數必須相同,對應數據類型也必須相同
查詢塊1
操作
查詢塊2