SQL語言基礎


 

 

關系數據庫的標准語言----------結構化查詢語言(Structured Query Language,SQL語言是介於關系代數 和元組演算 之間的一種語言。

 

一、歷史

198610月,美國國家協會(ANSI)發布了ANSI文件X5.135-1986《數據庫語言SQL》,19876月國際化標准化協會(ISO)采納為國際標准。這兩個標准現在稱為“SQL86”

198910ANSI又頒布了增強完整性特征的SQL89標准。隨后,ISO對標准進行了大量的修改和擴充。

19928ISO 發布了標准化文件ISO/IEC90751992《數據庫語言SQL》,人們習慣稱標准為SQL92-----“SQL2”

1999ISO發布了標准化文件:ISO/IEC90751999年《數據庫語言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# biao2name#對應。

 

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 <列名><類型>

 

例:在基本表NAME 的長度為6

ALTER  TABLE  S  MODIFY  name char(6);

 

 

3、基本表的刪除

在基本表不需要時,可以用“DROP TABLE” 語句刪除。句法:

DROP  TABLE <基本表名> [CASCADE | RESTRICT]

 

例:需要刪除

DROP  TABLE  S  RESTRICT

 

 

創建索引

 

1、索引的創建

創建索引用“CREATE  INDEX”語句實現。

CHARTE [UNIQUE] INDEX <索引名> NO <基本表名><列表序列>

 

例:對S表創建索引。

CHARTE  UNIQUE  INDEX  id_index  NO  Sid

UNIQUE表示每個索引值對應唯一的數據記錄。

 

2、索引的刪除

 

刪除索引用“DROP INDEX”,語法下:

DROP  INDEX<索引名>

 

例:

DROP  INDEX  id_indexsc_index;

 

查詢語句

查詢SQL 語言的主要功能。相比其它操作的用法也比較復雜。

 

1、聚合函數

SQL提供了下聚合函數:

COUT(*)      計算元組的個數

COUNT(<列名>)    對一列中的值計算個數

SUM(<列名>)   求某一列值的總和

AVG(<列名>)   求某一列值的平均值

MAX(<列名>)   求某一列值的最大值

MIN(<列名>)   求某一列值的最小值

 

例:求S表,學生的總人數和平均年齡。

SELECT  COUNT*,AVGAGE

FROM  S

 

2、字符串的匹配符

百分號(%):匹配零個或多個字符

下划線(_匹配單個字符

 

例:查詢姓的人

SELECT  *  FROM  S  WHERE  name=“%” 

 

3、SELECT語句句法:

 

SELECT<目標表名和(或)視圖序列

FROM<基本表名和()視圖序列>

[WHERE<行條件表達式>]

[GROUP  BY<列名序列>

[HAVING<組條件表達式>]]

[ORDER  BY <列名[ASC | DESC]>,....]

 

1SELECT .... FROM .....WHERE .....;最基本的查詢格式。

2GROUP 子句中指定列的值分組,提取滿足HAVING子句中組條件表達式的組。

3ORDER子句對輸出的目標表進行排序,ASC升序排列(默認可以不寫),DESC降序排列。

1Orders表,查找每個客戶的總金額(總訂單)。

我們想要使用 GROUP BY 語句對客戶進行組合。

SELECT  Customer,SUM(OrderPrice)  FROM  Orders

GROUP  BY  Customer

 

GROUP BY 詳細用法:

http://www.w3school.com.cn/sql/sql_groupby.asp

 

2Orders表,查找訂單總金額少於 2000 的客戶。

HAVING 篩選分組條件,我們使用如下 SQL 語句:

SELECT  Customer,SUM(OrderPrice)  FROM  Orders

GROUP  BY  Customer

HAVING  SUM(OrderPrice)<2000

 

3Orders表,對定單對進行降序。

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  Sidname

VALUES‘001’張三); 

 

2

INSERT  INTO  SIDNAME

VALUES‘001’張三),

‘002’李四

‘003’王五);

 

3:在基本表S中,把成績大於80分的學生的學號和平均成績存入另一個已存在的基本表S2ID,SCORE)。

INSERT  INTO  S2idscore

SELECT  idscore  

FROM  S  WHERE  score > 80 ;

 

4:某個班級的選課情況已經在基本表SIDNAMESEX),把S的數據插入到表S2中。

INSERT  INTO  S2idnamesex

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的元組修改為(C5DBT3

UPDATE  S

SET  ROW=‘C5’‘DB’‘T3’

WHERE  class_id=‘C5’ 

 

 

 

創建視圖的

 

在 SQL 中,視圖是基於 SQL 語句的結果集的可視化的表。

 

1、視圖的創建

創建試圖用“CREATE  VIEW”語句實現。句法如下:

CREATE  VIEW <視圖名>(<列表序列>)

<SELECT 查詢語句>

例:對數據庫中表SSCC,用戶經常用到的sname,cname,score等列的數據,創建視圖。

CREATE  VIEW  STUDENT_SCOREsnamecnamescore

FROM  SSCC

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  idsnameage

FROM  S

WHERE  sex=”M”

WITH  CHECK  OPTION;

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM