模式的定義于刪除
1.定義模式
CREATE SCHEMA [ <模式名> ] AUTHORIZATION < 用戶名 >;
要創建模式,調用該命令的用戶必須擁有數據庫管理員權限,或者獲得了DBA授權
eg:為用戶WANG定義一個模式S-C-SC
CREATE SCHEMA "S-C-SC" AUTHORIZATION WANG;
定義模式實際上定義了一個命名空間,在這個空間中可以進一步定義該模式包含的數據庫對象,如基本表、視圖、索引等。
2.刪除模式
DROP SCHEMA <模式名><CASCADE|RESTRICT>
其中CASCADE和RESRICT兩者必選其一。CASCADE(級聯),表示在刪除模式的同時把該模式中所有的數據庫對象全部刪除。RESTRICT(限制),表示如果該模式中已經定義了數據庫對象,則拒絕該刪除語句的執行。
eg: 刪除創建的模式Test
DROP SCHEMA Test CASCADE;
基本表的定義、刪除與修改
1.定義基本表
CREATE TABLE <表名>(<列名><數據類型>[列級完整性限制])……[,<表級完整性約束>];
eg:建立一個學生表Student
CREATE TABLE Student(Sno CHAR(8) PRIMARY KEY,//列級完整性約束,Sno是主碼Sname VARCHAR(20) UNIQUE,//Sname取唯一值Ssex CHAR(6),Sbirthday Date,Smajor VARCHAR(40));
每一個基本表都屬于某一個模式,一個模式包含多個基本表。
2.修改基本表
ALTER TABLE <表名>[ADD[COLUMN]<新列名><數據類型>[完整性約束] //增加新的一列[DROP[COLUMN]<列名>[CASCADE|RESREICT]] //刪除一列[RENAME COLUMN <列名> TO <新列名>] //重命名列[ALTER COLUMN <列名> TYPE <數據類型>]; //修改列的數據類型
3.刪除基本表
DROP TABLE <表名>[RESTRICT|CASCADE]
如果選擇RESTRICT,則該表的刪除有限制條件,即該表不能被其他表的約束所引用,不能有視圖,不能有觸發器,不能有存儲過程或函數等。
索引的建立與刪除
1.索引(空間換時間)
當表的數據量很大時,查詢操作會比較耗時。建立索引可以加快查詢速度。
常見的索引結構包括順序表索引、B+樹索引、哈希索引、位圖索引等。索引文件由屬性值和相應的元組指針組成。
索引需要占用一定的存儲空間,當基本表更新時,索引需要進行相應的維護。
2.建立索引
CREATE [UNIQUE][CLUSTER] INDEX <索引名>
ON <表名>(<列名>[次序]……)
eg:按學生姓名升序建立唯一索引
CREATE UNIQUE INDEX Idx_StuSname ON Student(Sname);
3.修改索引
ALTER INDEX <舊索引名> RENAME TO <新索引名>
4.刪除索引
DROP INDEX <索引名>
數據查詢
SELECT[ALL|DISTINCT]<目標列表達式>[別名]……
FROM <表名或視圖名>[別名]
[WHERE <條件表達式>]
[GROUP BY <列名1>[HAVING <條件表達式>]]
[ORDER BY <列名2>[ASC|DESC]]
[LIMIT <行數1>[ OFFSET<行數2>]];
例子:
查詢全體學生的學號與姓名
SELECT Sno,Sname FROM Student;
查詢全體學生的詳細記錄
SELECT * FROM Student;
去掉結果中的重復行
SELECT DISTINCT Sno
FROM SC;
查詢主修計算機科學與技術專業全體學生的姓名
SELECT Sname
FROM Student
WHERE Smajor='計算機科學與技術';
查詢計算機科學與技術專業和信息安全專業的學生的姓名及性別
SELECT Sname,Ssex
FROM Student
WHERE Smajor IN ('計算機科學與技術','信息安全');
字符匹配
- %代表任意長度(長度可以為0)的字符串
- _代表任意單個字符
查詢所有姓劉的學生的姓名、學號和性別
SELECT Sname,Sno,Ssex
FROM Student
WHERE Sname LIKE '劉%';
涉及空值的查詢
查詢缺少成績的學生的學號和相應的課程號
SELECT Sno,Cno
FRON SC
WHERE Grade IS NULL;
注意這里的IS不能用=替代
聚集函數
COUNT (*) //統計元組個數
COUNT([DISTINCT|ALL]<列名>) //統計一列的值的個數
SUM([DISTINCT|ALL]<列名>)
AVG([DISTINCT|ALL]<列名>)
MAX([DISTINCT|ALL]<列名>)
MIN([DISTINCT|ALL]<列名>)
WHERE子句不能直接用聚集函數作為條件表達式。聚集函數只能用于SELECT子句和GROUP BY子句中的HAVING短語。
GROUP BY
查詢平均成績大于或等于90分的學生學號和平均成績
SELECT Sno,AVG(Grade)
FROM SC
GROUP BY Sno
HAVING AVG(Grade)>=90;
數據更新
1.插入數據
INSERT INTO <表名>[(<屬性列1>)]
VALUES (<常量1>……);
2.修改數據
UPDATE <表名>
SET <列名>=<表達式>
[WHERE <條件>];
eg:將學生2018001的出生日期改為2001-3-18
UPDATE Student
SET Sbirthday='2001-3-18'
WHERE Sno='2018001';
3.刪除數據
DELETE FROM <表名>
[WHERE <條件>];
eg: 刪除計算機科學與技術專業所有學生的選課記錄
DELETE FROM SC
WHERE Sno IN(SELECT SnoFROM StudentWHERE Smajor='計算機科學與技術');