數(shù)據(jù)定義
模式
-
定義模式
CREATE SCHEMA <模式名> AUTHORIZATION <用戶名>;CREATE SCHEMA <模式名> AUTHORIZATION <用戶名> [<表定義子句>|<視圖定義子句>|<授權(quán)定義子句>];例子:
CREATE SCHEMA TEST AUTHORIZATION ZHANG CREATE TABLE TAB1( COL1 SMALLINT, COL2 INT, COL3 CHAR(20), COL4 NUMERIC(10,3), COL5 DECIMAL(5,2));
-
刪除模式
DROP SCHEMA <模式名> <CASCADE|RESTRICT>;
基本表
-
定義基本表
CREATE TABLE <表名> (<列名><數(shù)據(jù)類型> [列級(jí)完整性約束條件] [,<列名><數(shù)據(jù)類型> [列級(jí)完整性約束條件]] ... [,<表級(jí)完整性約束條件>]);例子:
CREATE TABLE STUDENT (SNO CHAR(9) PRIMARY KEY, SNAME CHAR(20) UNIQUE, SSEX CHAR(2), SAGE SMALLINT, SDEPT CHAR(20));-
CREATE TABLE SC (SNO CHAR(9), CNO CHAR(4), GRADE SMALLINT, PRIMARY KEY(SNO,CNO), FOREIGN KEY(SNO) REFERENCES STUDENT(SNO), FOREIGN KEY(CNO) REFERENCES COURSE(CNO));?
-
修改基本表
ALTER TABLE <表名> [ADD [COLUMN] <新列名> <數(shù)據(jù)類型> [完整性約束]] [ADD <表級(jí)完整性約束>] [DROP [COLUMN] <列名> [CASCADE|RESTRICT]] [DROP CONSTRAINT <完整性約束名> [RESTRICT|CASCADE]] [ALTER COLUMN <列名> <數(shù)據(jù)類型>];例子:
ALTER TABLE Student ADD s_entrance DATE;ALTER TABLE Student ALTER COLUMN Sage INT;-
ALTER TABLE Course ADD UNIQUE(Cname);?
-
刪除基本表
DROP TABLE <表名> [RESTRICT|CASCADE];
索引
-
建立索引
CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名> [<次序> [,<列名> [<次序>]]...);例子:
-
CREATE UNIQUE INDEX Stusno ON STUDENT(Sno);?
-
修改索引
ALTER INDEX <舊索引名> RENAME TO <新索引名>;
-
刪除索引
-
DROP INDEX <索引名>;?
-
數(shù)據(jù)查詢
SELECT [ALL|DISTINCT] <目標(biāo)列表達(dá)式> [,<目標(biāo)列表達(dá)式>] ... FROM <表名或視圖名> [,<表名或視圖名> ...]|(<SELECT 語(yǔ)句> [AS] <別名>) [WHERE <條件表達(dá)式>] [GROUP BY <列名1> [HAVING <條件表達(dá)式>]] [ORDER BY <列名2> [ASC|DESC]];很多例子
-
單表查詢
SELECT Sno,Sname FROM Student;SELECT * FROM Student;SELECT Sname, 2014-Sage FROM Student;SELECT Sname,'Year of Birth' 2014-Sage, LOWER(Sdept) FROM Student;SELECT DISTINCT Sno FROM SC;SELECT Sname,Sage FROM Student WHERE Sage<20;SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 30;SELECT Sname,Ssex FROM Student WHERE Sdept IN ('CS','MA','IS');[NOT] LIKE '<匹配串>' [ESCAPE'<換碼字符>'] % 任意長(zhǎng)度字符串 _ 任意單個(gè)字符SELECT Sno,Grade FROM SC WHERE Cno='3' ORDER BY Grade DESC;COUNT(*) COUNT([DISTINCT|ALL] <列名>) SUM([DISTINCT|ALL] <列名>) AVG([DISTINCT|ALL] <列名>) MAX([DISTINCT|ALL] <列名>) MIN([DISTINCT|ALL] <列名>) 聚集函數(shù)只能用于SELECT子句和GROUP BY中的HAVING子句SELECT COUNT(*) FROM Student;SELECT AVG(Grade) FROM SC WHERE Cno='1';SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno; 分組后聚集函數(shù)將作用于每一個(gè)組,即每一組都有一個(gè)聚集函數(shù)SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) > 3;
-
連接查詢
SELECT Student.*,SC.* FROM Student,SC WHERE Student.Sno=SC.Sno; 查詢每個(gè)學(xué)生及其選修課程的情況SELECT FIRST.Cno,SECOND.Cpno FROM Course FIRST,COURSE SECOND WHERE FIRST.Cpno=SECOND.Cno; 自身連接是要為表取兩個(gè)不同的名字SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student LEFT OUTER JOIN SC ON (Student.Sno=SC.Sno); 左外連接SELECT Student.Sno,Sname,Cname,Grade FROM Student,SC,Course WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno;
-
嵌套查詢
SELECT Sname FROM Student WHERE Sno IN (SELECT Sno FROM SC WHERE Cno='2');ANY | ALL SELECT Sname,Sage FROM Student WHERE Sage<ANY(SELECT Sage From Student WHERE Sdept='CS');
-
集合查詢
[UNION|INTERSECT|EXCEPT] SELECT * FROM Student WHERE Sdept='CS' UNION SELECT * FROM Student WHERE Sage<=19;
-
基于派生表的查詢
SELECT Sno,Cno FROM SC,(SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno) AS Avg_sc(avg_sno,avg_grade) Where SC.Sno=Avg_sc.avg_sno and SC>grade>=Avg_sc.avg_grade;
數(shù)據(jù)更新
-
插入數(shù)據(jù)
INSERT INTO <表名> [(<屬性列1> [,<屬性列2>] ...)] VALUES (<常量1>[,<常量2>] ...);
-
修改數(shù)據(jù)
UPDATE <表名> SET <列名>=<表達(dá)式> [,<列名>=<表達(dá)式>] ... [WHERE <條件>];
-
刪除數(shù)據(jù)
DELETE FROM <表名> [WHERE <條件>];
空值的處理
IS NULL|IS NOT NULL UNIQUE
視圖
-
CREATE VIEW <視圖名> [(<列名>[,<列名>]...)] AS <子查詢> [WITH CHECK OPTION];CREATE VIEW IS_Student AS SELECT Sno,Sname,Sage FROM Student WHERE Sdept='IS' WITH CHECK OPTION; 以后對(duì)該視圖進(jìn)行插入、修改、刪除操作時(shí),DBMS會(huì)自動(dòng)加上Sdept='IS'的條件CREATE VIEW IS_S1(Sno,Sname,Grade) AS SELECT Student.Sno,Sname,Grade FROM Student,SC WHERE Sdept='IS' AND Student.Sno=SC.Sno AND SC.Cno='1';CREATE VIEW S_G(Sno,Gavg) AS SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno;
DROP VIEW <視圖名> [CASCADE];UPDATE 有一些視圖是不能更新的SELECT 與表操作相同
授權(quán)
GRANT <權(quán)限>[,<權(quán)限>]... ON <對(duì)象類型> <對(duì)象名> [,<對(duì)象類型> <對(duì)象名>]... TO <用戶>[,<用戶>]... [WITH GRANT OPTION]; SELECT|DELETE|ALL PRIVILEGES ...REVOKE <權(quán)限>[,<權(quán)限>]... ON <對(duì)象類型> <對(duì)象名> [,<對(duì)象類型> <對(duì)象名>]... FROM <用戶>[,<用戶>]...[CASCADE|RESTRICT];CREATE USER <username>[WITH][DBA|RESOURCE|CONNECT];CREATE ROLE <角色名>AUDIT ALTER,UPDATE ON SC; NOAUDIT ALTER,UPDATE ON SC;
完整性約束命名子句
CHECK (Ssex IN ('boy','girl'))-
CONSTRAINT <完整性約束條件名> <完整性約束條件>?