關系數據庫的標准語言----------結構化查詢語言(Structured Query Language),SQL語言是介於關系代數 和元組演算 之間的一種語言。
一、歷史
1986年10月,美國國家協會(ANSI)發布了ANSI文件X5.135-1986《數據庫語言SQL》,1987年6月國際化標准化協會(ISO)采納為國際標准。這兩個標准現在稱為“SQL86”。
1989年10月ANSI又頒布了增強完整性特征的SQL89標准。隨后,ISO對標准進行了大量的修改和擴充。
1992年8月ISO 發布了標准化文件ISO/IEC9075:1992《數據庫語言SQL》,人們習慣稱標准為SQL92-----“SQL2”。
1999年ISO發布了標准化文件:ISO/IEC9075:1999年《數據庫語言SQL》,人們習慣稱為SQL----“SQL3”。
二、數據庫的體系結構
SQL數據庫的體驗結構基本上也是三級結構,但屬於與關系模型的術語不同。在SQL中,關系模式稱為“基本表”,存儲模式稱為“存儲文件”,子模式稱為“視圖”,元組稱為“行”,屬性稱為“行”。
SQL數據庫的體系結構要點如下:
(1)一個SQL模式是表和約束的集合。
(2)一個表由行集構成,一行是列的序列,每列對應一個數據項。
(3)表有三種類型:基本表,視圖和導出表。基本表是實際存儲在數據庫中的表,視圖是由若干基本表或其他視圖構成。導出表是執行了查詢時產生的表。
(4)一個基本表可以跨一個或多個存儲文件,一個存儲文件也可以存放一個或多個基本表。每一個存儲文件與外部存儲器上一個物理文件對應。
體系結構:

