1. 程式人生 > >資料庫系統概論03-關係資料庫標準語言SQL&模式、基本表、檢視操作&連線、查詢刪改語句

資料庫系統概論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

轉換為更新基本表