數據庫系統概論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

轉換爲更新基本表

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章