資料庫系統概論03-關係資料庫標準語言SQL&模式、基本表、檢視操作&連線、查詢刪改語句
3.1關係資料庫標準語言SQL
(Structured Query Language )結構化查詢語言
資料查詢:SELECT
資料定義:CREATE\DROP
資料操縱:INSERT\UPDATE\DELETE
資料控制:GRANT\REVOKE
3.1.1 資料定義
操作物件 | 建立 | 刪除 | 修改 |
---|---|---|---|
模式 | CREATE SCHEMA | DROP SCHEMA | |
表 | CREATE TABLE | DROP TABLE | ALTER TABLE |
檢視 | CREATE VIEW | DROP VIEW | |
索引 | CREATE INDEX | DROP INDEX | ALTER INDEX |
3.1.2 模式的定義與刪除
定義模式
CREATE SCHEMA 名字 AUTHORIZATION 使用者名稱
create schema "test" authorization wang CREATE TABLE NAME(SID INT, SNAME CHAR(20) );
刪除模式
DROP SCHEMA 名字 CASCADE|RESTRICT
CASCADE:級聯 RESTRICT:限制
3.1.3 基本表的定義與修改
定義基本表
CREATE TABLE 表名 (列名 資料型別 列級完整性約束條件,
列名 資料型別 約束條件
表級完整性約束條件);
約束條件:UNIQUE\PRIMARY KEY\NOT NULL
表級完整性約束條件:FOREIGN KEY(Sno) REFERENCES Course(Cno)
資料型別:char(n)定長、varchar(n)變長字串、BLOB二進位制大物件、TIME時分秒、Date年月日等
修改基本表
ALTER TABLE 表名
ADD COLUMN 新列名 資料型別 [約束]
ADD [表級完整性約束條件]
DROP COLUMN 列名 CASCADE|RESTRICT
DROP CONSTRAINT 約束 CASCADE|RESTRICT
DROP COLUMN 列名 資料型別
刪除基本表
DROP TABLE 表名 CASCADE|RESTRICT
3.1.3 索引的建立與刪除
建立索引
CREATE [UNIQUE] [CLUSTER] INDEX 索引名 ON 表名 (列名)
CREATE UNIQUE INDEX Stuno ON Student(Sno);
ASC升序、DESC降序
修改索引
ALTER INDEX 舊索引名 RENAME TO 新索引名
3.2 資料查詢
SELECT ALL|DISTINCT 目標列表達式 FROM 表名或檢視名 WHERE 條件表示式 GROUP BY 列名 HAVING 條件表示式 ORDER BY 列名 ASC|DESC
DISTINCT:消除重複行
比較運算子=、>、>=、<、<=、!=或<>、!>、!<
邏輯運算子and、or、not
模糊匹配
like
NO LIKE
%表示任意多個任意字元
_表示一個任意字元
查詢姓黃的學生
select * from chanpin where name like '%車';
查詢名字以車結尾的產品
範圍查詢
in表示在一個非連續的範圍內
not in表示不在一個非連續的範圍內
BETWEEN 下限 AND 上限、 NOT BETWEEN AND
空值查詢
is null
is not null
3.2.1 聚合函式
- COUNT():統計行數量
- SUM:獲取單個列的合計值
- AVG:計算某個列的平均值
- MAX:計算列的最大值
- MIN:計算列的最小值
案例:
(1)查詢選修課程的學生人數 SELECT COUNT(DISTINCT Sno) FROM SC;
(2)計算選修1號課程的學生的平均成績 SELECT AVG(GRADE) FROM SC WHERE Cno='1';
(3)查詢學生201507110選修課程的總課程 SELECT SUM(Ccredit) FROM SC,Course WHERE Sno='201507110' AND SC.Sno=Course.Cno
(4)求各個課程號及其相應的選課人數 SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno;
(5)選修三門以上課程的學生學號:SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*)>3;
GROUP BY 將查詢結果按某一列或多列的值分組,值相等為一組。
WHERE 子句與HAVING短句的區別在於作用物件不同。WHERE 子句--基本表或檢視、HAVING短句--組,後面可以加聚集函式
3.2.2 連線查詢
等值與非等值連線查詢
連線運算子是=時,稱為等值連線。
在等值連線時中把目標列中重複的屬性列去掉則為自然連線
自身連線
給表取別名
SELECT FIRST.Cno,SECOND.Cpno FROM Course FIRST,Course SECOND WHERE FIRST.Cpno = SECOND.Cno
外連線
不滿足條件的元組也儲存,即儲存懸浮元組
SELECT * FROM Student LEFT OUTER JOIN SC ON (Student.Sno=SC.Sno);
內連線
select a.*,b.* from a inner join b on a.id=b.parent_id
多表查詢
SELECT * FROM SC,Student,Course WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno;
巢狀查詢
一個SELECT-FROM-WHERE稱為查詢塊
將查詢塊巢狀在另一個查詢塊的WHERE子句或HAVING短句的條件中
注意!!!子查詢的SELECT語句中不能使用ORDER BY子句,ORDER BY子句只能對最後的查詢結果排序
帶有IN謂詞的子查詢
- 不相關子查詢:子查詢的查詢條件不依賴於父查詢
例項:SELECT Sno,Sname,Sdept FROM Student WHERE Sdept IN
(SELECT Sdept FROM Student WHERE Sname='amber');
- 相關子查詢:子查詢的查詢條件依賴於父查詢
帶比較運算子的子查詢:用=、>、<等代替IN
帶ANY(SOME)或ALL的子查詢,如<ANY、>SOME等
帶EXISTS、NOT EXISTS謂詞的子查詢,不返回任何資料,只返回true或false
3.2.2 集合查詢
UNION:並操作,查詢結果列數一定要相同,對應項的資料型別也必須相同
INTERSECT:交操作
EXCEPT:差操作
3.3 資料更新
插入元組在: INSERT INTO 表名 屬性列 VALUES()
INSERT INTO Dept_age(Sdept,Avg_age) SELECT Sdept,AVG(Sage)FROM Student GROUP BY Sdept;
修改操作
UPDATE Student SET Sage=22 WHERE Sno='201507110';
刪除資料
DELETE FROM Student WHERE Sno='201507111';
3.4 檢視
3.4.1 建立檢視
CREATE VIEW 檢視名 (列名,列名,,) AS 子查詢 [ WITH CHECK OPTION];
WITH CHECK OPTION:刪改查操作時必須滿足檢視定義的謂詞條件(即子查詢中的條件表示式)
分組檢視:帶有聚集函式和GROUP BY 子句的查詢來定義檢視
刪除檢視:DROP VIEW 檢視名 CASCADE
3.4.2 查詢檢視
檢視消解:從資料字典中取出檢視的定義,把定義中的子查詢和使用者查詢結合起來,轉換成等價的基本表查詢,再執行修改後的查詢。(對師徒查詢轉換成對基本表的查詢)
SELECT Sno,Sage FROM IS_Student WHERE Sage <20
轉換後:SELECT Sno,Sage FROM Student WHERE Sdept='IS' and Sage <20
3.4.3 更新檢視
不是所有試圖都是可更新的。由兩個以上的基本表匯出的,則此檢視不允許更新等。
UPDATE Sno,Sage FROM Student WHERE Sdept='IS' and Sage <20
轉換為更新基本表