三、SQL的組成
核心的SQL主要有四個部分組成:
(1)數據定義語言,即SQL DDL。
(2)數據操縱語言,即SQL DML。
(3)嵌入式SQL語言的使用規定。
(4)數據控制語言,即SQL DCL。
四、SQL 的特點
SQL具有如下特點,
(1)SQL具有十分靈活和強大的查詢功能。
(2)SQL 不是一個應用開發語言,它只提供對數據的操作功能,不能完成屏幕操作、菜單管里,報表生成等功能。
(3)SQL 是國際標准語言,有利於各種數據庫之間交換數據。
(4)SQL 簡單易學,完成核心功能只用了9個英語單詞。
創建模式(數據庫):
一個SQL模式定義為基本表的集合,模式可以理解成架構;一個SQL 模式由模式名和模式擁有者的用戶名或賬號來確定;創建SQL模式,就是定義了一個存儲空間。
創建模式:
語法:
CREATE SCHEMA<模式名>QUTHORIZATION<用戶名>
例如:
CREATE SCHEMA st_co AUTHORIZATION lismith;
該模式名為:st_co ,擁有者為 lismith。
刪除模式:
語法:
DROP SCHEMA <模式名> [ CASCADE | RESTRICT ]
CASCADE(級聯式)方式:全部撤銷。
RESTRICT(約束式)方式:當SQL模式中沒有任何下屬元素時才能刪除SQL模式。
例:
DROP SCHEMA ST_CO CASCADE;
“SQL模式” 學術味太重。大多數據庫稱為“創建數據庫”,語句如下:
CREATA DATABASE <數據庫名>
DROP DATABASE <數據庫名>
SQL基本數據類型
(1)數值型
INTEGER 長整型
SMALLINT 短整型
REAL 浮點型
DOUBLE PRECISION 雙精度浮點數
FLOAT (n) 浮點數,精確到小數點后n位
NUMERIC(p,d) 定點數,有p位數,小數點后面有d位數
(2)字符串型
CHAR(n) 長度為n的定長字符串
VARCHAR(n) 具有最大長度為n的變長字符串
(3)位串型
BIT(n) 長度為n的二進制位串
BIT VARYING(n) 最大長度為n的二進制位串
(4)時間型
DATE 日期型,年月日
TIME 時間型,時分秒
注:不同的數據庫要比以上的數據類型豐富。
http://www.w3school.com.cn/sql/sql_datatypes.asp
創建數表:
對基本表結構的操作有 創建、修改和刪除
1、基本表的創建
語法:
CREATE TABLE <基本表名>
(<列名 類型>,
........
<完整性約束>,
........ )
例:
CREATE TABLE biao
(id# CHAR(4) NOT NULL,
name CHAR(8) NOT NULL,
title CHAR(10),
PRIMARY KEY(id#)
FOREIGN KEY(name#) REFERENCES biao2(name#));
biao 為表名,
id# 為字段名,CHAR(4)字段類型與長度,NOT NULL表示字段不能為空;
PRIMARY KEY(id#) 表示id#字段為主鍵。
FOREIGN KEY(name#) REFERENCES biao2(name#) 表示外鍵name# 與biao2的name#對應。
2、基本表的修改
在基本本建立一段時間后,可以根據實際需要對基本表進行修改。
(1)增加新的列用“ALTER.....ADD.....”語句,句法如下:
ALTER TABLE<基本表名> ADD<列名><類型>
例:在一個表S中增加一個地址(address)列,可用下列語句:
ALTER TALBLE S ADD address varchar (30);
(2)刪除原有列用“ALTER ...DROP....”語句,其句法如下:
ALTER TABLE<基本表名>DROP<列名>[CASCADE | RESTRICT]
例:在基本表S中刪除年齡(age)列
ALTER TABLE S DROP age CASCADE;
(3)修改原有列的類型、寬度用“ALTER ....MODIFY.....”,句法如下:
ALTER TABLE<基本表名> MODIFY <列名><類型>
例:在基本表S 中NAME 的長度為6
ALTER TABLE S MODIFY name char(6);
3、基本表的刪除
在基本表不需要時,可以用“DROP TABLE” 語句刪除。句法:
DROP TABLE <基本表名> [CASCADE | RESTRICT]
例:需要刪除S 表
DROP TABLE S RESTRICT;
創建索引
1、索引的創建
創建索引用“CREATE INDEX”語句實現。
CHARTE [UNIQUE] INDEX <索引名> NO <基本表名>(<列表序列>)
例:對S表創建索引。
CHARTE UNIQUE INDEX id_index NO S(id)
UNIQUE表示每個索引值對應唯一的數據記錄。
2、索引的刪除
刪除索引用“DROP INDEX”,語法下:
DROP INDEX<索引名>
例:
DROP INDEX id_index,sc_index;
查詢語句
查詢SQL 語言的主要功能。相比其它操作的用法也比較復雜。
1、聚合函數
SQL提供了下聚合函數:
COUT(*) 計算元組的個數
COUNT(<列名>) 對一列中的值計算個數
SUM(<列名>) 求某一列值的總和
AVG(<列名>) 求某一列值的平均值
MAX(<列名>) 求某一列值的最大值
MIN(<列名>) 求某一列值的最小值
例:求S表,學生的總人數和平均年齡。
SELECT COUNT(*),AVG(AGE)
FROM S
2、字符串的匹配符
百分號(%):匹配零個或多個字符
下划線(_): 匹配單個字符
例:查詢姓“張”的人
SELECT * FROM S WHERE name=“張%”
3、SELECT語句句法:
SELECT<目標表名和(或)視圖序列>
FROM<基本表名和(或)視圖序列>
[WHERE<行條件表達式>]
[GROUP BY<列名序列>
[HAVING<組條件表達式>]]
[ORDER BY <列名[ASC | DESC]>,....]
(1)SELECT .... FROM .....WHERE .....;最基本的查詢格式。
(2)GROUP 子句中指定列的值分組,提取滿足HAVING子句中組條件表達式的組。
(3)ORDER子句對輸出的目標表進行排序,ASC升序排列(默認可以不寫),DESC降序排列。
例1:Orders表,查找每個客戶的總金額(總訂單)。
我們想要使用 GROUP BY 語句對客戶進行組合。
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
GROUP BY 詳細用法:
http://www.w3school.com.cn/sql/sql_groupby.asp
例2:Orders表,查找訂單總金額少於 2000 的客戶。
用HAVING 篩選分組條件,我們使用如下 SQL 語句:
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
HAVING SUM(OrderPrice)<2000
例3:Orders表,對定單對進行降序。
SELECT Customer,OrderPrice FROM Orders
ORDER BY OrderPrice DESC
數據更新
1、數據插入
(1)單元組的插入
INSERT INTO <基本表名>[(<列名序列>)]
VALUES(<元組值>)
(2)多元組的插入
INSERT INTO <基本表名>[(<列名序列>)]
VALUES(<元組值>),(<元組值>),...........,(<元組值>)
(3)查詢結果的插入
INSERT INTO <基本表名>[(<列名序列>)]
<SELECT查詢語句>
(4)表的插入
INSERT INTO <基本表名1>[(<列名序列>)]
TABLE<基本表名2>
這個語句把基本表2的值插入到基本表1中。
例1:
INSERT INTO S(id,name)
VALUES(‘001’,‘張三’);
例2:
INSERT INTO S(ID,NAME)
VALUES(‘001’,‘張三’),
(‘002’,‘李四’)
(‘003’,‘王五’);
例3:在基本表S中,把成績大於80分的學生的學號和平均成績存入另一個已存在的基本表S2(ID,SCORE)。
INSERT INTO S2(id,score)
SELECT id,score
FROM S WHERE score > 80 ;
例4:某個班級的選課情況已經在基本表S(ID,NAME,SEX),把S的數據插入到表S2中。
INSERT INTO S2(id,name,sex)
TABLE S;
2、數據刪除
SQL的刪除操作是指從基本表中刪除行,其句法如下:
DELETE FROM<基本表名>
[WHERE<條件表達式>]
例:把課程名為maths的成績從基本表S中刪除
DELETE FROM S
WHERE cname=‘maths’;
3、數據修改
修改表中元組的某些值時,可以用UPDATA 語句實現。句法如下:
UPDATE<基本表名>
SET<列名> <值表達式>[,<列名>=<值表達式>] | ROW (<元組>)
[WHERE<條件表達式>]
例1:對基本表S,把C5課程名改為DB
UPDATA S
SET CNAME=‘DB’
WHERE class_id=‘C5’;
例2,在S表中,把課程號為C5的元組修改為(C5,DB,T3)
UPDATE S
SET ROW=(‘C5’,‘DB’,‘T3’)
WHERE class_id=‘C5’
創建視圖的
在 SQL 中,視圖是基於 SQL 語句的結果集的可視化的表。
1、視圖的創建
創建試圖用“CREATE VIEW”語句實現。句法如下:
CREATE VIEW <視圖名>(<列表序列>)
<SELECT 查詢語句>
例:對數據庫中表S,SC,C,用戶經常用到的sname,cname,score等列的數據,創建視圖。
CREATE VIEW STUDENT_SCORE(sname,cname,score)
FROM S,SC,C
WHERE S.id = SC.id AND SC.id = C.id ;
2、視圖的刪除
不需要視圖時,用“DROP VIEW” 刪除,句法:
DROP VIEW <視圖名>
例:
DROP VIEW STUDENT_SCORE;
3、操作視圖
試圖的查詢(SELECT)操作與表基本一樣。但對於視圖中元組的更新操作就不一樣了。
如果視圖是從單個基本表只使用選擇、投影操作導出的,並且包含了基本表的主鍵,那么這樣的視圖稱為“行列子集視圖”。允許用戶更新的試圖在定義時必須加上“WITH CHECK OPTION”。
例:定義一個有關男學生的視圖:
CREATE VIEW S_MALE
AS SELECT id,sname,age
FROM S
WHERE sex=”M”
WITH CHECK OPTION;
